7.2.3. ROS2 Cameras

7.2.3.1. Learning Objectives

In this example, we will learn how to

  • Add additional cameras to the scene and onto the robot

  • Add camera publishers

  • Send ground truth synthetic perception data through rostopics

7.2.3.2. Getting Started

Important

Make sure to source your ROS 2 installation from the terminal before running Isaac Sim. If sourcing ROS 2 is a part of your bashrc then Isaac Sim can be run directly.

Prerequisite

7.2.3.3. Camera Publisher

7.2.3.3.1. Setting Up Cameras

The default camera displayed in the Viewport is the Perspective camera. You can verify that by the Camera button on the top left hand corner inside the Viewport display. Click on the Camera button and you will see there are a few other preset camera positions: Top, Front, and Right side views.

For the purpose of this tutorial, let’s add two stationary cameras, naming them Camera_1 and Camera_2, viewing the room from two different perspectives. The procedures for adding cameras to the stage can be found in Add Camera and Sensors.

You may want to open additional Viewports to see multiple camera views at the same time. To open additional Viewports: Window -> Viewport -> Viewport 2 to open the viewport, and select the desired camera view from the Cameras button on the upper left corner in the viewport.

../_images/isaac_tutorial_ros_camera_add_viewport.gif

7.2.3.3.2. Building the Graph for a RGB publisher

  1. Open Visual Scripting: Window > Visual Scripting > Action Graph.

  2. Click on the New Action Graph Icon in middle of the Action Graph Window, or Edit Action Graph if you want to append the camera publisher to an existing action graph.

  3. Build an Action Graph with the nodes and connection of the following image, and parameters using the table below.

../_images/isaac_tutorial_ros2_camera_graph.png

Parameters:

Node

Input Field

Value

Isaac Create Render Product

cameraPrim

/World/Camera_1

enabled

True

ROS2 Camera Helper

type

rgb

topicName

rgb

frameId

turtle

Ticking this graph will automatically create a new render product assigned to Camera_1.

7.2.3.3.3. Graph Explained

  • Isaac Create Render Product: Creating a render product prim which acquires the rendered data from the given camera prim and outputs the path to the render product prim. Rendering can be enabled/disabled on command by checking/unchecking the enabled field.

  • ROS2 Camera Helper: Indicating which type of data to publish, and which rostopic to publish it on.

Camera Helper Node

The Camera Helper Node is abstracting a complex postprocessing network from the users. Once you press Play with a Camera Helper Node connected, you may see that in the list of Action Graphs when you click on the icon on the upper left corner of the Action Graph window, a new one appears: /Render/PostProcessing/SDGPipeline. This graph is automatically created by the Camera Helper Node. The pipeline retrieves relevant data from the renderer, process it, and send them to the corresponding ROS publisher. This graph is only created in the session you are running. It will not be saved as part of your asset and will not appear in the Stage tree.

7.2.3.4. Depth and other Perception Ground Truth data

In addition to RGB image, the following synthetic sensor and perceptual information also are available for any camera.

  • Camera Info

  • Depth

  • Point Cloud

  • BoundingBox 2D Tight

  • BoundingBox 2D Loose

  • BoundingBox 3D

  • Semantic labels

  • Instance Labels

Each Camera Helper node can only retrieve one type of data. You can indicate which type you wish to assign to the node in the dropdown menu for the field type in the Camera Helper Node’s Property tab.

Note

Once you specify a type for a Camera Helper node and activated it (i.e. started simulation and the underlying SDGPipeline has been generated), you cannot change the type and reuse the node. You can either use a new node, or reload your stage and regenerate the SDGPipeline with the modified type.

An example of publishing multiple Rostopics for multiple cameras can be found in our asset Isaac/Samples/ROS2/Scenario/turtlebot_tutorial.usd.

7.2.3.4.1. Verifying ROS connection

Use ros2 topic echo /<topic> to see the raw information that is being passed along.

We can visualize depth using the rqt_image_view method again: ros2 run rqt_image_view rqt_image_view /depth.

We will check the images published this time in RViz2. In a ROS2-sourced terminal, type in the command rviz2 to open RViz. Add a Image display type and set the topic to rgb.

../_images/isaac_tutorial_ros2_rviz_camera.png

7.2.3.5. Troubleshooting

If your depth image only shows black and white sections, it is likely due to somewhere in the field of view has “infinite” depth and skewed the contrast. Adjust your field of view so that the depth range in the image is limited.

7.2.3.6. Additional Publishing Options

To publish images on demand or periodically at a specified rate, you will need to use Python scripting. Go to ROS2 Camera for examples.

7.2.3.7. Summary

This tutorial introduces how to publish camera and perception data in ROS2.

7.2.3.7.1. Next Steps

  • Continue on to the next tutorial in our ROS2 Tutorials series, ROS2 Clock to learn to setup ROS2 Clock publishers and subscribers with Omniverse Isaac Sim.

  • Checkout Publishing Camera’s Data to learn how to publish camera’s data through Python scripting.

7.2.3.7.2. Further Learning

  • Additional information about synthetic data generation can be found in the Replicator Tutorial Series.

  • Examples of running similar environment using Standalone Python workflow is outlined here.