diff --git a/_data/navigation.yml b/_data/navigation.yml index 6600d2a4..e060db95 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -243,6 +243,8 @@ wiki: url: /wiki/simulation/Spawning-and-Controlling-Vehicles-in-CARLA - title: NDT Matching with Autoware url: /wiki/simulation/NDT-Matching-with-Autoware/ + - title: Isaacsim Setup + url: /wiki/simulation/simulation-isaacsim-setup/ - title: Interfacing url: /wiki/interfacing/ children: diff --git a/wiki/simulation/assets/images/carter.png b/wiki/simulation/assets/images/carter.png new file mode 100644 index 00000000..44ae5ac0 Binary files /dev/null and b/wiki/simulation/assets/images/carter.png differ diff --git a/wiki/simulation/assets/images/isaac_simpleroom.png b/wiki/simulation/assets/images/isaac_simpleroom.png new file mode 100644 index 00000000..64544fc1 Binary files /dev/null and b/wiki/simulation/assets/images/isaac_simpleroom.png differ diff --git a/wiki/simulation/assets/images/nav2.png b/wiki/simulation/assets/images/nav2.png new file mode 100644 index 00000000..9801ef9d Binary files /dev/null and b/wiki/simulation/assets/images/nav2.png differ diff --git a/wiki/simulation/assets/images/realsense.png b/wiki/simulation/assets/images/realsense.png new file mode 100644 index 00000000..6fd66608 Binary files /dev/null and b/wiki/simulation/assets/images/realsense.png differ diff --git a/wiki/simulation/simulation-isaacsim-setup.md b/wiki/simulation/simulation-isaacsim-setup.md new file mode 100644 index 00000000..f76b04b5 --- /dev/null +++ b/wiki/simulation/simulation-isaacsim-setup.md @@ -0,0 +1,181 @@ +--- +date: {} +title: NVIDIA Isaac Sim Setup and ROS2 Workflow for MRSD Projects +--- + +NVIDIA Isaac Sim is a high-fidelity robotics simulator built on Omniverse, enabling realistic sensor modeling, physics simulation, and ROS 2 integration for autonomous systems. + +This tutorial provides a complete guide for MRSD teams to install Isaac Sim on both local and remote workstations, configure the Action Graph for simulation logic, attach sensors such as cameras and LiDAR, and connect the simulator to ROS 2 frameworks like Nav2 and MoveIt. + +By following this tutorial, readers will learn to build fully integrated simulation pipelines suitable for perception, planning, and control workflows in MRSD projects. + +## Key Concepts and Background + +Isaac Sim sits at the intersection of several important technologies: + +- **USD (Universal Scene Description)** forms the core data representation in Omniverse. +- **PhysX** provides physically accurate simulation of rigid-body dynamics. +- **RTX** ray tracing enables photorealistic sensor simulation. +- **ROS 2** provides middleware that enables distributed autonomy modules. + +Isaac Sim is fundamentally a USD-native simulator. Robot models imported as USD deliver far more reliable behavior than raw URDFs. +This is an important point when integrating perception or planning algorithms on ROS2. +If you are unfamiliar with USD concepts, refer to NVIDIA’s USD primer for an introduction. + + + +## Installation and Initial Setup +The following sections detail the necessary steps for installing and configuring Isaac Sim on both local and remote platforms. + +### Please check Isaac Sim Requreiments for system requriement and compatibility +[System Requirements](https://docs.isaacsim.omniverse.nvidia.com/4.5.0/installation/requirements.html#isaac-sim-short-requirements) + + +### Local Workstation Installation +1. Download the Latest Release of Isaac Sim to the default Downloads folder. + +2. Unzip the package to the recommended Isaac Sim root folder and Run the Isaac Sim App Selector. + +3. Run the commands below in Terminal for Linux. +````bash + mkdir ~/isaacsim + cd ~/Downloads + unzip "isaac-sim-standalone-4.5.0-linux-x86_64.zip" -d ~/isaacsim + cd ~/isaacsim + ./post_install.sh + ./isaac-sim.selector.sh +```` + + + + +### Remote/Headless Workstation Configuration +For MRSD teams utilizing powerful remote servers without a connected monitor, Isaac Sim must be run in headless mode. + +- Setup and install the [container prerequisites](https://docs.isaacsim.omniverse.nvidia.com/4.5.0/installation/install_container.html#container-setup). + 1. Install NVIDIA Driver + 2. Install Docker + 3. Install the NVIDIA Container Toolkit + - Pull the Isaac Sim Container: + ````bash + docker pull nvcr.io/nvidia/isaac-sim:4.5.0 + ```` + +- Run the Isaac Sim container with an interactive Bash session: + ````bash + docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \ + -e "PRIVACY_CONSENT=Y" \ + -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \ + -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \ + -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \ + -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \ + -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \ + -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \ + -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \ + -v ~/docker/isaac-sim/documents:/root/Documents:rw \ + nvcr.io/nvidia/isaac-sim:4.5.0 + ```` +- Start Isaac Sim with native livestream mode: + ````bash + ./runheadless.sh -v + ```` + + +## Creating and Managing Scenes + +Isaac Sim provides several sample scenes such as **industrial warehouses, office interiors, and outdoor blocks** that simplify early development. + +- Load an example scene, simple room: + ````bash + Create → Environment → Simple Room + ```` + ![simple room](assets/images/isaac_simpleroom.jpg) + + You can browse other scene samples in Isaac Sim Asset Browser. + It is accessible from the **Window > Browser tab.** + +## Importing Robot Models + +NVIDIA Isaac Sim supports a wide range of robots with differential bases, form factors, and functions. + +These robots can be categorized as **wheeled robots, holonomic robots, quadruped robots, robotic manipulator and aerial robots (drones)**. + +You can browse these robots in Isaac Sim Asset Browser under Robots folder. +It is accessible from the **Window > Browser tab.** + +For example, a popular wheeled robot for navigation is Nova Carter. We can import from the Robots/Carter/nova_carter.usd +![nova carter](assets/images/carter.png) + +Here are some properties that can be tuned to correct the robot's behavior: + + +- **Frictional Properties** + +If your robot’s wheels are slipping, try changing the friction coefficients of the wheels and potentially the ground as well following steps [in Add Simple Objects](https://docs.isaacsim.omniverse.nvidia.com/4.5.0/gui/tutorial_intro_simple_objects.html#isaac-sim-app-tutorial-intro-simple-objects). + +- **Physical Properties** + +If no explicit mass or inertial properties are given, the physics engine will estimate them from the geometry mesh. To update the mass and inertial properties, find the prim that contains the rigid body for the given link (You can verify this by finding Physics > Rigid Body under its property tab). If it already has a “Mass” category under its Physics property tab, modify them accordingly. If there isn’t already a “Mass” category, you can add it by clicking on the +Add button on top of the Property tab, and select Physics > Mass. + +- **Joint Properties** + +If your robot is oscillating at the joint or moving too slow, take a look at the stiffness and damping parameters for the joints. High stiffness makes the joints snap faster and harder to the desire target, and higher damping smoothes but also slows down the joint’s movement to target. For pure position drives, set relatively high stiffness and low damping. For velocity drives, stiffness must be set to zero with a non-zero damping. + +## Sensor Setup and Streaming + +NVIDIA Isaac Sim also supports many realistic sensors modules, such as **stereo cameras, Lidars, IMU and more.** The sensor digital twins can be found in the **asset browser under the Sensors tab.** + +For example, creating a Camera Sensor: +To create the camera from the menu: **Create>Sensors>Camera and Depth Sensors>Intel>Intel Realsense D455**. +The Intel Realsense Depth Camera D455 consists of multiple RGB and depth image sensors and a 6-axis IMU. +![realsense](assets/images/realsense.png) + +[Camera, RTX, Physics Based Sensors](https://docs.isaacsim.omniverse.nvidia.com/4.5.0/sensors/index.html#sensors) + +### Connecting to ROS2 +Isaac Sim connects to ROS 2 through the ROS 2 Bridge extension. One way is using ROS2 OmniGraph Nodes. Isaac Sim provides OmniGraph (OG) nodes that allow simulation data to be connected with ROS 2 topics. OG nodes encapsulate small computational functions and can be combined in an Action Graph to publish sensor data, broadcast transforms, or receive robot commands. Common templates such as TF publishers, camera publishers, and clock publishers can be added directly to a scene. Developers may also create custom OG nodes in Python or C++ for project-specific ROS 2 integrations. + +[Commonly Used Omnigraph Shortcuts](https://docs.isaacsim.omniverse.nvidia.com/4.2.0/advanced_tutorials/tutorial_advanced_omnigraph_shortcuts.html#commonly-used-omnigraph-shortcuts) + +- Example:[ROS 2 Clock Publisher Action Graph](https://docs.isaacsim.omniverse.nvidia.com/4.2.0/ros2_tutorials/tutorial_ros2_clock.html#running-ros-2-clock-publisher) + +A simple Action Graph for publishing simulation time typically includes: + + - On Playback Tick – triggers updates every simulation frame + + - Isaac Read Simulation Time – outputs the current simulation time + + - ROS 2 Publish Clock – publishes the time to a ROS 2 /clock topic + +Simulation time is important because ROS 2 nodes often require synchronized time sources that differ from real-world system time. + +## ROS2 Navigation + +### Nav2 Setup + +This diagram shows the ROS2 messages required for Nav2: +![nav2](assets/images/nav2.png) + +1. Install Nav2, refer to the [Nav2 installation page](https://docs.nav2.org/getting_started/index.html#installation). + +2. Enable the **omni.isaac.ros2_bridge Extension** in the Extension Manager window by navigating to Window > Extensions. + +3. Generate Occupancy Map for Environment + - Omniverse Isaac Sim mapping extension supports 2D occupancy map generation for a specified height. + - [Occupancy Map Generator](https://docs.isaacsim.omniverse.nvidia.com/4.2.0/features/ext_omni_isaac_occupancy_map.html#ext-omni-isaac-occupancy-map) + +4. Launch Nav2 with Pre-generated Map +A more detailed example here: [Nav2 with Nova Carter in Small Warehouse](https://docs.isaacsim.omniverse.nvidia.com/4.2.0/ros2_tutorials/tutorial_ros2_navigation.html#nav2-with-nova-carter-in-small-warehouse) + ````bash + ros2 launch carter_navigation carter_navigation.launch.py + ```` +5. Click on the Navigation2 Goal button and then click and drag at the desired location point in the map. Nav2 will generate a trajectory and the robot starts moving towards its destination. + + + +## References +- [Isaac Sim Documentation 4.2.0](https://docs.isaacsim.omniverse.nvidia.com/4.2.0/ros2_tutorials/index.html#ros-2-tutorials-linux-windows) +- [Isaac Sim Documentation 4.5.0](https://docs.isaacsim.omniverse.nvidia.com/4.5.0/ros2_tutorials/index.html#ros-2-tutorials-linux-and-windows) +- [Nav2, Open Navigation](https://docs.nav2.org/getting_started/index.html#navigating) +-[Turtlebot3 bringup](https://emanual.robotis.com/docs/en/platform/turtlebot3/bringup/#bringup) +