Skip to content

Commit

Permalink
added isaacLab support
Browse files Browse the repository at this point in the history
  • Loading branch information
abizovnuralem committed Jun 2, 2024
1 parent 896710c commit ac1275a
Show file tree
Hide file tree
Showing 10 changed files with 131 additions and 139 deletions.
27 changes: 16 additions & 11 deletions Isaac_sim/extension.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ reloadable = true
order = 0

[package]
version = "9.11.1"
version = "11.3.0"
category = "Simulation"
title = "Isaac Sim Isaac Sensor Simulation"
description = "Support physics based sensors, such as contact sensors and imu sensors"
Expand All @@ -27,15 +27,16 @@ writeTarget.kit = true
"omni.isaac.range_sensor" = {}
"omni.isaac.core_nodes" = {}
"omni.usd.schema.isaac" = {}
"omni.isaac.debug_draw" = {}
"omni.graph" = {}
"omni.graph.action" = {}
"omni.syntheticdata" = {}
"omni.replicator.core" = {}
"omni.usd" = {} # needed for call to add aov
"usdrt.scenegraph" = {}
"omni.sensors.nv.common" = {}
"omni.sensors.nv.lidar" = {}
"omni.sensors.nv.radar" = {}
"omni.isaac.nucleus" = {}

[[python.module]]
name = "omni.isaac.sensor"
Expand All @@ -56,25 +57,28 @@ recursive = false

[settings]
app.sensors.nv.lidar.profileBaseFolder=[
"${app}/../data/sensors/lidar/",
"${app}/../extsbuild/omni.sensors.nv.common/data/lidar/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/HESAI/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/NVIDIA/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Ouster/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Ouster/OS0/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Ouster/OS1/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Ouster/OS2/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/SICK/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/SLAMTEC/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Velodyne/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/ZVISION/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/Unitree/",
"${app}/../exts/omni.isaac.sensor/data/lidar_configs/"]
app.sensors.nv.radar.runWithoutMBVH = true
# app.sensors.nv.lidar.enableVelocity=true
# app.sensors.nv.lidar.outputBufferOnGPU = true
app.sensors.nv.radar.runWithoutMBVH = false
app.sensors.nv.lidar.enableVelocity=true
rtx.rtxsensor.coordinateFrameQuaternion = "0.0,0.0,0.0,1.0"
# sensor material mapping is hard coded for now, and this is needed to enable sensor materials.
rtx.materialDb.rtSensorNameToIdMap="DefaultMaterial:0;AsphaltStandardMaterial:1;AsphaltWeatheredMaterial:2;VegetationGrassMaterial:3;WaterStandardMaterial:4;GlassStandardMaterial:5;FiberGlassStandardMaterial:6;MetalAlloyMaterial:7;MetalAluminumMaterial:8;MetalAluminumOxidizedMaterial:9;PlasticStandardMaterial:10;RetroMarkingsMaterial:11;RetroSignMaterial:12;RubberStandardMaterial:13;SoilClayMaterial:14;ConcreteRoughMaterial:15;ConcreteSmoothMaterial:16;OakTreeBarkMaterial:17;FabricStandardMaterial:18;PlexiGlassStandardMaterial:19;MetalSilverMaterial:20"
#renderer.raytracingMotion.enabled=true
rtx.materialDb.rtSensorNameToIdMap="DefaultMaterial:0;AsphaltStandardMaterial:1;AsphaltWeatheredMaterial:2;VegetationGrassMaterial:3;WaterStandardMaterial:4;GlassStandardMaterial:5;FiberGlassMaterial:6;MetalAlloyMaterial:7;MetalAluminumMaterial:8;MetalAluminumOxidizedMaterial:9;PlasticStandardMaterial:10;RetroMarkingsMaterial:11;RetroSignMaterial:12;RubberStandardMaterial:13;SoilClayMaterial:14;ConcreteRoughMaterial:15;ConcreteSmoothMaterial:16;OakTreeBarkMaterial:17;FabricStandardMaterial:18;PlexiGlassStandardMaterial:19;MetalSilverMaterial:20"
renderer.raytracingMotion.enabled=true

