轮臂相关接口文档说明
topics
/sensors_data_raw<kuavo_msgs::sensorsData>
- 话题描述: 实物机器人, 仿真器发布的传感器原始数据
- 其中关节数据的数组长度为
NUM_JOINT, 对应的数据顺序为: - 前 4 个数据为下肢电机数据,
- 0 ~ 4 为下肢数据, 顺序为从小车到机器人
- 接着 14 个数据为手臂电机数据,
- 4 ~ 10 左臂电机数据("l_arm_pitch","l_arm_roll","l_arm_yaw","l_forearm_pitch","l_hand_yaw","l_hand_pitch","l_hand_roll")或 (zarm_l1_link ~ zarm_l7_link),
- 11 ~ 17 为右臂电机数据("r_arm_pitch","r_arm_roll","r_arm_yaw","r_forearm_pitch","r_hand_yaw","r_hand_pitch","r_hand_roll")或 (zarm_r1_link ~ zarm_r7_link),
- 最后 2 个为头部电机数据, 分别为 head_yaw 和 head_pitch
- 位置单位(radian), 速度单位(radian/s), 加速度单位($\text{radian/s}^2$), 电流单位(A)
- imu 数据:
- gyro: 表示陀螺仪的角速度,单位弧度每秒(rad/s)
- acc: 表示加速度计的加速度,单位米每平方秒(m/s2)
- quat: IMU的姿态(orientation)
/odom<nav_msgs::Odometry>
- 话题描述: 用于发布小车的里程计信息
/cmd_vel<geometry_msgs::Twist>
- 话题描述: 控制指令,速度指令,机器人小车的target指令的速度形式,包含xy方向速度和yaw方向速度。
| 字段 | 类型 | 描述 |
|---|---|---|
| linear.x | float64 | x线性速度, 单位(m/s) |
| linear.y | float64 | y线性速度, 单位(m/s) |
| linear.z | float64 | 未使用 |
| angular.z | float64 | yaw方向速度, 单位(radian/s) |
| angular.x | float64 | 未使用 |
| angular.y | float64 | 未使用 |
/lb_joint_cmd<kuavo_msgs::jointCmd>
- 话题描述: 轮臂关节控制指令话题,用于发布轮臂关节的目标位置、速度、力矩等控制参数
- 注意: 该话题主要用于轮臂关节的精确控制,支持位置控制和力矩控制模式
- 用途: 通常由运动规划模块或IK求解器发布,由硬件控制器订阅并执行
| 字段 | 类型 | 描述 |
|---|---|---|
| header | std_msgs/Header | 标准消息头,包含时间戳 |
| joint_q | float64[] | 目标关节位置数组,单位: 弧度 (radian) |
| joint_v | float64[] | 目标关节速度数组,单位: 弧度/秒 (radian/s) |
| tau | float64[] | 目标关节力矩数组,单位: 牛顿·米 (N·m) |
| tau_max | float64[] | 关节最大力矩限制数组,单位: 牛顿·米 (N·m) |
| tau_ratio | float64[] | 力矩比例系数数组 |
| joint_kp | float64[] | 关节比例增益数组 |
| joint_kd | float64[] | 关节微分增益数组 |
| control_modes | int32[] | 控制模式数组,0: 力矩控制,1: 位置控制 |
- 数组索引说明(前4个为轮臂关节):
- 索引4-17: 手臂关节
- 索引18-19: 头部关节
/enable_control_state<std_msgs::Bool>
- 话题描述: WBC enable/disable 状态话题(latched)。WBC 发布,ControlDataManager 与 ReferenceManager 订阅同步
True= 正常受控,False= 暂停所有动作控制
/cmd_torso_vel<geometry_msgs::Twist>
- 话题描述: 躯干瞬时速度控制(G12/BT2/Xbox 手柄躯干模式下发)。接收侧 RM 做 sticky 积分
- 粘性(sticky)机制:持续收到非零速度时积分到躯干位姿;收到零速度或 0.3s 超时后停止
linear.x:躯干X前后速度,m/slinear.z:躯干Z升降速度,m/sangular.y:躯干Pitch前倾速度,rad/sangular.z:躯干Yaw角速度,rad/s
/cmd_torso_delta<geometry_msgs::Twist>
- 话题描述: 躯干一次性相对位移(oneshot)。每条消息的增量被消耗一次后清零。典型来源:5W 单手 A/B 偏航;G12/BT2 手柄躯干模式不发此话题
linear.x:躯干X前后增量,mlinear.z:躯干Z升降增量,mangular.z:躯干Yaw增量,radangular.y:躯干Pitch增量,rad
/cmd_lb_torso_pose<geometry_msgs::Twist>
- 话题描述: 躯干绝对位姿控制(原有接口,仍保留)。SDK/上层开环绝对位姿;手柄复位走
/mobile_manipulator_reset_torso服务 - 与
/cmd_torso_vel、/cmd_torso_delta均作用于同一个开环目标cmdTorsoPose_:vel 叠加,delta 叠加,本话题直接写入 - 字段布局与 vel/delta 一致:
linear.x/z位置 m,angular.y/z姿态 rad
/torso_open_loop_state<geometry_msgs::Twist>
- 话题描述: 躯干开环 4D 位姿反馈(RM 端发布,频率同 MPC)。各输入源读取此状态做 workspace 钳制
linear.x:躯干X位置,mlinear.z:躯干Z位置,mangular.z:躯干Yaw角度,radangular.y:躯干Pitch角度,rad(正值前倾)
/cmd_head_vel<kuavo_msgs::robotHeadMotionData>
- 话题描述: 头部瞬时角速度控制(H12/G12 遥控器头部模式下发)。接收侧 CDM/WBC 做 sticky 积分
- 粘性(sticky)机制:持续收到非零速度时积分到
head_external_control_state_;收到零速度或 0.3s 超时后停止 joint_data[0]:头部偏航角速度(yaw),deg/sjoint_data[1]:头部俯仰角速度(pitch),deg/s- 限位:yaw ±88°,pitch ±25°(CDM/WBC 内部 clamp)
/cmd_head_delta<kuavo_msgs::robotHeadMotionData>
- 话题描述: 头部一次性相对位移(oneshot)。每条消息的增量被消耗一次后清零
joint_data[0]:头部偏航增量(yaw),degjoint_data[1]:头部俯仰增量(pitch),deg
srv
/lb_leg_control_srv<kuavo_msgs::lbLegControlSrv>
- 服务描述: 腿部关节控制服务,用于直接控制机器人的腿部关节角度
- 注意: 该服务会启动一个控制循环来执行关节控制,如果控制循环已经在运行,则会更新目标关节角度
- 警告: 请确保传入的关节角度在安全范围内,避免机器人出现异常姿态
| 字段 | 类型 | 描述 |
|---|---|---|
| target_joints | float64[4] | 目标关节角度数组,包含4个关节的角度值,单位: 弧度 (radian) |
| success | bool | 控制是否成功,True表示成功,False表示失败 |
- target_joints 数组说明:
- 索引0: knee_joint (膝关节)
- 索引1: leg_joint (腿部关节)
- 索引2: waist_pitch_joint (腰部俯仰关节)
- 索引3: waist_yaw_joint (腰部偏航关节)
/lb_leg_ik_srv<kuavo_msgs::lbBaseLinkPoseCmdSrv>
- 服务描述: 轮臂腿部逆运动学服务,根据目标base_link位姿计算所需的腿部关节角度
- 功能: 提供轮臂系统的运动学求解,支持带底盘信息的IK计算
- 用途: 用于运动规划、姿态控制和轨迹跟踪等高级控制功能
请求参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| with_chassis | bool | 是否包含底盘信息进行计算 |
| chassis_info | float64[3] | 底盘信息 [x, y, yaw],单位: 米和弧度 |
| q_lb | float64[4] | 当前腿部关节角度 [knee, leg, waist_pitch, waist_yaw],单位: 弧度 |
| base_link | float64[7] | 目标base_link位姿 [x, y, z, qw, qx, qy, qz],位置单位: 米,姿态为四元数 |
响应参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| success | bool | IK求解是否成功,True表示成功,False表示失败 |
| lb_leg | float64[4] | 计算得到的腿部关节角度 [knee, leg, waist_pitch, waist_yaw],单位: 弧度 |
| time_cost | float64 | IK计算耗时,单位: 毫秒 (ms) |
算法特点:
- 支持带底盘约束的运动学求解
- 考虑关节限位和碰撞约束
- 提供求解时间反馈用于性能监控
- 支持参考位置优化求解结果
使用示例:
# 创建服务代理
ik_service = rospy.ServiceProxy('/lb_leg_ik_srv', lbBaseLinkPoseCmdSrv)
# 创建请求
request = lbBaseLinkPoseCmdSrvRequest()
request.with_chassis = True
request.chassis_info = [0.0, 0.0, 0.0] # 底盘位置和朝向
request.q_lb = [0.21, -0.375, 0.0202, 0.0] # 当前关节角度
request.base_link = [0.227, -0.017, 1.019, 0.807, 0.019, -0.025, -0.589] # 目标位姿
# 调用服务
response = ik_service(request)
if response.success:
print(f"IK求解成功,关节角度: {response.lb_leg}")
print(f"计算耗时: {response.time_cost} ms")
/enable_control<std_srvs::SetBool>
- 服务描述: 暂停/恢复轮臂 WBC 层所有动作控制。仅限 WBC 层
- 行为: 暂停时冻结到当前 tick 的规划状态(软急停),恢复前所有控制指令被丢弃
请求参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| data | bool | True = 恢复控制;False = 冻结到当前规划状态,丢弃后续指令 |
响应参数:
| 字段 | 类型 | 描述 |
|---|---|---|
| success | bool | 调用是否成功 |
| message | string | 状态描述信息 |
冻结策略(disable 期间):
| 部位 | 冻结来源 |
|---|---|
| 底盘(x, y, yaw) | 当前观测值 |
| 腰部/下肢(4 关节) | 当前规划值 |
| 手臂(14 关节) | 当前规划值 |
| 头部(2 关节) | 最后一条有效命令目标;/cmd_head_vel 粘性清零,/cmd_head_delta 清零 |
| 躯干 | 当前规划值;/cmd_torso_vel 粘性清零;/cmd_torso_delta 清零;/cmd_lb_torso_pose 新消息丢弃 |
使用示例:
import rospy
from std_srvs.srv import SetBool, SetBoolRequest
rospy.wait_for_service('/enable_control')
enable_srv = rospy.ServiceProxy('/enable_control', SetBool)
# 暂停
resp = enable_srv(SetBoolRequest(data=False))
print(resp.message)
# 恢复
resp = enable_srv(SetBoolRequest(data=True))
print(resp.message)