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

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:

Under the hood

Online launch file

lidar_odometry_from_rosbag1.yaml

Offline CLI input

--input-rosbag1 <MOLA_LO_BAGS_JOINED>

Profile source

scripts/lib/profiles/conslam.sh