This section will guide you through the process of running the Isaac AMR Cloud Services with Isaac AMR cloud Services, which is an intelligent platform that organizes a fleet of autonomous mobile robots to function robustly and safely in large, dynamic, unstructured environments among humans.
To run the navigation app with Isaac AMR Cloud Services, you will need the following:
A cuOpt client ID and secret to access cuOpt Connect. For more information, refer to instructions on the Isaac AMR Software Page.
An occupancy map and an optional semantic map. One of the following is required:
DeepMap API client credentials if using DeepMap.
For more information, refer to instructions on the Isaac AMR Software Page. If you will be creating a semantic map on your own, refer to Map Annotation Tool.
A URI to a map that is identical to the on-robot map.
The URI can point to a map asset on the Internet or on your machine. To obtain a URI of a map asset in your home directory, first run the following in a terminal under your home directory:
python3 -m http.server 9000
This will serve the contents of your local directory. Navigate to
http://localhost:9000
on your browser, locate the file, and right click on the hyperlink to copy the link address. The command should be kept running so that Isaac AMR Cloud Services can access your map.
Access to NVIDIA NGC to download containers. Please refer to the documentation on NGC and API keys for more information.
A server/workstation to run the Isaac AMR Cloud Services software that has Docker installed.
Some services run unencrypted and unauthenticated. Depending on your organization’s security policies, you may need to network isolate the Isaac AMR Cloud Services software.
Download the tutorial assets from NGC.
This can be done via web browser on https://ngc.nvidia.com by searching “Isaac Cloud Tutorial” in the “Resources” section of the NGC private registry. You can also use the NGC CLI:
ngc registry resource download-version <your_staging_area>/isaac_cloud_tutorial_1:4
Unzip the folder and
cd
intotutorials
.NoteReplace
<your_staging_area>
with your assigned NGC Registry staging area code.Verify the robot name.
In
defaults.yaml
, update the name of the robot in therobots
section.robots: - name: "your_robot_name" labels: ["test", "carter", "gxf"] heartbeat_timeout: 30
Set the cuOpt and DeepMap credentials using one of the following methods.
Option 1:(Recommended) Pass credentials through environment variables
In the
cloud_creds.sh
file, set theCUOPT_CLIENT_SECRET
,CUOPT_CLIENT_ID
, andDEEPMAP_VEHICLE_TOKEN
to your tokens and execute:source cloud_creds.sh
Option 2: Place all your credentials in configuration files.
In the
defaults.yaml
file, find theservices
section and replaceCUOPT_CLIENT_ID
andCUOPT_CLIENT_SECRET
with your cuOpt Connect credentials.In the
/etc/vehicle_info.pb.txt
file, set thevehicle_token
to your DeepMap secret token, which will be sent by the NVIDIA Isaac DeepMap team after the mapping process is completed.Comment out the environment section for both the
wpg
andmission-control
services in thebringup_isaac_cloud.yaml
file.
Set the source of the map.
In
defaults.yaml
, update themap
section according to the source of the map:If a URI will be used to locate the map, set
map_uri
to the URI and update themetadata
section according to your map. Ensure the map is the same map that the navigation app will be loading.map: # A map URI uniquely identifies the location of the map on the internet. map_uri: https://your.server.com/your/map/image.png metadata: # Unique ID of the map map_id: "your_map_id" # Resolution is pixels per meter and should match the occupancy map you use resolution: 0.05 # required for occupancy map # The occupancy threshold used to identify if a cell is occupied or not. # If the pixel value is less than this threshold, it is occupied; otherwise, it is free occupancy_threshold: 129 # range between [0 to 255] # Translation in the form "x,y,z" translation: "0,0,0" # Rotation in quaternion, in the form "x,y,z,w" rotation: "0,0,0,1"
If the map will be served by DeepMap, update the
map
section as follows:map: map_server: NVIDIA_DEEPMAP: # Map cache directory map_dir: "/tmp/config/data" # Map server config directory config_dir: "/tmp/config/etc" # Unique identifier of the map tile tile_identifier: # Unique ID of the map map_id: "your-map-id" # Available types: TILE_TYPE_UNKNOWN, TILE_TYPE_OCCUPANCY_2D, TILE_TYPE_SEMANTIC tile_type: TILE_TYPE_OCCUPANCY_2D # ID of the tile in the form "x,y,z" tile_id: "0,0,0" # Map server query interval query_interval: 100 # seconds
If DeepMap is used, in
/etc/vehicle_info.pb.txt
, update thecustomer_id
andvehicle_id
with the data that will be sent by NVIDIA Isaac DeepMap team after the mapping process is completed.Pull the latest containers from NGC and then run the Docker compose file.
docker login nvcr.io docker compose -f bringup_isaac_cloud.yaml pull docker compose -f bringup_isaac_cloud.yaml up
You have now launched the Isaac AMR Cloud Services. For additional usage, please refer to Mission Control API.
NoteIf you have other services running locally and need to adjust ports, you can edit
.env
to customize your execution.To bring down the Isaac AMR Cloud Services, you can press Ctrl+C in the terminal where you ran
docker compose -f bringup_isaac_cloud.yaml up
or rundocker compose -f bringup_isaac_cloud.yaml down
in a separate terminal from thetutorials
directory.
The navigation app will need to access tutorials/etc
to connect
to the Isaac AMR Cloud Services, whether it is running on Carter or
in simulation. If you are running the navigation app on Carter, copy
all the files from tutorials/etc
to it.
scp -r tutorials/etc nvidia@<ROBOT IP>:<path/to/tutorials/etc>
Add and update the following fields in your navigation app configuration.
robot_name: <your_robot_name>
cloud_host: <ip_to_isaac_amr_cloud_services>
route_planner: cloud
Set the value of physics_engine to match your needs.
Note that the robot_name
refers to the specific name of your robot, while the robot
field
is the type of robot being used with the navigation stack.
For additional arguments, you can refer to NAV stack CLI.
If the map will be loaded from the disk, set omap_path
, omap_cell_size
and semantic_map_path
(if needed) to your desired value. If the map will be
downloaded from DeepMap, add the following to your navigation app configuration.
tile_config:
map_dir: /tmp # or your desired location to store cached data
config_dir: <path/to/tutorials/etc>
omap_path
and semantic_map_path
are ignored when tile_config
is present.
The map will only be loaded when the robot is connected to the cloud.
The following are example configurations:
Using real robot with deepmap server
robot_name: robot_a physics_engine: real-world cloud_host: localhost route_planner: cloud tile_config: map_dir: /tmp/etc config_dir: /tmp/etc
Using real robot with an occupancy map file
robot_name: robot_a physics_engine: real-world cloud_host: localhost route_planner: cloud omap_path: /tmp/map.png omap_cell_size: 0.05
Follow the tutorial according to your platform (Flatsim, Isaac Sim, or Carter) to run the navigation Docker container. Here is an example command if you are running the app on Carter:
docker run -it --gpus all --rm --network=host --privileged \
-v /dev:/dev \
-v /sys:/sys \
-v /tmp:/tmp \
-v <path/to/tutorials/etc>:<path/to/tutorials/etc> \
-e DEEPMAP_VEHICLE_TOKEN=<YOUR_DEEPMAP_SECRET_TOKEN> \
nvcr.io/<your_staging_area>/navigation_stack:isaac_2.0-aarch64 \
-c /tmp/navigation_stack_configuration.yaml
Replace <your_staging_area>
with your assigned NGC Registry staging
area code.
If the map is served on the DeepMap server, make sure you set the
DEEPMAP_VEHICLE_TOKEN
environment variable when starting up
the navigation docker container by passing an additional
-e DEEPMAP_VEHICLE_TOKEN=<YOUR_DEEPMAP_SECRET_TOKEN>
to the
docker run
command.
Navigate to http://localhost:8050/api/v1/docs
(adjust the URL for your
setup). Use the /mission/submitMission
endpoint to submit missions.

