跳到主要内容

轮臂手柄控制说明

概述​

本文档说明如何使用手柄控制轮臂机器人,包括三种控制模式及其切换方式。

目前支持两种手柄:

  1. BT2Pro / BT2 手柄:通过USB连接,使用标准 joy_node 驱动
  2. G12遥控器:通过SBUS接收器(CP2102串口)连接,使用 h12pro_controller_node 驱动

控制模式​

系统提供三种控制模式:

  1. cmd_vel 模式
  2. cmd_vel_world 模式
  3. 躯干控制模式(手柄摇杆→/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)​

  1. 模式切换:模式切换前要保证手柄控制量为0,且保持2秒钟,之后才能进行模式切换
  2. 紧急停止:按下BACK键可以杀死程序
  3. 死区处理:摇杆输入值小于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轴
CH5E开关三段开关
CH6F开关三段开关
CH7A按钮自复位
CH8B按钮自复位
CH9C按钮自复位
CH10D按钮自复位
CH11G拨杆自回中拨轮
CH12H拨杆自回中拨轮

安全开关​

  • 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)​

  1. 安全开关:使用前确保E和F开关都在中间位置,否则所有控制无效
  2. 模式切换:将G拨杆拨到极值位置后按下A/B/C按钮进行模式切换
  3. 紧急停止:同时按住C和D按钮1秒触发紧急停止
  4. 躯干控制:拨住G或H拨杆配合摇杆调整躯干,松手停止(速度归零,躯干保持当前位置)
  5. 躯干复位:同时将G和H拨到极值位置保持2秒,躯干回到初始位置
  6. 死区处理:摇杆输入值小于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