Skip to content

Commit

Permalink
Fixed parsing to use Transforms for calibration as well.
Browse files Browse the repository at this point in the history
  • Loading branch information
helenol committed Aug 2, 2016
1 parent 6d618c8 commit 4ea7220
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 37 deletions.
1 change: 1 addition & 0 deletions kitti_to_rosbag/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ add_definitions(-std=c++11)
#############
cs_add_library(${PROJECT_NAME}
src/kitti_parser.cpp
src/kitti_ros_conversions.cpp
)

############
Expand Down
45 changes: 45 additions & 0 deletions kitti_to_rosbag/include/kitti_to_rosbag/kitti_common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#ifndef KITTI_TO_ROSBAG_KITTI_COMMON_H_
#define KITTI_TO_ROSBAG_KITTI_COMMON_H_

#include <Eigen/Core>
#include <Eigen/StdVector>
#include <kindr/minimal/quat-transformation.h>

namespace kitti {

// Transformation type for defining sensor orientation.
typedef kindr::minimal::QuatTransformation Transformation;
typedef kindr::minimal::RotationQuaternion Rotation;

struct CameraCalibration {
EIGEN_MAKE_ALIGNED_OPERATOR_NEW

// Intrinsics.
Eigen::Vector2d image_size; // S_xx in calibration.
Eigen::Matrix3d rect_mat; // R_rect_xx in calibration.
Eigen::Matrix<double, 3, 4> projection_mat; // P_xx in calibration.

// Unrectified (raw) intrinsics. Should only be used if rectified set to
// false.
Eigen::Matrix3d K; // Camera intrinsics, K_xx in calibration.
Eigen::Matrix<double, 1, 5> D; // Distortion parameters, radtan model.

// Extrinsics.
Transformation T_cam0_cam;
//Eigen::Matrix3d R; // Rotation matrix, extrinsics, wrt 0th camera (?)
//Eigen::Vector3d T; // Translation matrix, extrinsics, wrt 0th camera (?)

// Accessor for full transform. Derived from 'raw' extrinsics above.
//Transformation getTransformToCam0() const {
// Transformation transform(Rotation::fromApproximateRotationMatrix(R), T);
// return transform;
//}
};

typedef std::vector<CameraCalibration,
Eigen::aligned_allocator<CameraCalibration> >
CameraCalibrationVector;

} // namespace kitti

#endif // KITTI_TO_ROSBAG_KITTI_COMMON_H_
37 changes: 2 additions & 35 deletions kitti_to_rosbag/include/kitti_to_rosbag/kitti_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,46 +4,13 @@
#include <memory>
#include <map>

#include <Eigen/Core>
#include <Eigen/StdVector>
#include <kindr/minimal/quat-transformation.h>
#include <pcl/point_types.h>
#include <pcl/conversions.h>
#include <opencv2/core/core.hpp>

namespace kitti {

// Transformation type for defining sensor orientation.
typedef kindr::minimal::QuatTransformation Transformation;
typedef kindr::minimal::RotationQuaternion Rotation;

struct CameraCalibration {
EIGEN_MAKE_ALIGNED_OPERATOR_NEW

// Intrinsics.
Eigen::Vector2d image_size; // S_xx in calibration.
Eigen::Matrix3d rect_mat; // R_rect_xx in calibration.
Eigen::Matrix<double, 3, 4> projection_mat; // P_xx in calibration.

// Unrectified (raw) intrinsics. Should only be used if rectified set to
// false.
Eigen::Matrix3d K; // Camera intrinsics, K_xx in calibration.
Eigen::Matrix<double, 1, 5> D; // Distortion parameters, radtan model.
#include "kitti_to_rosbag/kitti_common.h"

// Extrinsics.
Eigen::Matrix3d R; // Rotation matrix, extrinsics, wrt 0th camera (?)
Eigen::Vector3d T; // Translation matrix, extrinsics, wrt 0th camera (?)

// Accessor for full transform. Derived from 'raw' extrinsics above.
Transformation getTransformToCam0() const {
Transformation transform(Rotation::fromApproximateRotationMatrix(R), T);
return transform;
}
};

typedef std::vector<CameraCalibration,
Eigen::aligned_allocator<CameraCalibration> >
CameraCalibrationVector;
namespace kitti {

class KittiParser {
public:
Expand Down
5 changes: 3 additions & 2 deletions kitti_to_rosbag/src/kitti_parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,8 @@ bool KittiParser::loadCamToCamCalibration() {
// All matrices are written row-major but Eigen is column-major
// (can swap this, but I guess it's anyway easier to just transpose
// for these small matrices).
camera_calibrations_[index].R = R.transpose();
camera_calibrations_[index].T_cam0_cam.getRotation() =
Rotation::fromApproximateRotationMatrix(R.transpose());
}
continue;
} else if (header.compare(0, 1, "T") == 0) {
Expand All @@ -271,7 +272,7 @@ bool KittiParser::loadCamToCamCalibration() {
// Parse the translation matrix.
if (parseVectorOfDoubles(data, &parsed_doubles)) {
Eigen::Vector3d T(parsed_doubles.data());
camera_calibrations_[index].T = T;
camera_calibrations_[index].T_cam0_cam.getPosition() = T;
}
continue;
}
Expand Down

0 comments on commit 4ea7220

Please sign in to comment.