本仓库是一个基于 ROS 2 的多包工作空间,包含机器人控制器、硬件桥接、仿真桥接(Mujoco / Gazebo / Webots)、交互控制以及机器人模型描述。控制器支持基于有限状态机的策略,并可加载 ONNX 强化学习模型进行推理。
同时提供 Docker 镜像与启动说明,将依赖与配置固化为可复现环境,便于快速部署、复现实验与跨设备一致运行(sim2sim)。
- 强化学习控制器(支持 ONNX 推理),基于有限状态机组织控制逻辑
ros2_control硬件桥接,连接真实机器人驱动库Mujoco/Gazebo/Webots三种仿真环境桥接与示例世界- 键盘控制与遥控(ELRS)交互模块
- 多机器人模型与描述(
tita、d1(四轮足)、d1h(双轮足))
controller/rl_controller:基于ros2_control框架强化学习控制器hardware:hardware_bridge为ros2_control硬件桥接节点与启动文件,tita_robot真实机器人底层驱动接口interaction:keyboard_controller键盘交互节点,teleop_command遥控手柄交互节点simulation:Mujoco、Gazebo、Webots仿真桥接ros_utils: 主要为ros话题名称相关urdfs:机器人模型描述文件(URDF/XACRO/Mujoco等)
在使用hardware之前,请检查当前d1-ros2 软件版本,使用dpkg -l d1-ros2指令检查,如果当前软件版本为4月01号的,则使用compress_v1分支代码,切记勿使用main分支,否则失控,同时使用前注意安全。以下compress_v1分支使用方法:
git clone https://github.com/DDTRobot/ddt_ros2_control/tree/compress_v1
cd ddt_ros2_control
#在编译hardware_bridge前,source /opt/d1-ros2/setup.bash
source /opt/d1_ros2/setup.bash
#确保前后机无其他ros2节点在运行,然后启动硬件运控服务
colcon build --symlink-install --packages-up-to rl_controller hardware_bridge
sudo systemctl stop d1_bringup.service
ros2 launch rl_controller hw.launch.py robot:=d1- 安装onnx推理引擎
# 根据你的系统架构选择x64或者aarch64
wget https://github.com/microsoft/onnxruntime/releases/download/v1.10.0/onnxruntime-linux-x64-1.10.0.tgz
tar xvf onnxruntime-linux-x64-1.10.0.tgz
sudo cp -a onnxruntime-linux-x64-1.10.0/include/* /usr/include
sudo cp -a onnxruntime-linux-x64-1.10.0/lib/* /usr/lib- Ubuntu 22.04, ros2 humble, gazebo classic, webots R2025a 安装好ros2 humble后,安装以下依赖:
sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers- 根据需要安装仿真环境所需的依赖
webots
sudo apt install ros-humble-webots-ros2 ros-humble-webots-ros2-controlgazebo
sudo apt install ros-humble-gazebo-ros ros-humble-gazebo-ros2-controlmujoco见下方构建部分
以下命令展示了所有可行的编译命令,根据你的实际需要选择必要的组件进行编译。
# 创建并进入工作空间
mkdir -p ~/ddt_ros2_ws && cd ~/ddt_ros2_ws
# 将本仓库放置于 ~/ddt_ros2_ws/
mv ddt_ros2 src
# 如需使用mujoco,执行下方
git clone -b 3.3.0 https://github.com/google-deepmind/mujoco.git
# 构建
cd ~/ddt_ros2_ws
# 编译rl_controller
colcon build --symlink-install --packages-up-to rl_controller
# 编译仿真环境
colcon build --symlink-install --packages-up-to webots_bridge # 可替换为gazebo_bridge, mujoco_bridge
# 编译机器人模型描述
colcon build --symlink-install --packages-up-to d1_description d1h_description
# 编译硬件桥接
colcon build --symlink-install --packages-up-to hardware_bridge
# 载入环境
source install/setup.bash- Webots 仿真(地形可选
empty_world、stairs、uneven):
ros2 launch rl_controller sim_webots.launch.py robot:=d1 terrain:=empty_world- Gazebo 仿真:
ros2 launch rl_controller sim_gazebo.launch.py robot:=d1h # d1暂时加载不出来- Mujoco 仿真:
在仿真
d1时,需要手动将d1h_description中的meshes复制到d1_description中,并且修改d1_description/CMakeLists.txt中,将meshes注释取消。然后重新编译d1_description
ros2 launch rl_controller sim_mujoco.launch.py robot:=d1硬件桥接依赖真实机器人驱动库(见 hardware/tita_robot/lib/*/libtita_robot.so)。需要将代码拷贝在机器上,需要配置硬件编译需要的环境,例如colcon后,再进行编译。
sudo apt install python3-colcon-common-extensions编译运行在硬件上运行运动控制必要的包
colcon build --symlink-install --packages-up-to rl_controller hardware_bridge- 启动控制器(硬件环境): 在启动有硬件环境的机器上,需要手动关闭已经启动的运控服务:
sudo systemctl stop d1_bringup.service如果运行在TITA上,需要注意:
TITA上电后运控板默认进入Ready Mode,需要运行此start.bash,让运控板进入 Direct mode
确保无其他ros2节点在运行,然后启动硬件运控服务:
ros2 launch rl_controller hw.launch.py robot:=d1需编译下述功能包来启用键盘控制与遥控(ELRS)交互模块
colcon build --symlink-install --packages-up-to teleop_command keyboard_controller
source install/setup.bash- 键盘控制:
ros2 run keyboard_controller keyboard_controller_node- 遥控(ELRS):
ros2 launch teleop_command teleop_command.launch.py- 控制器参数与模型位于:
controller/rl_controller/config/<robot>/controllers.yaml- ONNX 模型示例:
controller/rl_controller/config/tita/stand.onnxcontroller/rl_controller/config/d1/height_cargo_out.onnx
- 更新控制策略时,修改对应
controllers.yaml与 ONNX 文件路径 - 状态机接口与实现:
controller/rl_controller/include/rl_controller/fsm/*与src/fsm/*
- Webots未找到: 的安装路径要在环境变量中,例如:
export WEBOTS_HOME=/usr/lib/webots- Mujoco 未找到:确认
mujoco已安装并设置MUJOCO_DIR - 控制器未加载:检查
controller_manager日志与controllers.yaml配置。 - 模型描述加载失败:确认
robot:=<name>与对应*_description包存在且可用 - 如果在TITA上遇到如下编译问题,可以尝试把代码中黄框部分去掉

#include "rl_controller/rl_controller_parameters.hpp"
改成#include "rl_controller_parameters.hpp"
各子包的许可证可能不同,请参考对应 package.xml 中的 license 字段。