The mission samples are shown below:
mission_id = "Sample Mission1"
mission_template = "simple_navigation_mission"
Request Body:
{"route": [{"x":21.5, "y":8.9}]}
mission_id = "Sample Mission2"
mission_template = "simple_navigation_mission"
Request Body:
{
"start_location": {"x":20.3, "y":10.1},
"end_location" : {"x":20.3, "y":10.1},
"route" : [{"x":21.5, "y":8.9},
{"x":20.3, "y":10.1},
{"x":29, "y":20.9}
],
"iterations": 3
}
The request body contains information about the robot’s route
, which includes a series of
waypoints, and each waypoint is defined by x
, y
, and z
coordinates. For 2D maps,
the z
coordinate is optional and defaults to 0.0
.
Additionally, there are three optional parameters: start_location
, iterations
, and
end_location
. These parameters come into play when the robot needs to start from a specific
point, execute multiple iterations within the environment, and ultimately end at a different point.
For more in-depth information about the API and examples, refer to the
Mission Control API Reference.
Once the request is submitted, you should see the robot following a route towards the goal.
Selecting Positions for a Mission on Isaac Sight

Once the Navigation Stack is running, you can select positions on Isaac Sight to construct your mission:
Open Isaac Sight in your web browser. If you are using a Carter robot, go to
https://<robot-ip>:3000
. If using Isaac Sim or Flatsim, go tohttps://localhost:3000
, or replacelocalhost
with the IP address of the machine on which navigation stack app is running.After the map is downloaded to the navigation stack, find the pose marker for
#_<robot_name>/goal_frame
in the “Global Map” window. The text shows up when you hover the marker. Click and drag it to a desired point on the map, and then click elsewhere for the new pose to be registered. If the pose marker is not displaying, follow these steps:Right click on the occupancy map image and select “Settings”.
Click on the “Select marker” dropdown menu.
Find and select
#_<robot_name>/goal_frame (interactive)
.Click “Add marker”.
Click “Update”.
You should now see
Marker: #_<robot_name>/goal_frame
in the list of channel and marker names below the occupancy map image. The marker should also show up on the occupancy map image.
On the left panel, select “PoseTree”.
In the “Pose Tree” window, find “world” and “robot/goal_frame”. Click “world” and then “robot/goal_frame”. You will see a coordinate transform from the world to robot/goal_frame. This tells you the coordinates of the point you picked from Step 2 in the world frame. Keep the X and Y values in your notes.
Repeat Steps 2 to 4 until you construct your mission.
Refer to the Isaac Sight documentation page for more details about using visualization, including a walkthrough video.
If you do not wish to launch the entire Isaac AMR Cloud Services, but still need to download the map from the DeepMap server with the navigation app, follow the steps below:
Follow the instruction from here to acquire DeepMap API client credentials.
Download the tutorial assets from NGC, and set DeepMap credentials. If you are running the navigation app on Carter, copy all the files from
tutorials/etc
to it.scp -r tutorials/etc nvidia@<ROBOT IP>:<path/to/tutorials/etc>
Obtain the map ID, tile ID, and tile version of the map the navigation app will be using. The occupancy and semantic maps have different tile versions.
Add the following to your navigation configuration:
tile_config:
map_dir: /tmp # or your desired location to store cached data
config_dir: <path/to/tutorials/etc>
map_id: <map-id>
tile_id: [<x>, <y>, <z>] # x, y, z are integers
occupancy_tile_version: <occupancy-tile-version>
semantic_tile_version: <semantic-tile-version>
Launch the navigation container with an additional argument
-e DEEPMAP_VEHICLE_TOKEN=<YOUR_DEEPMAP_SECRET_TOKEN>
to thedocker run
command and start the navigation app.docker run -it --gpus all --rm --network=host --privileged \ -v /dev:/dev \ -v /sys:/sys \ -v /tmp:/tmp \ -v <path/to/tutorials/etc>:<path/to/tutorials/etc> \ -e DEEPMAP_VEHICLE_TOKEN=<YOUR_DEEPMAP_SECRET_TOKEN> \ nvcr.io/<your_staging_area>/navigation_stack:isaac_2.0-<platform> \ -c /tmp/navigation_stack_configuration.yaml
Replace <your_staging_area>
with your assigned NGC Registry staging
area code.
Replace <platform>
with the platform architecture of the system you are running the
docker container on. For x86 use k8
, for ARM use aarch64.
Refer to Troubleshooting Isaac AMR Cloud Services for more help with this tutorial.