TIERS

TIERS multi-modal LiDAR dataset (https://github.com/TIERS/tiers-lidars-dataset): a trolley-mounted rig carrying FIVE lidars recording simultaneously into one ROS 1 bag, which is the whole point of the dataset – it exists to compare them.

There is therefore no single “the” lidar here, and picking one silently would be presenting one sensor’s result as the dataset’s. TIERS_SENSOR selects which one, and each choice has its own mola-lo-{gui,cli}-tiers-* wrapper so the sensor under test is visible in the command that ran it:

ouster-os0     /os_cloud_node/points   OS0-128, 128 beams, 90 deg FOV
ouster-os1     /os_cloud_nodee/points  OS1-64, 64 beams, 45 deg FOV
                                       (the doubled "e" is upstream's
                                       own topic name, not a typo here)
velodyne       /velodyne_points        VLP-16, no IMU of its own
livox-horizon  /livox/lidar            Livox Horizon, non-repetitive
livox-avia     /avia/livox/lidar       Livox AVIA, non-repetitive

EXTRINSICS ARE NOT KNOWN HERE. These bags carry no /tf or /tf_static at all, and the dataset publishes no calibration file alongside them, so each lidar is treated as CO-LOCATED with its IMU (identity offset). That is a placeholder, not a calibration: it is centimetre-scale on this rig, invisible in APE after alignment, and real in RPE. Get the true extrinsics before treating any relative metric from this dataset as a reference number.

Ground truth is a VRPN mocap topic embedded in the same bag, reporting a marker cluster on the trolley ~0.73 m from the lidars – correct for that separately when scoring, it does not belong to the launch configuration.

Running it

Online replay with the 3D GUI:

mola-lo-gui-tiers-livox-avia /path/to/<sequence>.bag [additional flags]
mola-lo-gui-tiers-livox-horizon /path/to/<sequence>.bag [additional flags]
mola-lo-gui-tiers-ouster-os0 /path/to/<sequence>.bag [additional flags]
mola-lo-gui-tiers-ouster-os1 /path/to/<sequence>.bag [additional flags]
mola-lo-gui-tiers-velodyne /path/to/<sequence>.bag [additional flags]

Offline batch run, writing a trajectory file:

mola-lo-cli-tiers-livox-avia /path/to/<sequence>.bag [additional flags]
mola-lo-cli-tiers-livox-horizon /path/to/<sequence>.bag [additional flags]
mola-lo-cli-tiers-ouster-os0 /path/to/<sequence>.bag [additional flags]
mola-lo-cli-tiers-ouster-os1 /path/to/<sequence>.bag [additional flags]
mola-lo-cli-tiers-velodyne /path/to/<sequence>.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.

TIERS_SENSOR

Default: ouster-os0

MOLA_LIDAR_TOPIC

Default: /os_cloud_node/points

MOLA_IMU_TOPIC

Default: /os_cloud_node/imu

MOLA_LIDAR_TOPIC

Default: /os_cloud_nodee/points

MOLA_IMU_TOPIC

Default: /os_cloud_nodee/imu

MOLA_LIDAR_TOPIC

Default: /velodyne_points

MOLA_IMU_TOPIC

Default: /os_cloud_node/imu

The VLP-16 has no IMU of its own on this rig; borrow the OS0’s, which is the only choice that does not also change the lidar under test.

MOLA_LIDAR_TOPIC

Default: /livox/lidar

MOLA_IMU_TOPIC

Default: /livox/imu

MOLA_LIDAR_TOPIC

Default: /avia/livox/lidar

MOLA_IMU_TOPIC

Default: /avia/livox/imu

MOLA_MIN_NEARBY_POSES_OCCUPIED

Default: 2

MOLA_SIMPLEMAP_MIN_NEARBY_POSES

Default: 2

LIDAR_POSE_X

Default: 0}" ; : "${LIDAR_POSE_Y:=0}" ; : "${LIDAR_POSE_Z:=0

Co-located placeholder, see this file’s header.

LIDAR_POSE_YAW

Default: 0}" ; : "${LIDAR_POSE_PITCH:=0}" ; : "${LIDAR_POSE_ROLL:=0

Co-located placeholder, see this file’s header.

MOLA_USE_FIXED_LIDAR_POSE

Default: true

Co-located placeholder, see this file’s header.

IMU_POSE_X

Default: 0}" ; : "${IMU_POSE_Y:=0}" ; : "${IMU_POSE_Z:=0

Co-located placeholder, see this file’s header.

IMU_POSE_YAW

Default: 0}" ; : "${IMU_POSE_PITCH:=0}" ; : "${IMU_POSE_ROLL:=0

Co-located placeholder, see this file’s header.

MOLA_USE_FIXED_IMU_POSE

Default: true

Co-located placeholder, see this file’s header.

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/tiers.sh