Tutorial: Generate an Occupancy Map for Navigation

This tutorial will enable you to create 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/install the required packages:

  1. Pull the docker image:

docker pull nvcr.io/nvidia/isaac/nova_carter_bringup:release_3.0-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.0-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.

    You should already 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. You should be able to 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/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. Next run the below 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

Please make sure to replace <path/to/my/map> with the path where the map should 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 you can use docker cp <name-of-docker-container>:<path/to/my/map> . to copy the map out of the container.