1 环境依赖
# 本项目依赖 ros2 humble 环境,如果您还没有具备对应环境,可参考下方的命令进行安装
# wget http://fishros.com/install -O fishros && chmod +x ./fishros && ./fishros
sudo apt install libgflags-dev
sudo apt install libyaml-cpp-dev
# 以下依赖需要上位机有 ros2 humble 环境
sudo apt install ros-humble-joy
sudo apt install ros-humble-grid-map-msgs
sudo apt install ros-humble-grid-map-ros
sudo apt install ros-humble-rmw-cyclonedds-cpp
# 下载 onnxruntime
# 参考下载链接:https://github.com/microsoft/onnxruntime/releases/download/v1.23.2/onnxruntime-linux-x64-1.23.2.tgz
# 1. 解压文件
tar -zxvf onnxruntime-linux-x64-1.23.2.tgz
# 2. 拷贝头文件至系统目录
sudo mkdir -p /usr/local/include/onnxruntime
sudo cp -r onnxruntime-linux-x64-1.23.2/include/* /usr/local/include/onnxruntime/
# 3. 拷贝库文件到系统目录
sudo cp -r onnxruntime-linux-x64-1.23.2/lib/* /usr/local/lib/
sudo mkdir -p /usr/local/lib64
sudo cp -r onnxruntime-linux-x64-1.23.2/lib/* /usr/local/lib64/
# 4. 更新动态库缓存
sudo ldconfig
2 快速使用
2.1 运控 example 节点启动
进入工程目录
cd x2_rl_deploy
编译项目
colcon build
加载环境变量
source /opt/ros/humble/setup.bash
source install/local_setup.bash
运行运控 example
ros2 run x2_rl_deploy_controller x2_rl_deploy_controller
2.2 仿真节点启动
进入工程目录
cd x2_rl_deploy/x2_rl_deploy_mujoco
加载环境变量
source /opt/ros/humble/setup.bash
source ../install/local_setup.bash
运行 仿真环境
cd bin
./start_sim.sh -s
请在命令行选择 0: lx2501_3_t2d5
2.3 遥控器节点启动
在执行下述命令前,请先使用usb-c连接线,将您的 PS5 手柄连接到上位机
启动遥控节点
source /opt/ros/humble/setup.bash
ros2 run joy joy_node
运行 RL 模型示例
启动上述的 RL 部署 example、仿真和遥控器三个节点后即可运行 RL 模型示例:
切换至位控模式(可选)
调整好机器人位姿后,按下 PS5 手柄的 🟥 进入 RL 部署模式示例
结束后可按下 ⭕️ 进入阻尼模式
调整仿真中机器人位姿的方式:
[建议优先选用该方法]
Backspace可重置 mujoco 中机器人的位置双击选中目标关节后,使用
ctrl + 鼠标左键可旋转目标关节双击选中目标关节后,使用
ctrl + 鼠标右键可拖拽目标关节
2.4 按键映射
❌ - PASSIVE_DEFAULT(零力矩模式)
⭕️ - DAMPING_DEFAULT(阻尼模式)
🔺 - JOINT_DEFAULT (位控模式)
🟥 - RL_DEFAULT (RL 部署模式示例)
零力矩模式为默认模式阻尼模式为安全模式建议先切换到
位控模式后进入RL 部署模式示例
3 目录结构
x2_rl_deploy
├── aimdk_msgs/ # 自定义消息包
│ ├── CMakeLists.txt
│ ├── interface/
│ └── package.xml
├── format.sh
├── rl_deploy_topology.png
├── README.md # 本文件
├── x2_rl_deploy_controller/
│ ├── CMakeLists.txt
│ ├── config/ # 配置项目录
│ │ ├── motion_control.yaml # 运动控制配置文件(包含初始位姿与 RL 示例所需配置)
│ │ └── rl_model/ # ONNX 模型文件目录
│ ├── include/
│ │ └── x2_rl_deploy_controller/
│ ├── package.xml
│ └── src/ # 源码目录
│ ├── main.cc # 程序入口
│ ├── motion_control_node.cc # 运控节点实现
│ └── predictor/ # ONNX 推理器
└── x2_rl_deploy_mujoco/
├── bin/ # 仿真可执行文件目录
├── COLCON_IGNORE
├── configuration/ # mujoco 相关配置文件
├── lib/
└── version.json # 版本信息
4 模型部署
下文中使用
<model_name>.onnx表示不同的模型运行前请将训练好的onnx模型文件拷贝到
x2_rl_deploy_controller/config/rl_model,并替换x2_rl_deploy_controller/config/motion_control.yaml中对应路径
rl_config:
policy:
type: "onnx"
device: "cpu"
path: "x2_rl_deploy_controller/config/rl_model/<model_name>.onnx"
调整代码以适配您的 policy
# 可按需自定义 RlDefault() 函数以适配您的 policy
x2_rl_deploy_controller/src/motion_control_node.cc
5 通讯协议
5.1 通信拓扑

5.2 关节状态订阅话题
Joint |
Publisher |
Subscription |
Topic name |
Data type |
Frequency (Hz) |
|---|---|---|---|---|---|
手臂 |
hal_ethercat |
mc |
|
|
1000 |
腰部 |
hal_ethercat |
mc |
|
|
1000 |
腿部 |
hal_ethercat |
mc |
|
|
1000 |
头部 |
hal_ethercat |
mc |
|
|
1000 |
5.3 IMU 状态订阅话题
Joint |
Publisher |
Subscription |
Topic name |
Data type |
Frequency (Hz) |
|---|---|---|---|---|---|
胸腔 |
hal_imu |
mc |
|
|
500 |
髋部 |
hal_imu |
mc |
|
|
500 |
5.4 控制指令发布话题
Joint |
Publisher |
Subscription |
Topic name |
Data type |
Frequency (Hz) |
|---|---|---|---|---|---|
手臂 |
mc |
hal_ethercat |
|
|
500 |
腰部 |
mc |
hal_ethercat |
|
|
500 |
腿部 |
mc |
hal_ethercat |
|
|
500 |
头部 |
mc |
hal_ethercat |
|
|
500 |