百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
U

unitree_mujoco

> 编程语言
开源

简介 Unitree mujoco UnitreeMujoco 是基于 Unitree SDK2 和 mujoco 开发的仿真器。用户可以轻松集成控制器和仿真器,实现高效的仿真和控制。

1.1K stars0 点赞0 次浏览
访问官网GitHub

工具介绍

简介 Unitree mujoco UnitreeMujoco 是基于 Unitree SDK2 和 mujoco 开发的仿真器。用户可以轻松集成控制器和仿真器,实现高效的仿真和控制。

Introduction

Unitree mujoco

unitree_mujoco is a simulator developed based on Unitree sdk2 and mujoco. Users can easily integrate the control programs developed with Unitree_sdk2, unitree_ros2, and unitree_sdk2_python into this simulator, enabling a seamless transition from simulation to physical development. The repository includes two versions of the simulator implemented in C++ and Python, with a structure as follows:

Directory Structure

  • simulate: Simulator implemented based on unitree_sdk2 and mujoco (C++, recommended)
  • simulate_python: Simulator implemented based on unitree_sdk2_python and mujoco (Python)
  • unitree_robots: MJCF description files for robots supported by unitree_sdk2
  • terrain_tool: Tool for generating terrain in simulation scenarios
  • example: Example programs

Supported Unitree sdk2 Messages:

Current version only supports low-level development, mainly used for sim to real verification of controller

  • LowCmd: Motor control commands
  • LowState: Motor state information
  • SportModeState: Robot position and velocity data
  • IMUState: Torso IMU state at rt/secondary_imu topic (G1 only)

Note:

  1. The numbering of the motors corresponds to the actual robot hardware. Specific details can be found in the Unitree documentation.
  2. In the actual robot hardware, the SportModeState message is not readable after the built-in motion control service is turned off. However, the simulator retains this message to allow users to utilize the position and velocity information for analyzing the developed control programs.

Related links

  • unitree_sdk2
  • unitree_sdk2_python
  • unitree_ros2
  • Unitree Doc
  • Mujoco Doc

Message (DDS idl) type description

  • Unitree Go2, B2, H1, B2w, Go2w robots use unitree_go idl for low-level communication.
  • Unitree G1, H1-2, and AS2 robots use unitree_hg idl for low-level communication.

Installation

C++ Simulator (simulate)

1. Dependencies

sudo apt install libyaml-cpp-dev libspdlog-dev libboost-all-dev libglfw3-dev

unitree_sdk2

It is recommended to install unitree_sdk2 in /opt/unitree_robotics path.

git clone https://github.com/unitreerobotics/unitree_sdk2.git
cd unitree_sdk2/
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/unitree_robotics
sudo make install

For more details, see: https://github.com/unitreerobotics/unitree_sdk2

mujoco

Download the mujoco release, and extract it to the ~/.mujoco directory;

cd unitree_mujoco/simulate/
ln -s ~/.mujoco/mujoco-3.3.6 mujoco

2. Compile unitree_mujoco

cd unitree_mujoco/simulate
mkdir build && cd build
cmake ..
make -j4

3. Test:

Run:

./unitree_mujoco -r go2 -s scene_terrain.xml

You should see the mujoco simulator with the Go2 robot loaded. In a new terminal, run:

./test

The program will output the robot's pose and position information in the simulator, and each motor of the robot will continuously output 1Nm of torque.

Note: The testing program sends the unitree_go message. If you want to test G1 robot, you need to modify the program to use the unitree_hg message.

AS2 simulation

AS2 uses the unitree_hg low-level messages. The simulator selects that IDL automatically when -r as2 is used; -t 1 can be supplied to make the choice explicit. From simulate/build, start the flat scene with:

./unitree_mujoco -r as2 -s plane_terrain.xml -t 1

Use scene_terrain.xml instead for the rough-terrain scene.

Python Simulator (simulate_python)

1. Dependencies

unitree_sdk2_python

cd ~
sudo apt install python3-pip
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip3 install -e .

If you encounter an error during installation:

Could not locate cyclonedds. Try to set CYCLONEDDS_HOME or CMAKE_PREFIX_PATH

Refer to: https://github.com/unitreerobotics/unitree_sdk2_python

mujoco-python

pip3 install mujoco

joystick

pip3 install pygame

2. Test

cd ./simulate_python
python3 ./unitree_mujoco.py

You should see the mujoco simulator with the Go2 robot loaded. In a new terminal, run:

