diff --git a/curiosity_nvidia_isaac/README.md b/curiosity_nvidia_isaac/README.md new file mode 100644 index 0000000..9dd7954 --- /dev/null +++ b/curiosity_nvidia_isaac/README.md @@ -0,0 +1,68 @@ +# Space ROS Simulation - IsaacSim Extension + +This repository contains simulation assets and modules for Space ROS demos using Nvidia’s IsaacSim. It extends IsaacSim with specialized features for simulating space robotics. + +## Workstation Installation + +Refer [link](https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_workstation.html) for workstation installation of Isaac Sim. + +

+ ROS2 Joint State Messages Subcriber +

+ +## System Requirements + +Ensure your system meets the minimum specifications to run this project: + +| Element | Minimum Spec | Good Spec | Ideal Spec | +|--------- |---------------------------------------|-----------------------------------------|---------------------------------------------------| +| **OS** | Ubuntu 20.04/22.04, Windows 10/11 | Ubuntu 20.04/22.04, Windows 10/11 | Ubuntu 20.04/22.04, Windows 10/11 | +| **CPU** | Intel Core i7 (7th Gen), AMD Ryzen 5 | Intel Core i7 (9th Gen), AMD Ryzen 7 | Intel Core i9, X-series or higher, AMD Ryzen 9, Threadripper or higher | +| **Cores**| 4 | 8 | 16 | +| **RAM** | 32GB* | 64GB* | 64GB* | +| **Storage**| 50GB SSD | 500GB SSD | 1TB NVMe SSD | +| **GPU** | GeForce RTX 3070 | GeForce RTX 4080 | RTX Ada 6000 | +| **VRAM** | 8GB* | 16GB* | 48GB* | + + +## Prerequisites + +This project is built upon Nvidia IsaacSim, and tested with Ubuntu 22.04. You’ll need the following dependencies: + +| Dependency | Version | Description | +| ---------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| IsaacSim | >=4.0.0 or Cloud | Check System Compatibility with [software](https://docs.omniverse.nvidia.com/isaacsim/latest/installation/requirements.html#isaac-sim-compatibility-checker) +| | | Setup Cloud Based Nvidia Isaac Sim [follow](https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_cloud.html)| | +| ROS2 | Humble | ROS2 Humble acts as a middleware. Installation details [here](https://docs.ros.org/en/humble/Installation.html). | + +## Getting Started + +Follow these steps to get started: + +1. **Install Prerequisites**: Ensure all dependencies are installed as per the instructions in the prerequisites section. In addition add `git-lfs` to enable large size files. To install run the command 'sudo apt-get install git-lfs && git lfs install' +2. **Clone the Repository**: + ```bash + git clone https://github.com/space-ros/simulation.git + cd + git lfs pull + ``` +3. The Isaac Extension contains following structure: + - documents : Detailed documents and its relevant images + - isaac_assets : Contains all the required assets for the simulation. Included apollo16, mars terrain environments. + - models : Contains the robot models +4. Open Isaac Simulation using the [Isaac Sim App Selector](https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_workstation.html#isaac-sim-short-app-selector) + > NOTE: + 1. Make sure ROS2 Bridge is extension is enabled in the IsaacSim. You can enable it by the previous steps mentioned for the extensions. + 2. Refer this to enable/disable the [ROS2 extension](https://docs.omniverse.nvidia.com/isaacsim/latest/installation/install_ros.html#enabling-the-ros-bridge-extension) +5. Go to your local workspace inside isaac simulation +6. Copy the simulation folder `` inside the issac environment to enable all the assets along with the world +7. Open the `NasaRoverChallenge.usd` for the enviroment and rover robot. The environment should open with following visuals. +

+ ROS2 Joint State Messages Subcriber +

