Quadruped Extension
About
The Quadruped Extension Extension is used to simulate 12-DOF quadrupeds such as the Unitree A1, Unitree Go1, and ANYbotics ANYmal C in Omniverse Isaac Sim. It also includes a basic 12-DOF quadruped controller suitable for walking on flat terrain. The Extension create A1 or Go1 robot in the Stage and use the controller provided or subscribe to a external controller through ROS.
This Extension is enabled by default. If it is ever disabled, it can be re-enabled from the Extension Manager by searching for omni.isaac.quadruped
.
API Documentation
See the API documentation for complete usage information.
Running the Example
Warning
The aim of the example is to demonstrate integration sensor, articulations, and quadruped simulation in Isaac Sim. There are known performance issues with the included quadruped controller, it is being investigated and will be improved in an upcoming release.
The following tutorials and examples showcase how to best use this extension:
Keyboard Mappings (for all examples):
Forward: NUM 8 or Up Arrow
Backward: NUM 2 or Down Arrow
Right: NUM 6 or Right Arrow
Left: NUM 4 or Left Arrow
Turn Left: NUM 7 or N
Turn Right: NUM 9 or M
Note
The default controller has not been optimized for sideways and backwards movement (i.e., moving to the left, right, or backward while facing forward), so commanding the robot with Right Arrow
, Left Arrow
, Down Arrow
will result in very slow changes in body position.
To run the Example:
Go to the top menu bar and click Isaac Examples > Quadruped.
Press the LOAD button to load the scene and start simulation.
Press the RESET button to reset the simulation to the initial state.
Press the Open Source Code button to view the source code. The source code illustrates how to create, add, and control the robot using the Python API.
Standalone Examples
Prerequisite
ROS noetic is required, and roscore
must be running for ROS-related standalone examples.
a1_standalone.py
This standalone example demonstrates a Unitree A1 robot trotting in a warehouse environment with the option to insert a list of waypoints and headings for the robot to follow. It may be run via the following command:
./python.sh standalone_examples/api/omni.isaac.quadruped/a1_standalone.py --waypoint standalone_examples/api/omni.isaac.quadruped/waypoints.json
The waypoint is specified in a json file format that contains “x”, “y” for global coordinates, and “rad” for the heading direction.
a1_direct_ros1_standalone.py
This standalone example demonstrates a Unitree A1 robot in a warehousing setting that subscribes to an external torque controller for joint torque control while publishing IMU, foot force, joint position, velocity, and body odometry information. It may be run via the following command:
./python.sh standalone_examples/api/omni.isaac.quadruped/a1_direct_ros1_standalone.py
a1_vision_ros1_standalone.py
This standalone example demonstrates a Unitree A1 robot in a custom scene publishing stereo ROS camera and IMU data for visual image odometry in ROS 1. Users can connect the isaac sim topics to an external ROS vision inertial odometry package for doing odometry. It may be run via the following command:
./python.sh standalone_examples/api/omni.isaac.quadruped/a1_vision_ros1_standalone.py
a1_vision_ros2_standalone.py
This standalone example demonstrates a Unitree A1 robot in a custom scene publishing stereo ROS2 camera data for visual image odometry in ROS 2. It may be run via the following command:
./python.sh standalone_examples/api/omni.isaac.quadruped/a1_vision_ros2_standalone.py
go1_ros1_standalone.py
This standalone example demonstrates a Unitree Go1 robot on the ground plane publishing foot position and foot forces, which can be plotted using external ROS packages. It may be run via the following command:
anymal_standalone.py
This standalone example demonstrates an ANYmal C robot that is controlled by a neural network policy. The rough terrain policy was trained in IsaacGym and takes as input the state of the robot, the commanded base velocity, and the surrounding terrain and outputs joint position targets. The example may be run via the following command:
./python.sh standalone_examples/api/omni.isaac.quadruped/anymal_standalone.py