跳到主要内容

头部及手部控制

KUAVO Humanoid SDK 提供了全面的头部和手部控制接口,支持机器人头部运动控制、手臂运动控制以及不同类型的机械手(如 LejuClaw 和 DexterousHand)操作。本文档详细介绍这些控制接口的使用方法。

接口说明

头部控制接口

KuavoRobotHead

KuavoRobotHead 类提供了控制机器人头部运动的接口。

主要接口描述如下:

函数名control_head
函数原型bool control_head(float yaw, float pitch)
功能概述控制机器人头部的偏航角(yaw)和俯仰角(pitch)。
参数yaw: 头部水平转动角度,范围[-1.396, 1.396]弧度(约-80°到80°)
pitch: 头部俯仰角度,范围[-0.436, 0.436]弧度(约-25°到25°)
返回值true: 控制成功
false: 控制失败
备注角度单位为弧度,超出范围会自动限制在有效范围内

手臂控制接口

KuavoRobotArm

KuavoRobotArm 类提供了控制机器人手臂的接口。

主要接口描述如下:

函数名control_arm_joint_positions
函数原型bool control_arm_joint_positions(list joint_positions)
功能概述控制机器人手臂关节位置。
参数joint_positions: 目标关节位置列表,单位为弧度,长度为手臂关节数量(14个关节)
返回值true: 控制成功
false: 控制失败
备注1. 关节角度范围必须为[-π, π]弧度
2. 机器人必须处于站立状态
3. 手臂必须处于外部控制模式
函数名arm_fk
函数原型Tuple[KuavoPose, KuavoPose] arm_fk(list q)
功能概述计算机器人手臂的正向运动学。
参数q: 关节位置列表,单位为弧度
返回值左右手臂末端执行器的位姿元组,如果计算失败则返回(None, None)
备注返回的KuavoPose包含位置(position)和方向(orientation)信息
函数名control_arm_joint_trajectory
函数原型bool control_arm_joint_trajectory(list times, list joint_q)
功能概述控制机器人手臂关节轨迹。
参数times: 时间点列表,单位为秒
joint_q: 关节位置列表,每个时间点对应一组关节位置,单位为弧度
返回值true: 控制成功
false: 控制失败
备注1. times和joint_q长度必须相同
2. 关节角度范围必须为[-π, π]弧度
3. 机器人必须处于站立状态
4. 手臂必须处于外部控制模式
函数名arm_ik
函数原型list arm_ik(KuavoPose left_pose, KuavoPose right_pose, list left_elbow_pos_xyz=[0.0,

0.0, 0.0], list right_elbow_pos_xyz=[0.0, 0.0, 0.0], list arm_q0=None, KuavoIKParams params=None) | | 功能概述 | 计算机器人手臂的逆向运动学。| | 参数 | left_pose: 左手臂目标位姿
right_pose: 右手臂目标位姿
left_elbow_pos_xyz: 左肘位置<br/ right_elbow_pos_xyz: 右肘位置
arm_q0: 初始关节位置
params: 逆运动学参数 | | 返回值 | 关节位置列表,如果计算失败则返回None | | 备注 | 可以通过params参数调整计算精度和约束条件 |

函数名control_robot_end_effector_pose
函数原型bool control_robot_end_effector_pose(KuavoPose left_pose, KuavoPose right_pose, KuavoManipulationMpcFrame frame)
功能概述控制机器人手臂末端执行器位姿。
参数left_pose: 左手臂目标位姿
right_pose: 右手臂目标位姿
frame: 控制坐标系
返回值true: 控制成功
false: 控制失败
函数名set_fixed_arm_mode
函数原型bool set_fixed_arm_mode()
功能概述设置手臂为固定模式。
返回值true: 设置成功
false: 设置失败
备注固定模式下手臂保持当前位置不动
函数名set_auto_swing_arm_mode
函数原型bool set_auto_swing_arm_mode()
功能概述设置手臂为自动摆动模式。
返回值true: 设置成功
false: 设置失败
备注自动摆动模式下手臂会随步态自动摆动
函数名set_external_control_arm_mode
函数原型bool set_external_control_arm_mode()
功能概述设置手臂为外部控制模式。
返回值true: 设置成功
false: 设置失败
备注外部控制模式下可以通过control_arm_joint_positions等接口控制手臂
函数名arm_reset
函数原型bool arm_reset()
功能概述重置手臂到默认位置。
返回值true: 重置成功
false: 重置失败
备注通常用于初始化手臂位置

