isaac_ros_data_recorder

Source code on GitHub.

Overview

The isaac_ros_data_recorder package enables recording data from the Nova sensor set. Data is recorded as an MCAP file with messages serialized in CDR format. Camera streams are encoded in H.264 to reduce storage footprint. For more information on recording data in ROS 2, refer to the documentation for rosbag2.

Quickstart

Set Up Development Environment

  1. Set up your development environment by following the instructions in getting started.

  2. Clone isaac_ros_common under ${ISAAC_ROS_WS}/src.

    cd ${ISAAC_ROS_WS}/src && \
       git clone -b release-3.1 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git isaac_ros_common
    
  3. (Optional) Install dependencies for any sensors you want to use by following the sensor-specific guides.

    Warning

    We strongly recommend installing all sensor dependencies before starting any quickstarts. Some sensor dependencies require restarting the Isaac ROS Dev container during installation, which will interrupt the quickstart process.

  1. Create additional mounts for the Docker container.

    If the container is already running, stop it with:

    docker rm -f isaac_ros_dev-aarch64-container
    

    Create mounts for /etc/nova and /mnt/nova_ssd/recordings:

    echo $'-v /etc/nova:/etc/nova\n-v /mnt/nova_ssd/recordings:/mnt/nova_ssd/recordings' > ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts/.isaac_ros_dev-dockerargs
    

Build isaac_ros_data_recorder

  1. Launch the Docker container using the run_dev.sh script:

    cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
    ./scripts/run_dev.sh
    
  2. Install the prebuilt Debian package:

    sudo apt-get install -y ros-humble-isaac-ros-data-recorder
    

Run Launch File

  1. Continuing inside the Docker container, start data recording:

ros2 run isaac_ros_data_recorder record_data.sh

Use Ctrl+C to stop recording. By default, recordings will be stored in /mnt/nova_ssd/recordings.

  1. (Optional) Run teleop.

    Follow Tutorial: Teleoperate the Robot with a Joystick to setup teleop. Then, launch the teleop app:

    ros2 launch nova_carter_bringup teleop_include.launch.py
    

Try More Examples

A sensor configuration file can be used to record a subset of sensors on the robot. For example, to record only the 4 stereo cameras:

ros2 run isaac_ros_data_recorder record_data.sh -y hawk-4.yaml

The following sensor configurations are provided. Custom sensor configurations are also supported.

Configuration File

Description

hawk-1.yaml

Front stereo camera with IMU.

hawk-2.yaml

Front and back stereo cameras with IMU.

hawk-3.yaml

Front, left, and right stereo cameras with IMU.

hawk-4.yaml

Front, left, right and back stereo cameras with IMU.

owl-1.yaml

Front fisheye camera.

owl-2.yaml

Front and back fisheye cameras.

owl-3.yaml

Front, left, and right fisheye cameras.

owl-4.yaml

Front, left, right, and back fisheye cameras.

hawk-1_owl-1.yaml

Front stereo and fisheye cameras.

hawk-1_owl-2.yaml

Front stereo camera and left and right fisheye cameras.

hawk-2_owl-2.yaml

Front and back stereo and fisheye cameras.

hawk-2_owl-4.yaml

Front and back stereo cameras and front, left, right, and back fisheye cameras.

hawk-4_owl-4.yaml

Front, left, right and back stereo and fisheye cameras.

nova-orin.yaml

Sensor configuration for Nova Orin.

nova-orin_hawk-4.yaml

Sensor configuration for Nova Orin without fisheye cameras or 2D lidar.

nova-carter.yaml

Sensor configuration for Nova Carter.

nova-carter_hawk-4.yaml

Sensor configuration for Nova Carter without fisheye cameras or 2D lidar.

nova-developer-kit.yaml

Sensor configuration for Nova Orin Developer Kit.

Troubleshooting

Isaac ROS Troubleshooting

For solutions to problems with Isaac ROS, see troubleshooting.

API

Usage

ros2 launch isaac_ros_data_recorder data_recorder.launch.py

ROS Launch Arguments

ROS Launch Argument

Default Value

Description

recording_dir

/mnt/nova_ssd/recordings

The directory in which to put the recording.

rosbag_name

rosbag2

The name of the folder which the rosbag is stored in.

config

/etc/nova/systeminfo.yaml

Sensor configuration file.

ROS Topics Subscribed

ROS Topic

Interface

Description

/rosout

rcl_interfaces/msg/Log

Console logs.

/tf

tf2_msgs/msg/TFMessage

Movable transforms on the robot.

/tf_static

tf2_msgs/msg/TFMessage

Fixed transforms on the robot.

/front_stereo_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Front stereo camera left camera stream.

/front_stereo_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Front stereo camera left camera intrinsics.

/front_stereo_camera/right/image_compressed

sensor_msgs/msg/CompressedImage

Front stereo camera right camera stream.

/front_stereo_camera/right/camera_info

sensor_msgs/msg/CameraInfo

Front stereo camera right camera intrinsics.

/back_stereo_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Back stereo camera left camera stream.

/back_stereo_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Back stereo camera left camera intrinsics.

/back_stereo_camera/right/image_compressed

sensor_msgs/msg/CompressedImage

Back stereo camera right camera stream.

/back_stereo_camera/right/camera_info

sensor_msgs/msg/CameraInfo

Back stereo camera right camera intrinsics.

/left_stereo_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Left stereo camera left camera stream.

/left_stereo_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Left stereo camera left camera intrinsics.

/left_stereo_camera/right/image_compressed

sensor_msgs/msg/CompressedImage

Left stereo camera right camera stream.

/left_stereo_camera/right/camera_info

sensor_msgs/msg/CameraInfo

Left stereo camera right camera intrinsics.

/right_stereo_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Right stereo camera left camera stream.

/right_stereo_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Right stereo camera left camera intrinsics.

/right_stereo_camera/right/image_compressed

sensor_msgs/msg/CompressedImage

Right stereo camera right camera stream.

/right_stereo_camera/right/camera_info

sensor_msgs/msg/CameraInfo

Right stereo camera right camera intrinsics.

/front_fisheye_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Front fisheye camera stream.

/front_fisheye_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Front fisheye camera intrinsics.

/back_fisheye_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Back fisheye camera stream.

/back_fisheye_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Back fisheye camera intrinsics.

/left_fisheye_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Left fisheye camera stream.

/left_fisheye_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Left fisheye camera intrinsics.

/right_fisheye_camera/left/image_compressed

sensor_msgs/msg/CompressedImage

Right fisheye camera stream.

/right_fisheye_camera/left/camera_info

sensor_msgs/msg/CameraInfo

Right fisheye camera intrinsics.

/front_2d_lidar/scan

sensor_msgs/msg/LaserScan

Front 2D lidar scan.

/back_2d_lidar/scan

sensor_msgs/msg/LaserScan

Back 2D lidar scan.

/front_3d_lidar/lidar_packets

hesai_ros_driver/msg/UdpFrame

Front 3D lidar UDP packets.

/front_stereo_imu/imu

sensor_msgs/msg/Imu

Front stereo camera inertial measurement unit.

/chassis/imu

sensor_msgs/msg/Imu

Chassis inertial measurement unit.

/chassis/ticks

isaac_ros_nova_interfaces/msg/EncoderTicks

Chassis encoder count.

/chassis/odom

nav_msgs/msg/Odometry

Chassis odometry.

/chassis/battery_state

sensor_msgs/msg/BatteryState

Chassis battery state.