Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NASA Challenge_[@magnivia4consult]_[Mars Rover Demo on NVIDIA ISAAC with RVIZ based teleop and a Controller Loader] #34

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions curiosity_nvidia_isaac/README.md
Original file line number Diff line number Diff line change
@@ -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.

<p align="center">
<img src="./documents/images/env1.png" alt="ROS2 Joint State Messages Subcriber">
</p>

## 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 <path-to-simulation-directory>
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 `<path-to-simulation-directory>` 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.
<p align="center">
<img src="./documents/images/env1_2.png" alt="ROS2 Joint State Messages Subcriber">
</p>

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)

67 changes: 67 additions & 0 deletions curiosity_nvidia_isaac/documents/docs/action_graph.md
Original file line number Diff line number Diff line change
@@ -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

<p align="center">
<img src="../images/jointstates.png" alt="ROS2 Joint State Messages Subcriber">
</p>

### 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.
<p align="center">
<img src="../images/odom.png" alt="ROS2 Odom State Messages Publisher">
</p>

### 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

<p align="center">
<img src="../images/imuandcam.png" alt="ROS2 Camera Data Messages Publisher">
</p>

### 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)
<p align="center">
<img src="../images/odom.png" alt="ROS2 Lidar Data Publisher">
</p>

### 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.

<p align="center">
<img src="../images/imuandcam.png" alt="ROS2 IMU Data Publisher">
</p>

> 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)
<p align="center">
<img src="../images/odom.png" alt="ROS2 IMU Data Publisher">
</p>
Binary file added curiosity_nvidia_isaac/documents/images/env1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added curiosity_nvidia_isaac/documents/images/odom.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.