手部控制接口

KUAVO Humanoid SDK 支持两种类型的机械手:

  1. LejuClaw - 简单夹持器
  2. DexterousHand - 灵巧手

LejuClaw 接口

LejuClaw 类提供了以下主要接口:

函数名open
函数原型bool open(EndEffectorSide side = EndEffectorSide.BOTH)
功能概述打开机械爪。
参数side: 控制哪一侧的机械爪,可选值:
- LEFT: 左手
- RIGHT: 右手
- BOTH: 双手(默认)
返回值true: 控制成功
false: 控制失败
备注调用后可使用 wait_for_finish() 等待动作完成
函数名close
函数原型bool close(EndEffectorSide side = EndEffectorSide.BOTH)
功能概述关闭机械爪。
参数side: 控制哪一侧的机械爪,可选值同 open
返回值true: 控制成功
false: 控制失败
备注调用后可使用 wait_for_finish() 等待动作完成
函数名control
函数原型bool control(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制机械爪的位置、速度和力矩。
参数target_positions: 目标位置列表,长度为2(左右手各一个值),范围[0.0 ~ 100.0]
target_velocities: 目标速度列表,长度为2,如果为None则使用默认值[90, 90]
target_torques: 目标力矩列表,长度为2,如果为None则使用默认值[1.0, 1.0]
返回值true: 控制成功
false: 控制失败
备注1. 调用后可使用 wait_for_finish() 等待动作完成
2. 如果机械爪仍在执行上一个动作,新的请求可能会被丢弃
函数名control_left
函数原型bool control_left(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制左侧机械爪的位置、速度和力矩。
参数target_positions: 目标位置列表,长度为1,范围[0.0 ~ 100.0]
target_velocities: 目标速度列表,长度为1,如果为None则使用默认值90
target_torques: 目标力矩列表,长度为1,如果为None则使用默认值1.0
返回值true: 控制成功
false: 控制失败
备注1. 调用后可使用 wait_for_finish() 等待动作完成
2. 如果机械爪仍在执行上一个动作,新的请求可能会被丢弃
函数名control_right
函数原型bool control_right(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制右侧机械爪的位置、速度和力矩。
参数target_positions: 目标位置列表,长度为1,范围[0.0 ~ 100.0]
target_velocities: 目标速度列表,长度为1,如果为None则使用默认值90
target_torques: 目标力矩列表,长度为1,如果为None则使用默认值1.0
返回值true: 控制成功
false: 控制失败
备注1. 调用后可使用 wait_for_finish() 等待动作完成
2. 如果机械爪仍在执行上一个动作,新的请求可能会被丢弃

DexterousHand 接口

DexterousHand 类提供了以下主要接口:

函数名control
函数原型bool control(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制灵巧手的关节位置。
参数target_positions: 目标位置列表,长度为12(每只手6个关节),范围[0.0 ~ 100.0]
target_velocities: 暂不支持
target_torques: 暂不支持
返回值true: 控制成功
false: 控制失败
备注仅支持位置控制
函数名control_left
--------------------
函数原型bool control_left(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制左手灵巧手的关节位置
参数target_positions: 目标位置列表,长度为6(左手6个关节),范围[0.0 ~ 100.0]
target_velocities: 暂不支持
target_torques: 暂不支持
返回值true: 控制成功
false: 控制失败
函数名control_right
函数原型bool control_right(list target_positions, list target_velocities = None, list target_torques = None)
功能概述控制右手灵巧手的关节位置
参数target_positions: 目标位置列表,长度为6(右手6个关节),范围[0.0 ~ 100.0]
target_velocities: 暂不支持
target_torques: 暂不支持
返回值true: 控制成功
false: 控制失败
函数名make_gesture
函数原型bool make_gesture(str l_gesture_name, str r_gesture_name)
功能概述控制灵巧手做预定义手势。
参数l_gesture_name: 左手手势名称
r_gesture_name: 右手手势名称
返回值true: 控制成功
false: 控制失败
备注支持的手势包括:'fist', 'ok', 'thumbs_up', '666', 'number_1'等

示例

参考SDK示例代码:

头部控制:<kuavo-ros-opensource>/src/kuavo_humanoid_websocket_sdk/examples/atomic_skills/ctrl_head_example.py

演示如何通过SDK控制机器人头部的俯仰(pitch)和偏航(yaw)角度,实现头部的上下和左右运动。

示例代码中展示了两种运动模式:

  1. 头部上下点头运动:

    • 从0度开始,先向下转到-25度
    • 然后从-25度向上转到25度
    • 最后从25度回到0度
    • 重复2个周期
  2. 头部左右摇头运动:

    • 从0度开始,先向左转到60度
    • 然后从60度向右转到-60度
    • 最后从-60度回到0度
    • 重复2个周期

每次运动都以较小的角度增量(2度)变化,并设置了0.1秒的时间间隔,以实现平滑的运动效果。


手臂控制:<kuavo-ros-opensource>/src/kuavo_humanoid_websocket_sdk/examples/atomic_skills/ctrl_arm_example.py

显示手臂轨迹控制和目标姿势控制的示例。

包含关节角度插值运动、关节轨迹控制、末端执行器位姿控制等多种手臂操作方式,适合测试手臂的基本动作、轨迹跟踪和末端控制能力。

示例代码包含三个主要的控制函数:

  1. control_arm_traj():关节角度插值运动

    • 从初始位置q0开始,通过90步插值运动到目标位置q1
    • q1设置了右臂抬起50度的姿态
    • 每步之间间隔0.02秒,实现平滑过渡
    • 运动完成后恢复到初始位置
    • 最后重置手臂位置
  2. control_arm_joint_trajectory():关节轨迹控制

    • 定义了7个关键时间点的目标姿态
    • 机器人会自动完成关键帧之间的轨迹规划
    • 执行完毕后重置手臂位置
  3. control_arm_end_effector_pose():末端执行器位姿控制

    • 直接指定左右手末端在世界坐标系中的目标位置和姿态
    • 通过逆运动学自动计算所需的关节角度
    • 机器人自动规划轨迹到达目标位姿
    • 完成后重置手臂位置

机械爪控制:<kuavo-ros-opensource>/src/kuavo_humanoid_websocket_sdk/examples/atomic_skills/lejuclaw_example.py

演示如何控制LejuClaw夹持器末端执行器的示例,包括位置、速度和扭矩控制。

支持整体开合、单侧控制、目标位置设定等多种操作,通过 claw.open()claw.close()claw.control_left()claw.control_right()claw.control() 等接口实现。

示例代码展示了以下主要功能:

  1. 基本开合控制:

    • claw.close() 完全闭合夹爪
    • claw.open() 完全打开夹爪
    • 每个动作后使用 wait_for_finish() 等待动作完成
  2. 单侧夹爪控制:

    • claw.control_left([50]) 控制左侧夹爪到50度位置
    • claw.control_right([80]) 控制右侧夹爪到80度位置
    • 可以分别精确控制左右两侧夹爪的位置
  3. 双侧同步控制:

    • claw.control([20, 100]) 同时控制左右夹爪到不同位置
    • 第一个参数控制左侧,第二个参数控制右侧
    • 位置范围为0-100度,0表示完全闭合,100表示完全打开

注意事项:

  • 每次动作后建议调用 wait_for_finish() 等待完成,避免动作叠加
  • 可以设置超时时间,如 wait_for_finish(timeout=2.0)
  • 连续发送指令时要注意等待前一个动作完成,否则可能被丢弃

灵巧手控制:<kuavo-ros-opensource>/src/kuavo_humanoid_websocket_sdk/examples/atomic_skills/dexhand_example.py

演示如何控制灵巧手(Dexterous Hand)的基本动作和预设手势。

支持单侧控制、双侧同步控制、预设手势调用等功能。示例代码展示了:

  1. 单侧手指控制:
    • 左手指向"点赞"手势
    • 右手指向"666"手势
  2. 预设手势调用:
    • 获取所有支持的手势名称
    • 调用预设手势(如"点赞"和"OK"手势)