This package allows low-level (or joint-level), ROS2 control of a Unitree Go2 quadruped robot being simulated in Isaac Sim. This package is built on top of IsaacLab. This package is meant to emulate the low-level control mode of the Go2. Here, the robot is controlled by specifying joint position targets and gains to the topic /lowcmd
. In low-level control mode, sports mode is disabled, so only low-level readings (like joint angles, joint velocities, IMU, and the raw lidar cloud) are available on the /lowstate
and /utlidar/cloud
topics.
Tested With | Version |
---|---|
Ubuntu | 22.04 |
ROS2 | Humble |
Isaac Sim | 4.5.0 |
TODO:
Feature | |
---|---|
✅ | Joint position targets |
⬜ | Joint velocity targets |
✅ | Joint-level specification of Kp and Kd (proportional and derivative gain) |
❌ | Joint torque control |
✅ | Joint state and IMU |
✅ | Head LiDAR |
⬜ | Front camera |
⬜ | Terrain selection |
First, ensure ROS2 Humble is installed.
It is recommended to install Isaac Lab within a conda / miniconda environment. Create an environment:
conda create -n go2_isaac_ros2 python=3.10
conda activate go2_isaac_ros2
Then install IsaacLab per the their instructions.
Next, create a ROS2 workspace and clone this repository into the src
directory:
mkdir -p ~/go2_isaac_ros2_ws/src
cd ~/go2_isaac_ros2_ws/src
git clone https://github.com/CLeARoboticsLab/go2_isaac_ros2.git
You will also need to clone the Unitree ROS2 SDK into the src
directory:
cd ~/go2_isaac_ros2_ws/src
git clone https://github.com/unitreerobotics/unitree_ros2.git
Then build the workspace:
cd ~/go2_isaac_ros2_ws
source /opt/ros/humble/setup.bash
colcon build
First, start the simulator:
source ~/go2_isaac_ros2_ws/install/setup.bash
conda activate go2_isaac_ros2
ros2 launch go2_isaac_ros2 launch_sim.py
Controlling the robot within Isaac Sim is the same as with hardware. To control the robot, publish unitree_go.msg.LowCmd
messages to the /lowcmd
topic.
Similarly, to receive observations from the robot, subscribe to the /lowstate
and /utlidar/cloud
topics.
Note: /clock
is also published by this package to allow for time synchronization with the simulator. To synchronize ROS2 with the simulator, be sure to set the use_sim_time: true
parameter when launching all nodes.
This package was inspired by the go2_omniverse package by @abizovnuralem.