ROS 2 Navigation with Block World Generator#

Warning

ROS 2 Foxy is no longer tested or supported. This may result in potential issues when ROS 2 Foxy is used in conjunction with Isaac Sim 4.2 or later. ROS 2 Foxy Isaac Sim tutorial packages will be removed in a future release.

Learning Objectives#

In this example, we will learn how to

  • Generate a 3D world using a 2D occupancy map

  • Perform navigation with a robot in the generated 3D world with Nav2

Prerequisite

  • Completed ROS2 Navigation for ROS 2 Nav2 with a single robot. So that

    • ROS 2 and Nav2 are installed, and ROS2 bridge is enabled.

    • Appropriate ros2_ws is sourced (foxy_ws or humble_ws) so that carter_navigation and isaac_ros_navigation_goal are inside your workspace.

Note

In Windows 10 or 11, depending on your machine’s configuration, RViz2 may not open properly.

Setting up Environment and Robot#

Generate 3D World#

First, let us load generate the 3D world using the Block World Generator within Isaac Sim

  • Go to the top menu bar and click Isaac Utils -> Block World Generator Map

  • Press Load Image button and open the image of the occupancy map located under carter_navigation/maps/carter_warehouse_navigation.png. A window titled Visualization will appear.

  • Press the Generate Block World button to create geometry corresponding to the input occupancy map in the Stage.

The generated 3D world automatically has a collision mesh applied for all the occupied pixels.

Add Robot in Scene#

Next, we will add a Carter robot which has all ROS 2 OmniGraph Nodes setup into this scene.

  • At the bottom of the Isaac Sim window, navigate to the Content tab.

  • Go to localhost followed by NVIDIA/Assets/Isaac/4.2/Isaac/Samples/ROS2/Robots folder.

  • Drag and drop the Nova_Carter_ROS.usd asset into the scene generated in the previous step (anywhere in the space bounded by the walls and on the ground)

Running Navigation#

We now have the 3D scene and robot set up to run the Nav2 stack

  • Click on Play in Isaac Sim to begin simulation.

  • Open a new terminal and source the <ros2_ws> which contains the carter_navigation package. Run the ROS 2 launch file to begin Nav2

    ros2 launch carter_navigation carter_navigation.launch.py
    

    RViz2 will open and begin loading the occupancy map. If a map does not appear, repeat the previous step.

  • Use the 2D Pose Estimate button to re-set the position of the robot. (Make sure you do this before setting a goal and the pose estimate is approximately correct).

  • Click on the Navigation2 Goal button and then click and drag at the desired location point in the map. Nav2 will now generate a trajectory and the robot will start moving towards its destination!

Summary#

In this tutorial, we covered

  1. Generating 3D world using 2D occupancy map with Block World Generator

  2. Adding a robot into this world and running Nav2 with it

Next Steps#

Continue on to the next tutorial in our ROS2 Tutorials series, ROS 2 Custom C++ OmniGraph Node.