python3 ./test/test_unitree_sdk2.py

The program will output the robot's pose and position information in the simulator, and each motor of the robot will continuously output 1Nm of torque.

Note: The testing program sends the unitree_go message. If you want to test G1 robot, you need to modify the program to use the unitree_hg message.

Usage

1. Simulation Configuration

C++ Simulator

The configuration file for the C++ simulator is located at /simulate/config.yaml:

…

Python Simulator

The configuration file for the Python simulator is located at /simulate_python/config.py:

…

Joystick

The simulator will use an Xbox or Switch gamepad to simulate the wireless controller of the robot. The button and joystick information of the wireless controller will be published through "rt/wireless_controller" topic. use_joystick/USE_JOYSTICK in config.yaml/config.py needs to be set to 0, when there is no gamepad. If your gamepad is not in Xbox or Switch layout, you can modify it in the source code (The button and joystick IDs can be determined using jstest):

In simulate/src/unitree_sdk2_bridge/unitree_sdk2_bridge.cc:

…

In simulate_python/unitree_sdk2_bridge.py:

if js_type == "xbox":
    self.axis_id = {
        "LX": 0,  # Left stick axis x
        "LY": 1,  # Left stick axis y
        "RX": 3,  # Right stick axis x
        "RY": 4,  # Right stick axis y
        "LT": 2,  # Left trigger
        "RT": 5,  # Right trigger
        "DX": 6,  # Directional pad x
        "DY": 7,  # Directional pad y
    }

    self.button_id = {
        "X": 2,
        "Y": 3,
        "B": 1,
        "A": 0,
        "LB": 4,
        "RB": 5,
        "SELECT": 6,
        "START": 7,
    }

Elastic band for humanoid

Consider humanoid robots are not suitable for starting in ground, a virtual elastic band was designed to simulate the lifting and lowering of humanoid robots. Setting enable_elastic_mand/ENABLE_ELSTIC_BAND=1 can enable the virtual elastic band. After loading the robot, press' 9 'to activate or release the strap, press' 7' to lower the robot, and press' 8 'to lift the robot.

2. Terrain Generation Tool

We provide a tool to parametrically create simple terrains in the mujoco simulator, including stairs, rough ground, and height maps. The program is located in the terrain_tool folder. For specific usage instructions, refer to the README file in the terrain_tool folder.

3. Sim to Real

The example folder contains simple examples of using different interfaces to make the Go2 robot stand up and then lie down. These examples demonstrate how to implement the transition from simulation to reality using interfaces provided by Unitree. Here is an explanation of each folder name:

  • cpp: Based on C++, using unitree_sdk2 interface
  • python: Based on Python, using unitree_sdk2_python interface
  • ros2: Based on ROS2, using unitree_ros2 interface

unitree_sdk2

  1. Compile
cd example/cpp
mkdir build && cd build
cmake ..
make -j4
  1. Run:
./stand_go2 # Control the robot in the simulation (make sure the Go2 simulation scene has been loaded)
./stand_go2 enp3s0 # Control the physical robot, where enp3s0 is the name of the network card connected to the robot
  1. Sim to Real
if (argc Init(1, "lo");
}
else
{   
    // Otherwise, use the specified network card
    ChannelFactory::Instance()->Init(0, argv[1]);
}

unitree_sdk2_python

  1. Run
python3 ./stand_go2.py # Control the robot in the simulation (make sure the Go2 simulation scene has been loaded)
python3 ./stand_go2.py enp3s0 # Control the physical robot, where enp3s0 is the name of the network card connected to the robot
  1. Sim to Real
if len(sys.argv) < 2:
    // If no network card is input, use the simulated domain id and the local network card
    ChannelFactoryInitialize(1, "lo")
else:
    // Otherwise, use the specified network card
    ChannelFactoryInitialize(0, sys.argv[1])

unitree_ros2

  1. Compile First, ensure that the unitree_ros2 environment has been properly configured, see unitree_ros2.
source ~/unitree_ros2/setup.sh
cd example/ros2
colcon build
  1. Run simulation
source ~/unitree_ros2/setup_local.sh # Use the local network card
export ROS_DOMAIN_ID=1 # Modify the domain id to match the simulation
./install/stand_go2/bin/stand_go2 # Run
  1. Run real robot
source ~/unitree_ros2/setup.sh # Use the network card connected to the robot
export ROS_DOMAIN_ID=0 # Use the default domain id
./install/stand_go2/bin/stand_go2 # Run

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C++

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言