This repository provides a modular framework for training reinforcement learning (RL) agents on the Kinova Gen3 robot using Isaac Lab, and deploying trained models either in Isaac Sim, or on the real robot via ROS2.
Built as a standalone Isaac Lab extension, it allows isolated development.
Important
The Sim2Real pipeline runs entirely with ROS2 and does not require Isaac Lab or Isaac Sim to be installed. And for convenience, pre-trained models are provided so you can get started immediately without training.
Section | What you’ll find |
---|---|
🛠️ Installation | How to install Isaac Lab, clone this repo, and install the Python package. |
🚀 Training & Basic Testing | Commands to train a reach-task policy with rsl_rl or rl_games and replay it in Isaac Lab. |
🤖 Sim-to-Real Deployment (ROS 2) | Step-by-step instructions to test on fake hardware, then execute the exact same policy on the physical Kinova Gen3. |
🌟 Acknowledgements | Credits to Isaac Lab, Kinova, community help, and INIT Lab. |
kinova_demo.mp4
- Install Isaac Lab by following the official installation guide (conda recommended).
- Clone this repo outside the
IsaacLab
directory. - Install from the repository:
python -m pip install -e source/gen3
You can train a policy on the Kinova Gen3 Reach Task using either rsl_rl
or rl_games
library:
python scripts/rsl_rl/train.py --task Gen3-Reach-v0
After training, a quick way to validate the behavior is to use play.py
:
python scripts/rsl_rl/play.py --task Gen3-Reach-v0
This helps confirm that the learned policy performs as expected in Isaac Lab before attempting transfer.
The Sim2Real pipeline focuses on deploying trained reinforcement learning policies directly onto the real Kinova Gen3 robot using a minimal ROS2-based interface, with no dependency on Isaac Lab or Isaac Sim at runtime.
You can first try to simulate the Kinova Gen3 in ROS2 using fake hardware mode:
ros2 launch kortex_bringup gen3.launch.py robot_ip:=yyy.yyy.yyy.yyy use_fake_hardware:=true
To test movement commands, send a simple joint trajectory:
ros2 topic pub /joint_trajectory_controller/joint_trajectory trajectory_msgs/JointTrajectory "{
joint_names: [joint_1, joint_2, joint_3, joint_4, joint_5, joint_6, joint_7],
points: [
{ positions: [0, 0, 0, 0, 0, 0, 0], time_from_start: { sec: 1 } },
]
}" -1
Run the Reach Task with the trained policy to go to a certain predefined position:
python3 scripts/sim2real/run_task_reach.py
The next step is to connect the same interface to the real Kinova Gen3 and execute the learned Reach Task in real-world conditions — using the exact same model and runtime logic validated in simulation.
For that you'll run:
ros2 launch kortex_bringup gen3_lite.launch.py robot_ip:=192.168.1.10
And in the same way as simulation, in another terminal:
python3 scripts/sim2real/run_task_reach.py
Now your robot should be alternating between three positions.
- Isaac Lab team & contributors
- Johnson Sun
- Kinova Robotics
- INIT Lab
- Website
- David St-Onge
- Augustin Nguon