unitree_mujoco/readme_zh.md

7.3 KiB
Raw Blame History

介绍

Unitree mujoco

unitree_mujoco 是基于 Unitree sdk2mujoco 开发的仿真器。用户使用 Unitree_sdk2unitree_ros2unitree_sdk2_python 开发的控制程序可以方便地接入该仿真器,实现仿真到实物的开发流程。仓库别基于 c++ 和 python 实现了两个版本的仿真器, 其结构大致如下图所示:

目录结构

  • simulate: 基于 unitree_sdk2 和 mujoco (c++) 实现的仿真器
  • simulate_python: 基于 unitree_sdk2py 和 mujoco (python) 实现的仿真器
  • unitree_robots: unitree_sdk2 支持的机器人 mjcf 描述文件
  • terrain_tool: 仿真场景地形生成工具
  • example: 例程

支持的 Unitree sdk2 消息:

  • LowCmd: 电机控制指令
  • LowState:电机状态
  • SportModeState:机器人位置和速度

注:

  1. 电机的编号与机器人实物一致,具体可参考 Unitree 文档
  2. 在机器人实物上关闭自带的运控服务后, SportModeState 消息是无法读取的。仿真中保留了这一消息,便于用户利用位置和速度信息分析所开发的控制程序。

相关链接

安装

c++ 仿真器 (simulate)

1. 依赖

unitree_sdk2

git clone https://github.com/unitreerobotics/unitree_sdk2.git
cd unitree_sdk2/
chmod +x ./install.sh
sudo ./install.sh

详细见:https://github.com/unitreerobotics/unitree_sdk2

mujoco >= 3.0.0

sudo apt install libglfw3-dev libxinerama-dev libxcursor-dev libxi-dev
git clone https://github.com/google-deepmind/mujoco.git
mkdir build && cd build
cmake ..
make -j4
sudo make install

测试:

simulate

弹出 mujoco 仿真器表示安装成功。

yaml-cpp

yaml-cpp主要用于配置文件的读取

sudo apt install libyaml-cpp-dev

2. 编译 unitree_mujoco

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

3. 测试:

运行:

./unitree_mujoco

可以看到加载了 Go2 机器人的 mujoco 仿真器。

在新的终端中运行:

./test

程序会输出机器人在仿真器中的姿态和位置信息,同时机器人的每个电机都会持续输出 1Nm 的转矩。

Python 仿真器 (simulate_python)

1. 依赖

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 .

如果遇到问题:

Could not locate cyclonedds. Try to set CYCLONEDDS_HOME or CMAKE_PREFIX_PATH

参考: https://github.com/unitreerobotics/unitree_sdk2_python

mujoco-python

pip3 install mujoco

joystick

pip3 install pygame

2. 测试

cd ./simulate_python
python3 ./unitree_mujoco.py

在新终端运行

python3 ./test/test_unitree_sdk2.py

程序会输出机器人在仿真器中的姿态和位置信息,同时机器人的每个电机都会持续输出 1Nm 的转矩。

使用

1. 仿真配置

c++ 仿真器

c++ 仿真器的配置文件位于 /simulate/config.yaml 中:

# 仿真器加载的机器人名称
# "go2", "b2", "b2w", "h1"
robot: "go2"

# 机器人仿真仿真场景文件
# 以 go2 为例,指的是/unitree_robots/go2/文件夹下的 scene.xml 文件
robot_scene: "scene.xml" 

# dds domain id最好与实物(实物上默认为 0)区分开
domain_id: 1 
# 网卡名称, 对于仿真建议使用本地回环 "lo"
interface: "lo"

# 是否输出机器人连杆、关节、传感器等信息1为输出
print_scene_information: 1

# 是否使用虚拟挂带, 1 为启用
# 主要用于模拟 H1 机器人初始化挂起的过程 
enable_elastic_band: 0 # For H1 

python 仿真器

python 仿真器的配置文件位于 /simulate_python/config.py 中:

# 仿真器加载的机器人名称
# "go2", "b2", "b2w", "h1"
ROBOT = "go2" 

# 机器人仿真仿真场景文件
ROBOT_SCENE = "../unitree_robots/" + ROBOT + "/scene.xml" # Robot scene

# dds domain id最好与实物(实物上默认为 0)区分开
DOMAIN_ID = 1 # Domain id
# 网卡名称, 对于仿真建议使用本地回环 "lo"
INTERFACE = "lo" # Interface 

# 是否输出机器人连杆、关节、传感器等信息True 为输出
PRINT_SCENE_INFORMATION = True 

# 是否使用虚拟挂带, 1 为启用
# 主要用于模拟 H1 机器人初始化挂起的过程 
ENABLE_ELASTIC_BAND = False 

# 仿真步长 单位(s)
# 为保证仿真的可靠性,需要大于 viewer.sync() 渲染一次所需要的时间
SIMULATE_DT = 0.003  

# 可视化界面的运行步长0.02 对应 50fps/s
VIEWER_DT = 0.02 

2. 地形生成工具

我们提供了一个在 mujcoc 仿真器中参数化创建简单地形的工具,支持添加楼梯、杂乱地面、高程图等地形。程序位于 terrain_tool 文件夹中。具体的使用方法见 terrain_tool 文件夹下的 readme 文件。

3. sim to real

example 文件夹下提供了使用不同接口实现 Go2 机器人站起再趴下的简单例子。这些例子简演示了如何使用 Unitree 提供的接口实现仿真到实物的实现。下面是每个文件夹名称的解释:

  • cpp: 基于 C++, 使用 unitree_sdk2 接口
  • python: 基于 python,使用 unitree_sdk2_python 接口
  • ros2: 基于ros2,使用 unitree_ros2 接口

unitree_sdk2

  1. 编译运行
cd example/cpp
mkdir build && cd build
cmake ..
make -j4

运行:

./stand_go2 # 控制仿真中的机器人 (需确保 Go2 仿真场景已经加载)
./stand_go2 enp3s0 # 控制机器人实物,其中 enp3s0 为机器人所连接的网卡名称
  1. sim to real
if (argc < 2)
{   
    // 如果没有输入网卡,使用仿真的 domian id 和 网卡(本地)
    ChannelFactory::Instance()->Init(1, "lo");
}
else
{   
    // 否则使用指定的网卡
    ChannelFactory::Instance()->Init(0, argv[1]);
}

unitree_sdk2_python

  1. 运行:
python3 ./stand_go2.py # 控制仿真中的机器人 (需确保 Go2 仿真场景已经加载)
python3 ./stand_go2.py enp3s0 # 控制机器人实物,其中 enp3s0 为机器人所连接的网卡名称
  1. sim to real
if len(sys.argv) <2:
    // 如果没有输入网卡使用仿真的 domian id  网卡(本地)
    ChannelFactortyInitialize(1, "lo")
else:
    // 否则使用指定的网卡
    ChannelFactortyInitialize(0, sys.argv[1])

unitree_ros2

  1. 编译安装 首先确保已经正确配置好 unitree_ros2 环境,见 unitree_ros2
source ~/unitree_ros2/setup.sh
cd example/ros2
colcon build
  1. 运行仿真
source ~/unitree_ros2/setup_local.sh # 使用本地网卡
export ROS_DOMAIN_ID=1 # 修改domain id 与仿真一致
./install/stand_go2/bin/stand_go2 # 运行
  1. 运行实物
source ~/unitree_ros2/setup.sh # 使用机器人连接的网卡
export ROS_DOMAIN_ID=0 # 使用默认的 domain id 
./install/stand_go2/bin/stand_go2 # 运行