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
MOLA_TF_BASE_LINK
Default: base_link
Co-located placeholder, see this file’s header.
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 |
|
Offline CLI input |
|
Profile source |