轮臂手柄控制说明
概述
本文档说明如何使用手柄控制轮臂机器人,包括三种控制模式及其切换方式。
目前支持两种手柄:
- BT2Pro / BT2 手柄:通过USB连接,使用标准
joy_node驱动 - G12遥控器:通过SBUS接收器(CP2102串口)连接,使用
h12pro_controller_node驱动
控制模式
系统提供三种控制模式:
- cmd_vel 模式
- cmd_vel_world 模式
- 躯干控制模式(手柄摇杆→
/cmd_torso_vel;复位→/mobile_manipulator_reset_torso服务;SDK 绝对位姿→/cmd_lb_torso_pose)
一、BT2Pro / BT2 手柄
在使用终端命令启动机器人时,请务必先确认接收器已安装到位,并选好对应的手柄类型,最后再执行启动。
否则,系统可能会出现按键映射错误(比如BT2手柄被识别成BT2 Pro),导致无法通过按键正确控制机器人的行为情况。
这是因为目前的BT手柄在5W平台上还不支持动态检测和自动重载映射文件,所以必须在启动前就确定好配置。
roslaunch humanoid_controllers load_kuavo_real_wheel.launch joystick_type:=bt2
roslaunch humanoid_controllers load_kuavo_real_wheel.launch joystick_type:=bt2pro
模式切换
- LB + A键(BUTTON_STANCE):切换到
cmd_vel模式 - LB + Y键(BUTTON_WALK):切换到
cmd_vel_world模式 - LB + B键(BUTTON_TROT):切换到
躯干控制模式
默认模式
系统启动时默认模式为 cmd_vel 模式。
其他功能按键
- BACK键:杀掉程序
复位功能
- RT键:任意控制模式(cmd_vel / cmd_vel_world / 躯干控制)下按下 RT 键均可调用
/mobile_manipulator_reset_torso将躯干复位到初始位置,与 G12 的 G+H 复位行为一致,无需先切换到躯干控制模式
模式详细说明
1. cmd_vel 模式 / cmd_vel_world 模式
话题:/cmd_vel 或 /cmd_vel_world
控制方式:
- 左摇杆上下方向(X轴):控制
linear.x(前进/后退线速度) - 左摇杆左右方向(Y轴):控制
linear.y(左右移动线速度) - 右摇杆左右方向(Yaw轴):控制
angular.z(绕Z轴旋转角速度)
死区:0.05
2. 躯干控制模式
手柄摇杆 → 速度话题:/cmd_torso_vel(geometry_msgs/Twist:linear.x/z、angular.y/z 为瞬时速度)
复位:调用服务 /mobile_manipulator_reset_torso(非直接发绝对位姿话题)
SDK / 其它上层绝对位姿:/cmd_lb_torso_pose(geometry_msgs/Twist,同一 tick 内优先级高于 vel/delta)
控制方式:
此模式下需要配合按键使用摇杆进行控制。遥控节点不再在内部维护躯干绝对位姿——摇杆操作转换为瞬时速度,由 ReferenceManager 做 sticky 积分(松开摇杆发零速停止,0.3s 无新消息超时清零)。
躯干X位置控制
- LB + 左摇杆上下方向:控制躯干X位置速度
- 注意:需要按住LB键才触发控制,松开LB键时速度归零
躯干Z位置控制
- LB + 右摇杆上下方向:控制躯干Z位置速度
- 注意:需要按住LB键才触发控制,松开LB键时速度归零
躯干Yaw角度控制
- RB + 右摇杆左右方向:控制躯干Yaw角速度
- 注意:需要按住RB键才触发控制,松开RB键时速度归零
躯干Pitch角度控制
- RB + 左摇杆上下方向:控制躯干Pitch角速度
- 注意:需要按住RB键才触发控制,松开RB键时速度归零
死区:0.05
特殊说明:
- 进入躯干控制模式时,系统会自动切换到MPC的ArmOnly模式
- 退出躯干控制模式时,系统会恢复之前的MPC模式
- 遥控节点无状态:摇杆→瞬时速度 → ReferenceManager 做唯一开环积分。软暂停(
/enable_control false)时 ReferenceManager 清零 sticky 速度,解冻后从零开始,无跳变
使用提示(BT2Pro)
- 模式切换:模式切换前要保证手柄控制量为0,且保持2秒钟,之后才能进行模式切换
- 紧急停止:按下BACK键可以杀死程序
- 死区处理:摇杆输入值小于0.05时会被视为0,避免微小抖动
二、G12遥控器
硬件配置
- 接收器:CP2102 USB to UART Bridge Controller
- 串口设备:
/dev/usb_remote(通过udev规则绑定) - 波特率:100000(SBUS协议)
- 通道数:12通道
通道布局
| 通道 | 功能 | 说明 |
|---|---|---|
| CH1 | 右摇杆左右 | Yaw |
| CH2 | 右摇杆上下 | Z轴 |
| CH3 | 左摇杆上下 | X轴 |
| CH4 | 左摇杆左右 | Y轴 |
| CH5 | E开关 | 三段开关 |
| CH6 | F开关 | 三段开关 |
| CH7 | A按钮 | 自复位 |
| CH8 | B按钮 | 自复位 |
| CH9 | C按钮 | 自复位 |
| CH10 | D按钮 | 自复位 |
| CH11 | G拨杆 | 自回中拨轮 |
| CH12 | H拨杆 | 自回中拨轮 |
安全开关
- E开关和F开关必须同时处于中间位置时,所有控制指令才生效(切换模式等指令)
- 任一开关不在中间位置时,机器人停止响应手柄输入(走路不会影响)
模式切换
- G极值 + A按钮:切换到
cmd_vel模式 - G极值 + B按钮:切换到
cmd_vel_world模式 - G极值 + C按钮:切换到
躯干控制模式
"G极值"指G拨杆拨到任意方向的极限位置(接近282或1722),松手后自动回中。
默认模式
系统启动时默认模式为 cmd_vel 模式。
紧急停止
- C + D 同时长按1秒:触发紧急停止(杀死程序)
模式详细说明
1. cmd_vel 模式 / cmd_vel_world 模式
话题:/cmd_vel 或 /cmd_vel_world
控制方式:
- 左摇杆上下:控制
linear.x(前进/后退线速度) - 左摇杆左右:控制
linear.y(左右移动线速度) - 右摇杆左右:控制
angular.z(绕Z轴旋转角速度)
死区:0.05
2. 躯干控制模式
手柄摇杆 → 速度话题:/cmd_torso_vel(geometry_msgs/Twist:linear.x/z、angular.y/z 为瞬时速度)
复位:调用服务 /mobile_manipulator_reset_torso(非直接发绝对位姿话题)
SDK / 其它上层绝对位姿:/cmd_lb_torso_pose(geometry_msgs/Twist,同一 tick 内优先级高于 vel/delta)
控制方式:
此模式下通过G/H拨杆配合摇杆进行控制。进入躯干控制模式时,底盘自动锁定(不会移动)。遥控节点不再在内部维护躯干绝对位姿——摇杆操作转换为瞬时速度,由 ReferenceManager 做 sticky 积分。
躯干X位置控制
- G极值 + 左摇杆上下:控制躯干X轴前后速度
- 注意:需要拨住G拨杆才触发控制,松手后速度归零
躯干Z位置控制
- G极值 + 右摇杆上下:控制躯干Z轴上下速度
- 注意:需要拨住G拨杆才触发控制,松手后速度归零
躯干Yaw角度控制
- H极值 + 右摇杆左右:控制躯干Yaw角速度
- 注意:需要拨住H拨杆才触发控制,松手后速度归零
躯干Pitch角度控制
- H极值 + 左摇杆上下:控制躯干Pitch角速度
- 注意:需要拨住H拨杆才触发控制,松手后速度归零
躯干复位
- G + H 同时极值保持2秒:调用
/mobile_manipulator_reset_torso,躯干回到初始位置
死区:0.05
特殊说明:
- 进入躯干控制模式时,系统会自动切换到MPC的ArmOnly模式,并禁用底盘速度控制节点
- 退出躯干控制模式时,系统会恢复之前的MPC模式,并恢复底盘速度控制节点
- 遥控节点无状态:摇杆→瞬时速度 → ReferenceManager 做唯一开环积分;0.3s timeout 自动清零。软暂停(
/enable_control false)时 ReferenceManager 清零 sticky 速度,解冻后从零开始 - G/H拨杆为自回中拨轮,只有在拨到极值位置时才激活控制,松手后自动回中并停止
使用提示(G12)
- 安全开关:使用前确保E和F开关都在中间位置,否则所有控制无效
- 模式切换:将G拨杆拨到极值位置后按下A/B/C按钮进行模式切换
- 紧急停止:同时按住C和D按钮1秒触发紧急停止
- 躯干控制:拨住G或H拨杆配合摇杆调整躯干,松手停止(速度归零,躯干保持当前位置)
- 躯干复位:同时将G和H拨到极值位置保持2秒,躯干回到初始位置
- 死区处理:摇杆输入值小于0.05时会被视为0,避免微小抖动
启动方式
BT2Pro 手柄
roslaunch humanoid_controllers load_kuavo_gazebo_sim_wheel.launch joystick_type:=bt2pro
# 或
roslaunch humanoid_controllers load_kuavo_real_wheel.launch joystick_type:=bt2pro
G12 遥控器
roslaunch humanoid_controllers load_kuavo_gazebo_sim_wheel.launch joystick_type:=h12
# 或
roslaunch humanoid_controllers load_kuavo_real_wheel.launch joystick_type:=h12