ConSLAM
ConSLAM (a hand-held scanner walked through construction sites).
Accepts either a ROS 1 bag (.bag) or a ROS 2 bag (.mcap), autodetected from the file extension.
Topics in these bags have NO leading slash (‘imu/data’, not ‘/imu/data’), and there is no /tf or /tf_static at all, so every sensor pose must be fixed. See mola_mapper’s lidar_odometry_mapper_from_conslam.yaml for the validated reference configuration this mirrors.
Which frame is base_link is a deliberate choice, not a constant, hence CONSLAM_BASE_FRAME below: the IMU is the dataset’s own reference frame and the natural default, but anything scoring against a ground truth sampled at LiDAR scan times and expressed in the LiDAR frame has to report in that frame instead, or the comparison silently measures the mounting offset. The two frames differ by a pure 180 deg yaw (both share the “up” axis, per the paper’s Sec. 3.3 / Fig. 1(a) axis conventions). The translation between the two mounting points ships only in the dataset’s separate data_calib.zip, so it is left at zero: a few centimetres on a hand-held frame, not a real calibration.
Running it
Online replay with the 3D GUI:
mola-lo-gui-conslam /path/to/sequenceN.bag [additional flags]
Offline batch run, writing a trajectory file:
mola-lo-cli-conslam /path/to/sequenceN.bag [additional flags]
What this profile sets, and why
These are defaults, not overrides: exporting any of these variables before running the wrapper takes precedence.
MOLA_IMU_TOPIC
Default: imu/data
MOLA_LIDAR_TOPIC
Default: pp_points/synced2rgb
MOLA_USE_FIXED_IMU_POSE
Default: 1
MOLA_USE_FIXED_LIDAR_POSE
Default: 1
MOLA_CAMERA_TOPIC
Default: pp_rgb/synced2points
MOLA_USE_FIXED_CAMERA_POSE
Default: 1
CONSLAM_BASE_FRAME
Default: imu
MOLA_TF_BASE_LINK
Default: imu
LIDAR_POSE_YAW
Default: 180
IMU_POSE_YAW
Default: 0
MOLA_TF_BASE_LINK
Default: lidar
LIDAR_POSE_YAW
Default: 0
IMU_POSE_YAW
Default: 180
LIDAR_POSE_X
Default: 0}" ; : "${LIDAR_POSE_Y:=0}" ; : "${LIDAR_POSE_Z:=0
LIDAR_POSE_PITCH
Default: 0}" ; : "${LIDAR_POSE_ROLL:=0
IMU_POSE_X
Default: 0}" ; : "${IMU_POSE_Y:=0}" ; : "${IMU_POSE_Z:=0
IMU_POSE_PITCH
Default: 0}" ; : "${IMU_POSE_ROLL:=0
MOLA_LO_INITIAL_LOCALIZATION_METHOD
Default: InitLocalization::PitchAndRollFromIMU
Hand-held scanner (not a vehicle): larger/faster rotations than a car, so lean on the IMU for deskewing and for the initial pitch/roll estimate:
MOLA_DESKEW_METHOD
Default: MotionCompensationMethod::IMU
Hand-held scanner (not a vehicle): larger/faster rotations than a car, so lean on the IMU for deskewing and for the initial pitch/roll estimate:
MOLA_LINK_FIRST_POSE_SIGMA
Default: 1e-6
No GNSS in this dataset: pin the first pose to the map origin, or the smoother’s GTSAM graph is left with a rank-deficient null-space (IndeterminantLinearSystemException):
Under the hood
Online launch file |
|
Offline CLI input |
|
Profile source |