Tutorial: Generate an Occupancy Map for Navigation

This tutorial walks you through the creation of a 2D occupancy map of your environment. This map can the be used for autonomous navigation.

Instructions

  1. SSH into the robot (instructions).

  2. Make sure you have successfully connected the PS5 joystick to the robot (instructions).

  3. Build and install the required packages:

  1. Pull the Docker image:

docker pull nvcr.io/nvidia/isaac/nova_carter_bringup:release_3.1-aarch64
  1. Run the Docker image:

docker run --privileged --network host \
    -v /dev/*:/dev/* \
    -v /tmp/argus_socket:/tmp/argus_socket \
    -v /etc/nova:/etc/nova \
    nvcr.io/nvidia/isaac/nova_carter_bringup:release_3.1-aarch64 \
    ros2 launch nova_carter_bringup lidar_mapping.launch.py
  1. Make sure you complete Visualization Setup. Open Foxglove Studio on your remote machine, open the nova_carter_navigation.json layout file downloaded in the previous step.

    Verify that you see a visualization of the part of the map that is in close proximity to the robot.

foxglove_mapping
  1. To map your entire environment move the robot around using the joystick. Verify that you can see the map visualization in Foxglove expand in real-time as you are moving the robot around.

  2. To store the map open a new terminal, SSH into the robot, and attach to the Docker container that’s running the Lidar mapping application. This depends on what approach you chose above to build and install the app.

Get the name of the Docker container by running:

docker ps

Then attach to the Docker container with the following command. Make sure to replace <name-of-docker-container> with the name found above.

docker exec -it <name-of-docker-container> /bin/bash
  1. Run the following command to save the map .png and .yaml file:

    This .yaml file can be used as the input map in the navigation tutorial.

source /opt/ros/humble/setup.bash
cd /workspaces/isaac_ros-dev
ros2 run nav2_map_server map_saver_cli --fmt png -f <path/to/my/map>

Note

Replace <path/to/my/map> with the path where the map will be stored. To keep the map when the Docker container is stopped, it is recommended to use a path that is mounted to the Docker container, for example /tmp/my_map.png. If you are running this example with the pre-built Docker image, then no suitable path is mounted. In this case store the map to /tmp/my_map.png and then copy it out of the container with docker cp <name-of-docker-container>:/tmp/my_map.png ..