ntu-viral

NTU-VIRAL (https://ntu-aris.github.io/ntu_viral_dataset/): a drone with two Ouster OS1-16 (one horizontal, one vertical), a VectorNav VN100 IMU, cameras and UWB, one ROS 1 bag per sequence (eee_01..spms_03).

There is no /tf in the bags, so every sensor pose is fixed here, from the
dataset's own calibration (lidar_horz.yaml, lidar_vert.yaml, imu_v100.yaml).
Their "Body" frame is the IMU's, and it points down (z-down), so base_link
here is that body frame turned upside down, a 180 deg pitch:
  horizontal LiDAR  T_Body_Lidar = [I | (-0.050, 0, 0.055)]
                    => in base_link: 0.050 0 -0.055, pitch 180
  IMU               T_Body_Imu = I  => in base_link: 0 0 0, pitch 180

Only the horizontal LiDAR is used. The vertical one would sit at 0.550 0.030 -0.050, roll -90 in base_link, but the offline CLI gives every LiDAR the same fixed pose.

The ground truth is the position of a Leica prism, not a pose: to score against it, move the estimate to the prism, which is at (0.293656, -0.012288, 0.273095) in this base_link (T_Body_Prism in leica_prism.yaml, turned the same way).

Running it

Online replay with the 3D GUI:

mola-lo-gui-ntu-viral /path/to/eee_01.bag [additional flags]

Offline batch run, writing a trajectory file:

mola-lo-cli-ntu-viral /path/to/eee_01.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_LIDAR_TOPIC

Default: /os1_cloud_node1/points

MOLA_IMU_TOPIC

Default: /imu/imu

The IMU helps a little (eee_03 / sbs_01 prism ATE: 119 / 90 mm without it, 112 / 84 mm with it); IMU deskew on top did not improve further.

MOLA_CAMERA_TOPIC

Default: /left/image_raw

MOLA_USE_FIXED_CAMERA_POSE

Default: 1

MOLA_USE_FIXED_IMU_POSE

Default: 1

MOLA_USE_FIXED_LIDAR_POSE

Default: 1

LIDAR_POSE_X

Default: 0.050

LIDAR_POSE_Y

Default: 0.000

LIDAR_POSE_Z

Default: -0.055

LIDAR_POSE_YAW

Default: 0

LIDAR_POSE_PITCH

Default: 180

LIDAR_POSE_ROLL

Default: 0

IMU_POSE_X

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

IMU_POSE_YAW

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

MOLA_MINIMUM_RANGE_FILTER_L_INFINITY

Default: false

A small drone close to walls: a spherical minimum-range filter, as in the hand-held profiles.

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/ntu-viral.sh