跳到主要内容

轮臂相关接口文档说明

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.xfloat64x线性速度, 单位(m/s)
linear.yfloat64y线性速度, 单位(m/s)
linear.zfloat64未使用
angular.zfloat64yaw方向速度, 单位(radian/s)
angular.xfloat64未使用
angular.yfloat64未使用

/lb_joint_cmd<kuavo_msgs::jointCmd>​

  • 话题描述: 轮臂关节控制指令话题,用于发布轮臂关节的目标位置、速度、力矩等控制参数
  • 注意: 该话题主要用于轮臂关节的精确控制,支持位置控制和力矩控制模式
  • 用途: 通常由运动规划模块或IK求解器发布,由硬件控制器订阅并执行
字段类型描述
headerstd_msgs/Header标准消息头,包含时间戳
joint_qfloat64[]目标关节位置数组,单位: 弧度 (radian)
joint_vfloat64[]目标关节速度数组,单位: 弧度/秒 (radian/s)
taufloat64[]目标关节力矩数组,单位: 牛顿·米 (N·m)
tau_maxfloat64[]关节最大力矩限制数组,单位: 牛顿·米 (N·m)
tau_ratiofloat64[]力矩比例系数数组
joint_kpfloat64[]关节比例增益数组
joint_kdfloat64[]关节微分增益数组
control_modesint32[]控制模式数组,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/s
  • linear.z:躯干Z升降速度,m/s
  • angular.y:躯干Pitch前倾速度,rad/s
  • angular.z:躯干Yaw角速度,rad/s

/cmd_torso_delta<geometry_msgs::Twist>​

  • 话题描述: 躯干一次性相对位移(oneshot)。每条消息的增量被消耗一次后清零。典型来源:5W 单手 A/B 偏航;G12/BT2 手柄躯干模式不发此话题
  • linear.x:躯干X前后增量,m
  • linear.z:躯干Z升降增量,m
  • angular.z:躯干Yaw增量,rad
  • angular.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位置,m
  • linear.z:躯干Z位置,m
  • angular.z:躯干Yaw角度,rad
  • angular.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/s
  • joint_data[1]:头部俯仰角速度(pitch),deg/s
  • 限位:yaw ±88°,pitch ±25°(CDM/WBC 内部 clamp)

/cmd_head_delta<kuavo_msgs::robotHeadMotionData>​

  • 话题描述: 头部一次性相对位移(oneshot)。每条消息的增量被消耗一次后清零
  • joint_data[0]:头部偏航增量(yaw),deg
  • joint_data[1]:头部俯仰增量(pitch),deg

srv​

/lb_leg_control_srv<kuavo_msgs::lbLegControlSrv>​

  • 服务描述: 腿部关节控制服务,用于直接控制机器人的腿部关节角度
  • 注意: 该服务会启动一个控制循环来执行关节控制,如果控制循环已经在运行,则会更新目标关节角度
  • 警告: 请确保传入的关节角度在安全范围内,避免机器人出现异常姿态
字段类型描述
target_jointsfloat64[4]目标关节角度数组,包含4个关节的角度值,单位: 弧度 (radian)
successbool控制是否成功,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_chassisbool是否包含底盘信息进行计算
chassis_infofloat64[3]底盘信息 [x, y, yaw],单位: 米和弧度
q_lbfloat64[4]当前腿部关节角度 [knee, leg, waist_pitch, waist_yaw],单位: 弧度
base_linkfloat64[7]目标base_link位姿 [x, y, z, qw, qx, qy, qz],位置单位: 米,姿态为四元数

响应参数:

字段类型描述
successboolIK求解是否成功,True表示成功,False表示失败
lb_legfloat64[4]计算得到的腿部关节角度 [knee, leg, waist_pitch, waist_yaw],单位: 弧度
time_costfloat64IK计算耗时,单位: 毫秒 (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 的规划状态(软急停),恢复前所有控制指令被丢弃

请求参数:

字段类型描述
databoolTrue = 恢复控制;False = 冻结到当前规划状态,丢弃后续指令

响应参数:

字段类型描述
successbool调用是否成功
messagestring状态描述信息

冻结策略(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)