Isaac ROS Development Environment#
Note
This page provides a detailed explanation of the development environment and its configuration.
To begin using Isaac ROS, use the Getting Started guide instead.
Overview#
The Isaac ROS Development Environment is a containerized environment for developing and testing Isaac ROS packages.
The Isaac ROS environment is managed and accessed via the Isaac ROS CLI.
All Isaac ROS packages, quickstarts, tutorials, and other workflows are tested in the default development environment.
You can further customize the development environment by updating the Isaac ROS CLI configuration files.
Setting Up the Development Environment#
Isaac ROS Workspace (ISAAC_ROS_WS)#
The Isaac ROS Development Environment is based around a standard ROS 2 workspace.
The Isaac ROS CLI, documentation, and other utilities all rely on the user-specified ISAAC_ROS_WS environment variable to locate your ROS workspace.
As recommended in the Getting Started guide, a good place to set this variable is in your .bashrc file, so that it is pre-loaded into your shell’s environment.
Alternatively, advanced users with multiple workspaces may choose to use a tool like direnv to automatically set the variable based on the current working directory.
The Isaac ROS CLI mounts the workspace directory into the development container at /workspaces/isaac_ros-dev. For convenience, the CLI also automatically overrides the in-container value of ISAAC_ROS_WS, ensuring that ${ISAAC_ROS_WS} always resolves to the correct location.
Customizing the Development Environment#
Isaac ROS CLI Configuration Files#
The Isaac ROS CLI uses a layered series of YAML files for configuration. A base configuration is shipped with the Isaac ROS CLI during installation, and then higher-priority configuration files can selectively override portions of the base configuration.
The configuration files are loaded in the following order:
Scope |
Location |
Access Control |
Description |
|---|---|---|---|
Default |
|
Read-only |
Default values shipped with the Isaac ROS CLI.
This file is a useful reference for the CLI’s configuration schema.
|
System |
|
Managed by the CLI |
Config written to by the Isaac ROS CLI. |
User |
|
Managed by the user |
Optional user-level overrides to the base configuration.
Some tutorials in the Isaac ROS documentation will require creating and updating this file.
|
Workspace |
|
Managed by the user |
Optional workspace-level overrides to the base configuration.
Advanced users with multiple workspaces can use this file to configure each workspace individually.
|
If a YAML node is present in multiple configuration files, the Isaac ROS CLI recursively merges the values based on the node type:
Node Type |
Resolution Strategy |
|---|---|
Scalar |
The value in the higher-priority configuration file overrides the value in the lower-priority configuration file. |
Sequence |
The values in the higher-priority configuration file are appended to the values in the lower-priority configuration file. |
Mapping |
The (key, value) pairs are recursively merged using these same resolution rules. |
Typically, you will only need to override small portions of the default configuration, and so your override config files will be correspondingly smaller than the default.
Note
Do not duplicate the entire read-only configuration file in a user- or workspace-level configuration file.
During initialization, the Isaac ROS CLI writes important information to the system-level configuration file, overriding the uninitialized values stored in the default read-only configuration file.
A duplicated uninitialized configuration stored at the user- or workspace-level will override the Isaac ROS CLI’s attempted initialization, preventing environment activation and other CLI commands.
Instead, selectively override only the desired portions of the default configuration file.
Docker Image Keys#
The Isaac ROS development container runs from an image composed from multiple individual Dockerfiles in a prescribed order.
Each Dockerfile is named Dockerfile.<image_key>, where <image_key> is a unique identifier that describes the file’s contents.
The Isaac ROS CLI ships with the following Dockerfiles:
Image Key |
Description |
|---|---|
|
Platform-specific dependencies for CUDA and other NVIDIA libraries on Ubuntu 24.04 Noble. |
|
Dependencies for ROS 2 Jazzy and other Isaac ROS packages. |
|
Dependencies for RealSense cameras. |
By default, the Isaac ROS CLI uses the image key sequence [noble, ros2_jazzy], and NVIDIA provides a corresponding prebuilt Docker image via the NGC Container Registry.
Additional image keys can be added by specifying new entries in an Isaac ROS CLI configuration file at the appropriate scope.
For example, to add the realsense image key, add the following to your configuration file:
docker:
image:
additional_image_keys:
- realsense
Note
Since NVIDIA only provides prebuilt Docker images for the base image key sequence [noble, ros2_jazzy], any additional image keys must be built locally.
Run isaac-ros activate --build-local to build the image with the new image key:
isaac-ros activate --build-local
Rebuilding can take several minutes.
After the image has been built once, you can use isaac-ros activate to launch the container from the saved image.
If the image is subsequently deleted from the local Docker registry, use the --build-local flag to rebuild the image.