[[test]]
timeout=900
timeout=1200
dependencies = [
"omni.hydra.rtx", # "omni.hydra.pxr", Can we run and pass with Storm ?
"omni.kit.viewport.utility",
Expand All @@ -86,7 +90,8 @@ dependencies = [
stdoutFailPatterns.exclude = [
# This is excluded in at least 3 kit tests.
"*Missing call to destroyResourceBindingSignature()*",
'*[Error] [omni.graph.core.plugin] /TestGraph/Template_omni_isaac_sensor_IsaacReadContactSensor: [/TestGraph] OmniGraph Error: Invalid contact sensor prim*',
'*[Error] [omni.graph.core.plugin] /TestGraph/Template_omni_isaac_sensor_IsaacReadContactSensor: [/TestGraph] Invalid contact sensor prim*',
'*[Error] [omni.graph.core.plugin] /TestGraph/Template_omni_isaac_sensor_IsaacReadEffortSensor: [/TestGraph] OmniGraph Error: Failed to create effort sensor, unable to find prim path*',
'*[Error] [omni.graph.core.plugin] /TestGraph/Template_omni_isaac_sensor_IsaacReadIMU: [/TestGraph] OmniGraph Error: Invalid Imu sensor prim*',
'*[Error] [omni.graph.core.plugin] /TestGraph/Template_omni_isaac_sensor_IsaacReadIMU: [/TestGraph] Invalid Imu sensor prim*',
'*[Error] [carb] [Plugin: omni.sensors.nv.lidar.ext.plugin] Dependency: [omni::sensors::lidar::IGenericModelOutputIOFactory v0.1] failed to be resolved.*'
]
37 changes: 12 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Welcome to the Unitree Go2 Omniverse Project!

I am thrilled to announce that the Unitree Go2 robot has now been integrated with the Nvidia Isaac Sim (Orbit), marking a major step forward in robotics research and development. The combination of these two cutting-edge technologies opens up a world of possibilities for creating and testing algorithms in a variety of simulated environments.
I am thrilled to announce that the Unitree Go2 robot has now been integrated with the Nvidia Isaac Sim 4.0 (Isaac Lab), marking a major step forward in robotics research and development. The combination of these two cutting-edge technologies opens up a world of possibilities for creating and testing algorithms in a variety of simulated environments.

Get ready to take your research to the next level with this powerful new resource at your fingertips!

Expand Down Expand Up @@ -71,7 +71,7 @@ VR support:
8. Real-time control from ROS2 :white_check_mark:
9. Nav2 with Slam_toolbox :white_check_mark:
10. Bunch of RL-envs for custom dog training :white_check_mark:
11. Custom numbers of robots
11. Custom numbers of robots :white_check_mark:

## Your feedback and support mean the world to us.

Expand All @@ -85,22 +85,21 @@ Together, let's push the boundaries of what's possible with the Unitree Go2 and
## System requirements
You need to install:
1. Ubuntu 22.04
2. Nvidia Isaac Sim 2023.1.1
3. Nvidia Orbit 0.3.0
2. Nvidia Isaac Sim 4.0
3. Nvidia Isaac Lab
4. Ros2 Humble


Full instruction:
```
https://isaac-orbit.github.io/orbit/source/setup/installation.html
https://isaac-sim.github.io/IsaacLab/source/setup/installation/binaries_installation.html
```

Some suggestions from me:
1. You need to check nvidia-smi, it should work, before installing Isaac Sim
1. You need to check nvidia-smi, it should work, before installing Isaac Sim 4.0
2. You need to install Miniconda and execute: conda config --set auto_activate_base false
3. Install Omniverse launcher and then install Isaac Sim.
4. Create conda env then activate it, also execute ./orbit.sh --install and ./orbit.sh --extra and ./orbit.sh --extra rsl_rl

3. Install Omniverse launcher and then install Isaac Sim 4.0.
4. Create conda env then activate it, also execute ./isaaclab.sh --install
Also, you need to install ROS2 on your system and configure it:

```
Expand All @@ -121,15 +120,13 @@ git clone https://github.com/abizovnuralem/go2_omniverse/ --recurse-submodules -
First, you need to copy files from Isaac Sim folder to your local Isaac Sim installation in order to use Unitree L1 lidar inside Orbit.

```
1. You need to replace original file that located in ~/.local/share/ov/pkg/isaac_sim-2023.1.1/exts/omni.isaac.sensor/config/extrensiom.toml
with Isaac_sim/extension.toml
2. You need to add Unitree folder that is inside Isaac_sim folder to ~/.local/share/ov/pkg/isaac_sim-2023.1.1/exts/omni.isaac.sensor/data/lidar_configs/
3. You need to go inside Orbit project folder and then mkdir -p /source/exts/omni.isaac.sensor/data/lidar_configs/Unitree/
4. Put Unitree_L1.json inside orbit/source/exts/omni.isaac.sensor/data/lidar_configs/Unitree/
1. You need to replace original file that located in ~/.local/share/ov/pkg/isaac-sim-4.0.0/exts/omni.isaac.sensor/config/extrensiom.toml
with Isaac_sim/extension.toml in this repo.
2. You need to add Unitree_L1.json to IsaacLab repo folder, where IsaacLab/source/exts/omni.isaac.sensor/data/lidar_configs/Unitree/Unitree_L1.json will be the final path (If it doesnt exists, create it)
```

## Usage
The current project was tested on Ubuntu 22.04, IsaacSim 2023.1.1 with Orbit 0.3.0 and Nvidia Driver Version: 545.
The current project was tested on Ubuntu 22.04, IsaacSim 4.0 with Isaac Lab and Nvidia Driver Version: 545.
To start the project, execute:

```
Expand Down Expand Up @@ -167,16 +164,6 @@ I have tested it on:
## Thanks
Special thanks to Leul Tesfaye for his expertise in Orbit lidars and Tamas @tfoldi for his contribution to this project.

## VR support

To enable VR support on linux will take some time, but it works!
I have tested it on:
1. Ubuntu 22.04
2. Nvidia drivers are 545.29.06
3. SteamVR 2.4.4 (IMPORTANT! It should be 2.4.4) and you need to go to Compatibility tab (Inside Steam app) and "Force the use of a specific Steam Play compatibility tool" and switch to "Steam-Play-None", additional info you can find in ALVR github issues tab.
4. ALVR streamer 20.8.1 + Oculus Quest 2 (client ALVR you can install via SideQuest app) (How to install it: https://github.com/alvr-org/ALVR)
5. Execute IsaacSim, Go to Window -> Extensions, find STEAMVR INPUT/OUTPUT then enable it and enable AutoLoad. Reopen IsaacSim. Use OpenXR mode.
6. Enjoy Omniverse in VR mode!

## License

Expand Down
4 changes: 2 additions & 2 deletions cli_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from typing import TYPE_CHECKING

if TYPE_CHECKING:
from omni.isaac.orbit_tasks.utils.wrappers.rsl_rl import RslRlOnPolicyRunnerCfg
from omni.isaac.lab_tasks.utils.wrappers.rsl_rl import RslRlOnPolicyRunnerCfg


def add_rsl_rl_args(parser: argparse.ArgumentParser):
Expand Down Expand Up @@ -48,7 +48,7 @@ def parse_rsl_rl_cfg(task_name: str, args_cli: argparse.Namespace) -> RslRlOnPol
Returns:
The parsed configuration for RSL-RL agent based on inputs.
"""
from omni.isaac.orbit_tasks.utils.parse_cfg import load_cfg_from_registry
from omni.isaac.lab_tasks.utils.parse_cfg import load_cfg_from_registry

# load the default configuration
rslrl_cfg: RslRlOnPolicyRunnerCfg = load_cfg_from_registry(task_name, "rsl_rl_cfg_entry_point")
Expand Down
42 changes: 21 additions & 21 deletions custom_rl_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,31 @@
from typing import Literal


from omni.isaac.orbit.envs import RLTaskEnvCfg
from omni.isaac.orbit.utils import configclass
from omni.isaac.orbit.envs import RLTaskEnvCfg
import omni.isaac.orbit.sim as sim_utils
from omni.isaac.orbit.assets import ArticulationCfg, AssetBaseCfg
from omni.isaac.orbit.scene import InteractiveSceneCfg
from omni.isaac.orbit.sensors import ContactSensorCfg, RayCasterCfg, patterns
from omni.isaac.orbit.terrains import TerrainImporterCfg
from omni.isaac.orbit.utils import configclass
from omni.isaac.orbit_assets.unitree import UNITREE_GO2_CFG
from omni.isaac.orbit.managers import EventTermCfg as EventTerm
from omni.isaac.orbit.managers import ObservationGroupCfg as ObsGroup
from omni.isaac.orbit.managers import ObservationTermCfg as ObsTerm
from omni.isaac.orbit.managers import RewardTermCfg as RewTerm
from omni.isaac.orbit.managers import SceneEntityCfg
from omni.isaac.orbit.managers import TerminationTermCfg as DoneTerm
from omni.isaac.orbit.utils import configclass
from omni.isaac.orbit.utils.noise import AdditiveUniformNoiseCfg as Unoise
import omni.isaac.orbit_tasks.locomotion.velocity.mdp as mdp
from omni.isaac.lab.envs import ManagerBasedRLEnvCfg
from omni.isaac.lab.utils import configclass

import omni.isaac.lab.sim as sim_utils
from omni.isaac.lab.assets import ArticulationCfg, AssetBaseCfg
from omni.isaac.lab.scene import InteractiveSceneCfg
from omni.isaac.lab.sensors import ContactSensorCfg, RayCasterCfg, patterns
from omni.isaac.lab.terrains import TerrainImporterCfg
from omni.isaac.lab.utils import configclass
from omni.isaac.lab_assets.unitree import UNITREE_GO2_CFG
from omni.isaac.lab.managers import EventTermCfg as EventTerm
from omni.isaac.lab.managers import ObservationGroupCfg as ObsGroup
from omni.isaac.lab.managers import ObservationTermCfg as ObsTerm
from omni.isaac.lab.managers import RewardTermCfg as RewTerm
from omni.isaac.lab.managers import SceneEntityCfg
from omni.isaac.lab.managers import TerminationTermCfg as DoneTerm
from omni.isaac.lab.utils import configclass
from omni.isaac.lab.utils.noise import AdditiveUniformNoiseCfg as Unoise
import omni.isaac.lab_tasks.manager_based.locomotion.velocity.mdp as mdp


base_command = []


def constant_commands(env: RLTaskEnvCfg) -> torch.Tensor:
def constant_commands(env: ManagerBasedRLEnvCfg) -> torch.Tensor:
global base_command
"""The generated command from the command generator."""
tensor_lst = torch.tensor([0, 0, 0], device=env.device).repeat(env.num_envs, 1)
Expand Down Expand Up @@ -235,7 +235,7 @@ class EventCfg:


@configclass
class LocomotionVelocityRoughEnvCfg(RLTaskEnvCfg):
class LocomotionVelocityRoughEnvCfg(ManagerBasedRLEnvCfg):
"""Configuration for the locomotion velocity-tracking environment."""
# Scene settings
scene: MySceneCfg = MySceneCfg(num_envs=4096, env_spacing=2.5)
Expand Down
10 changes: 5 additions & 5 deletions logs/rsl_rl/unitree_go2_rough/2024-04-06_02-37-07/git/orbit.diff
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: source/extensions/omni.isaac.orbit_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
modified: source/extensions/omni.isaac.lab_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
modified: source/standalone/workflows/rsl_rl/play.py

no changes added to commit (use "git add" and/or "git commit -a")


--- git diff ---
diff --git a/source/extensions/omni.isaac.orbit_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py b/source/extensions/omni.isaac.orbit_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
diff --git a/source/extensions/omni.isaac.lab_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py b/source/extensions/omni.isaac.lab_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
index 7de557b..f027b3d 100644
--- a/source/extensions/omni.isaac.orbit_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
+++ b/source/extensions/omni.isaac.orbit_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
@@ -15,7 +15,7 @@ from omni.isaac.orbit_tasks.utils.wrappers.rsl_rl import (
--- a/source/extensions/omni.isaac.lab_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
+++ b/source/extensions/omni.isaac.lab_tasks/omni/isaac/orbit_tasks/locomotion/velocity/config/unitree_go2/agents/rsl_rl_cfg.py
@@ -15,7 +15,7 @@ from omni.isaac.lab_tasks.utils.wrappers.rsl_rl import (
@configclass
class UnitreeGo2RoughPPORunnerCfg(RslRlOnPolicyRunnerCfg):
num_steps_per_env = 24
Expand Down
Loading

0 comments on commit ac1275a

Please sign in to comment.