tron1_ctrl_ros2 是针对 Tron1 双足/轮足机器人的 ROS2 控制包。它基于 WebSocket SDK 封装,提供了标准的 ROS2 接口来控制机器人的运动、切换状态、设置参数以及获取传感器数据。
- WebSocket 通信:自动连接机器人,支持断线重连和自动发现序列号 (ACCID)。
- 运动控制:通过
/cmd_vel话题控制机器人移动(支持全向移动)。 - 状态反馈:实时发布 IMU (
/imu)、里程计 (/odom) 和机器人本体状态 (/robot_status)。 - 模式切换:提供完整的服务接口控制站立、行走、蹲下、恢复、急停等。
- 高级功能:支持设置身高、灯效、楼梯模式、原地踏步模式等。
在编译之前,请确保已安装以下系统依赖:
sudo apt-get update
sudo apt-get install -y libboost-all-dev libwebsocketpp-dev nlohmann-json3-devROS2 依赖项(通常随 ROS2 安装):
rclcppgeometry_msgssensor_msgsnav_msgsstd_msgsstd_srvs
在您的 ROS2 工作空间根目录下(例如 ~/tron1_ws):
cd ~/tron1_ws
colcon build --packages-select tron1_ctrl_ros2
source install/setup.bashLaunch 文件预置了默认参数:
ros2 launch tron1_ctrl_ros2 tron1.launch.pyros2 run tron1_ctrl_ros2 tron1_node --ros-args -p server_uri:="ws://10.192.1.2:5000"可以在 Launch 文件中修改这些参数:
/cmd_vel(geometry_msgs/msg/Twist)- 控制机器人移动。
linear.x: 前进/后退linear.y: 左右横移angular.z: 旋转
/imu(sensor_msgs/msg/Imu)- 发布机器人的 IMU 数据(四元数、角速度、线加速度)。
/odom(nav_msgs/msg/Odometry)- 发布机器人的里程计数据(仅在轮足模式下有效)。
/robot_status(tron1_ctrl_ros2/msg/RobotStatus)- 发布机器人的详细状态信息。
所有服务均为同步调用,即会等待机器人确认执行结果后才返回。
/stand_mode: 切换到站立模式。/walk_mode: 切换到行走模式。/sit_down: 蹲下。/recover: 摔倒后自动恢复/爬起。/emergency_stop: 紧急停止(切断电机输出)。
/stair_mode: 开启/关闭楼梯模式(仅轮足)。/marktime_mode: 开启/关闭原地踏步模式(仅双足)。/enable_odom: 开启/关闭里程计推送。/enable_imu: 开启/关闭 IMU 推送。
/set_base_height(tron1_ctrl_ros2/srv/SetBaseHeight)- 调整机器人身高。
direction:1(升高),-1(降低)。
/set_light_effect(tron1_ctrl_ros2/srv/SetLightEffect)- 设置灯光效果。
effect_id: 1-21 (详见.srv文件定义或下方列表)。
std_msgs/Header header
string accid # 序列号
string sw_version # 软件版本
string imu_status # IMU 健康状态
string camera_status # 相机健康状态
string motor_status # 电机健康状态
int8 battery # 电池电量 (0-100)
string status # 当前运行状态 (WALK, STAND, SIT, ERROR...)
int8 direction # 1: up, -1: down
---
bool success
string message
# 常量定义 (部分示例)
uint8 STATIC_RED = 1
uint8 STATIC_GREEN = 2
...
uint8 FAST_FLASH_WHITE = 21
uint8 effect_id
---
bool success
string message
控制灯光为红色常亮:
ros2 service call /set_light_effect tron1_ctrl_ros2/srv/SetLightEffect "{effect_id: 1}"让机器人站起来:
ros2 service call /stand_mode std_srvs/srv/Trigger查看机器人状态:
ros2 topic echo /robot_status