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/nvstaging/isaac/nova_carter_bringup:release_3.2-aarch64
  1. Run the Docker image:

docker run --privileged --network host \
    -v /tmp/argus_socket:/tmp/argus_socket \
    -v /etc/nova:/etc/nova \
    -v /mnt/nova_ssd/recordings:/mnt/nova_ssd/recordings \
    -v /opt/nvidia/nova:/opt/nvidia/nova \
    -v /dev/ptp_nova:/dev/ptp_nova \
    -v /dev/input:/dev/input \
    nvcr.io/nvstaging/isaac/nova_carter_bringup:release_3.2-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. 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

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.