isaac_ros_nova
Source code on GitHub.
Overview
The isaac_ros_nova
package is a meta-package that provides an easy way to bringup Nova sensors. It provides a launch file to start all ROS nodes related to a specified Nova YAML config file, and adds configurable monitoring and visualization.
The Nova system monitor utilizes NITROS Diagnostics and ROS diagnostics to aggregate and publish information on sensor performance and produce warnings/errors if the system is unstable.
Quickstart
Set Up Nova
Verify if Nova Orin software is the latest version by comparing the installed package with the candidate:
$ apt policy nova-orin-init nova-orin-init: Installed: 1.3.2+b3 Candidate: 1.3.2+b3 Version table: *** 1.3.2+b3 600 600 https://isaac.download.nvidia.com/nova-init jammy/main arm64 Packages
If the installed version is lower than the candidate, follow the nova init upgrade process here. Otherwise proceed to the next step.
Verify that sensors are functioning by running:
nova_preflight_checker
It is expected for all tests to pass. Refer to the Nova PFC documentation for more details.
Set Up Development Environment
Set up your development environment by following the instructions in getting started.
Clone
isaac_ros_common
under${ISAAC_ROS_WS}/src
.cd ${ISAAC_ROS_WS}/src && \ git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git isaac_ros_common
(Optional) Install dependencies for any sensors you want to use by following the sensor-specific guides.
Note
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.
Create a file called
.isaac_ros_dev-dockerargs
with the following:cd ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts echo -e "-v /etc/nova/:/etc/nova/" > .isaac_ros_dev-dockerargs
Build isaac_ros_nova
Launch the Docker container using the
run_dev.sh
script:cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \ ./scripts/run_dev.sh
Install the prebuilt Debian package:
sudo apt-get update
sudo apt-get install -y ros-humble-isaac-ros-nova
Clone this repository under
${ISAAC_ROS_WS}/src
:cd ${ISAAC_ROS_WS}/src && \ git clone -b release-3.2 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nova.git isaac_ros_nova
Launch the Docker container using the
run_dev.sh
script:cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \ ./scripts/run_dev.sh
Use
rosdep
to install the package’s dependencies:sudo apt-get update
rosdep update && rosdep install --from-paths ${ISAAC_ROS_WS}/src/isaac_ros_nova/isaac_ros_nova --ignore-src -y
Build the package from source:
cd ${ISAAC_ROS_WS} && \ colcon build --symlink-install --packages-up-to isaac_ros_nova --base-paths ${ISAAC_ROS_WS}/src/isaac_ros_nova/isaac_ros_nova
Source the ROS workspace:
Note
Make sure to repeat this step in every terminal created inside the Docker container.
Because this package was built from source, the enclosing workspace must be sourced for ROS to be able to find the package’s contents.
source install/setup.bash
Run Launch File
Continuing inside the Docker container, run the following launch file to spin up a demo of this package:
Note
The config file in this example works for any Nova sensor set with a minimum of 3 Hawks and 3 Owls, this includes Nova Developer Kit and Nova Carter. If you are using a different sensor set (for example, a single hawk camera), you can use one of the samples from the
config/
directory. Alternatively you can supply your own custom config YAML. Finally, if the argument is not specified it will load all the drivers for your Nova sensor set, depending on your network this may cause performance issues.cd ${ISAAC_ROS_WS} && \ ros2 launch isaac_ros_nova nova.launch.py visualize:=True config:=hawk-3_owl-3
Warning
Depending on the network and the CPU load on the system some topics may not visualize or appear laggy. You can reduce the sensor selection being launched by changing the config:=<Config path>
to a different one from config/
, or create your own. For custom YAMLs all sensors in the config file must match a sensor name found in /etc/nova/systeminfo.yaml
.
Warning
When visualizing it is recommended to subscribe to the resize/image_raw
topics. Subscribing to full sized image topics may cause performance issues.
Visualize Results
Complete the foxglove setup guide.
In Foxglove Studio open the
hawk-3_owl-3.json
layout file, which can be found in the isaac_ros_nova repository.Validate that you can see a visualization similar to the following:
Track System Monitors
The example above already includes diagnostics for system monitoring, however there are many different options for viewing and tracking this information. Here we set up a layout to explore some of these options. Isaac ROS Nova Recorder has its own visualization for diagnostics.
Complete the foxglove setup guide and run the
nova.launch.py
file as above.isaac_ros_nova repository provides a
diagnostics_panels.json
config layout. You can customize this or create your layout with the Diagnostics Detail, Diagnostics Summary, and State Transition panels. For the state transition panel you then need to add topics to be monitored, or add them by clicking on them in the Diagnostic Detail panel.You can now easily track the messages being output on
/diagnostics
and/diagnostics_agg
. It should look something as below, hopefully with less dropped frames ;) :
API
Usage
ros2 launch isaac_ros_nova nova.launch.py <launch_argument>:=<value>
Launch Argument |
Description |
Default |
---|---|---|
target_container |
Target Container |
|
config |
Sensor Configuration File |
|
diagnostics |
Turn on diagnostics |
|
visualize |
Starts foxglove and other nodes for visualization. |
|
visual_image |
Image size for all cameras when visualizing. Note, larger images can slow performance. |
|
MonitorNode
ROS Topics Subscribed
ROS Topic |
Interface |
Description |
---|---|---|
|
Diagnostics published by different nodes. |
ROS Topics Published
ROS Topic |
Interface |
Description |
---|---|---|
|
Diagnostics aggregated into groups by topic name and origin of diagnostics. Groups are /sensors/hawk, /sensors/owl, /sensors/bmi, and everything else is put into /misc. |