+ +8. Now, the simulation is ready. +9. To move further refer below mentioned documents + 1. [URDF Import](https://docs.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/tutorial_ros2_turtlebot.html) + 2. [Rover Action Graph](documents/docs/action_graph.md) + \ No newline at end of file diff --git a/curiosity_nvidia_isaac/documents/docs/action_graph.md b/curiosity_nvidia_isaac/documents/docs/action_graph.md new file mode 100644 index 0000000..3f5fe10 --- /dev/null +++ b/curiosity_nvidia_isaac/documents/docs/action_graph.md @@ -0,0 +1,67 @@ +# Nvidia Isaac Action Graphs + +The Action Graph serves as a visual programming framework, enabling users to design complex robotic behaviors by linking various functional nodes. These nodes act as building blocks representing specific capabilities that, when connected, create a data flow. The tool allows users to craft intricate robotic behaviors without the need for manual coding. The Action Graph’s intuitive interface makes it possible to easily build custom behaviors for robots in a simulated environment. + +Refer below action graph details: +1. ROS2 Joint State Messages Subcriber for Wheels (movement + steer), Arm, Mast +2. ROS2 Joint State Publisher +3. ROS2 Transform Tree Publisher +4. ROS2 Camera Data and Information Publisher +5. ROS2 2D RTX Lidar Publisher +6. ROS2 IMU Publisher +7. ROS2 Odometry Publisher + +### ROS2 Joint State Messages Subcriber for Wheels (movement + steer), Arm, Mast + +The Action Graph for Subscribing to Joint State Messages is used to subscribe to joint state messages from the ROS2 network. The action graph reads joint state messages from the ROS2 network and provides the joint state data to the simulation environment. The action graph provides a node that subscribes to joint state messages from the ROS2 network and provides the joint state data to the simulation environment. The action graph can be used to subscribe to joint state messages from the ROS2 network and update the joint states of the robot in the simulation environment. +This grpah controls all the joint movement commands (wheel movement, steer movement, mast joint trajectories and arm joint trajectories). +> Note: Make sure the ros2 topic names are correct + +

+ ROS2 Joint State Messages Subcriber +

+ +### ROS2 Joint State Publisher +The Action Graph for Publishing Joint State Messages enables the simulation to send joint state data to the ROS2 network. This graph includes a node that collects joint state information from the simulation environment and publishes it to the ROS2 network. By using this action graph, you can ensure that the current joint positions and movements of the robot in the simulation are continuously communicated to ROS2, allowing for real-time synchronization and further processing within the ROS2 ecosystem. +

+ ROS2 Odom State Messages Publisher +

+ +### ROS2 Transform Tree Publisher +The Action Graph for Publishing the Transform Tree allows the simulation to broadcast the robot's full transform tree to the ROS2 network. This graph contains a node that gathers the transform data (position and orientation) of all relevant links in the robot and publishes it to the ROS2 network. By using this action graph, the simulation can ensure that the robot's pose and orientation are continuously updated in ROS2, allowing for accurate tracking and coordination of the robot's frames in real-time. + > Note: Refer above image for connections + +### ROS2 Camera Data and Information Publisher +The Action Graph for Publishing Camera Data enables the simulation to stream camera feed to the ROS2 network. This graph includes a node that captures image data from the simulation's camera sensors and publishes it to the ROS2 network. With this setup, the camera's visual data, such as RGB images or depth information, can be continuously transmitted for processing in ROS2, enabling real-time vision-based tasks like object detection or navigation within the robotic system. + +> Note: Refer [LINK](https://docs.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/tutorial_ros2_camera.html) fpr detailed camera integration + +

+ ROS2 Camera Data Messages Publisher +

+ +### ROS2 2D RTX Lidar Publisher +The Action Graph for Publishing LiDAR Data allows the simulation to send LiDAR sensor data, generated using RTX ray tracing, to the ROS2 network. This graph contains a node that captures high-fidelity point cloud data from the LiDAR sensor in the simulation and publishes it to the ROS2 network. Leveraging RTX ray tracing for accurate environmental scanning, this setup ensures that detailed, real-time LiDAR data is transmitted, supporting tasks like mapping, obstacle detection, and navigation in the ROS2-based robotic system. +> NOTE: Refer ROS2 RTX Lidar Helper block. For detailed analysis and in depth tuning refer [LINK](https://docs.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/tutorial_ros2_rtx_lidar.html) +

+ ROS2 Lidar Data Publisher +

+ +### ROS2 Publisher for IMU Data +The Action Graph for Publishing IMU Data enables the simulation to transmit IMU sensor data to the ROS2 network. This graph includes a node that reads data such as acceleration, angular velocity, and orientation from the IMU sensor within the simulation and publishes it to ROS2. By utilizing this setup, the real-time motion and orientation data of the robot is continuously shared with ROS2, making it ideal for tasks like state estimation, motion tracking, and navigation in ROS2-based applications. + +

+ ROS2 IMU Data Publisher +

+ +> Note: +> 1. The node 'Isaac Read IMU Node' expects the prim path of the IMU sensor to provide the IMU data. If rover is used, the IMU sensor is expected to be attached to the main body of the rover. +> 2. If you are using the rover in different gravity conditions, make sure the `readGravity` parameter of Node 'Isaac Read IMU Node' is set to true. This will read the gravity vector from the simulation environment and apply it to the IMU data. + +### ROS2 Odometry Publisher +The Action Graph for Publishing Odometry Data allows the simulation to send odometry information to the ROS2 network. This graph includes a node that captures the robot's position and velocity data, such as linear and angular movement, from the simulation environment and publishes it to ROS2. With this setup, real-time odometry data is continuously streamed, supporting tasks like robot localization, path planning, and navigation in ROS2-based systems. + +> Note: Refer Compute Odometry and Publish odometry Block. For details refer [LINK](https://docs.omniverse.nvidia.com/isaacsim/latest/ros2_tutorials/tutorial_ros2_tf.html) +

+ ROS2 IMU Data Publisher +

\ No newline at end of file diff --git a/curiosity_nvidia_isaac/documents/images/env1.png b/curiosity_nvidia_isaac/documents/images/env1.png new file mode 100644 index 0000000..d29217d Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/env1.png differ diff --git a/curiosity_nvidia_isaac/documents/images/env1_1.png b/curiosity_nvidia_isaac/documents/images/env1_1.png new file mode 100644 index 0000000..ed0979f Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/env1_1.png differ diff --git a/curiosity_nvidia_isaac/documents/images/env1_2.png b/curiosity_nvidia_isaac/documents/images/env1_2.png new file mode 100644 index 0000000..4b8ebb7 Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/env1_2.png differ diff --git a/curiosity_nvidia_isaac/documents/images/imuandcam.png b/curiosity_nvidia_isaac/documents/images/imuandcam.png new file mode 100644 index 0000000..1e4195c Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/imuandcam.png differ diff --git a/curiosity_nvidia_isaac/documents/images/jointstates.png b/curiosity_nvidia_isaac/documents/images/jointstates.png new file mode 100644 index 0000000..ed0cd53 Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/jointstates.png differ diff --git a/curiosity_nvidia_isaac/documents/images/odom.png b/curiosity_nvidia_isaac/documents/images/odom.png new file mode 100644 index 0000000..88adc09 Binary files /dev/null and b/curiosity_nvidia_isaac/documents/images/odom.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/NasaRoverChallenge.usd b/curiosity_nvidia_isaac/isaac_assets/NasaRoverChallenge.usd new file mode 100644 index 0000000..1306a3c Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/NasaRoverChallenge.usd differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/.thumbs/256x256/roverv1.usd.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/.thumbs/256x256/roverv1.usd.png new file mode 100644 index 0000000..14f5f23 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/.thumbs/256x256/roverv1.usd.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/parts_AO.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/parts_AO.png.auto.png new file mode 100644 index 0000000..c1e832c Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/parts_AO.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_01.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_01.png.auto.png new file mode 100644 index 0000000..a444fe1 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_01.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_02.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_02.png.auto.png new file mode 100644 index 0000000..b39fa2d Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_02.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_03.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_03.png.auto.png new file mode 100644 index 0000000..f4d4eb7 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_03.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_04.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_04.png.auto.png new file mode 100644 index 0000000..e2f765b Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_04.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_05.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_05.png.auto.png new file mode 100644 index 0000000..7f88be1 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/138x108/tex_05.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/parts_AO.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/parts_AO.png.auto.png new file mode 100644 index 0000000..095d5df Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/parts_AO.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_01.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_01.png.auto.png new file mode 100644 index 0000000..3318cb4 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_01.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_02.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_02.png.auto.png new file mode 100644 index 0000000..0abaaab Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_02.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_03.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_03.png.auto.png new file mode 100644 index 0000000..df3f4a1 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_03.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_04.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_04.png.auto.png new file mode 100644 index 0000000..a1875f3 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_04.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_05.png.auto.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_05.png.auto.png new file mode 100644 index 0000000..e8407ba Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/.thumbs/256x256/tex_05.png.auto.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/parts_AO.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/parts_AO.png new file mode 100644 index 0000000..f20b431 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/parts_AO.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_01.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_01.png new file mode 100644 index 0000000..01b5855 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_01.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_02.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_02.png new file mode 100644 index 0000000..a872f68 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_02.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_03.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_03.png new file mode 100644 index 0000000..babdadd Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_03.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_04.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_04.png new file mode 100644 index 0000000..49b5674 Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_04.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_05.png b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_05.png new file mode 100644 index 0000000..2f6807f Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/materials/tex_05.png differ diff --git a/curiosity_nvidia_isaac/isaac_assets/roverv1/roverv1.usd b/curiosity_nvidia_isaac/isaac_assets/roverv1/roverv1.usd new file mode 100644 index 0000000..59e484c Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/roverv1/roverv1.usd differ diff --git a/curiosity_nvidia_isaac/isaac_assets/world/apollo.fbx b/curiosity_nvidia_isaac/isaac_assets/world/apollo.fbx new file mode 100644 index 0000000..5a6134c Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/world/apollo.fbx differ diff --git a/curiosity_nvidia_isaac/isaac_assets/world/moonsurface.fbx b/curiosity_nvidia_isaac/isaac_assets/world/moonsurface.fbx new file mode 100644 index 0000000..770b84d Binary files /dev/null and b/curiosity_nvidia_isaac/isaac_assets/world/moonsurface.fbx differ