头部关节
1.head_set_pos - 头部角度控制
方法: ctrl.head_set_pos(type, pos_deg)
C++ 签名: bool head_set_pos(HeadType type, float pos_deg);
参数:
type:头部类型,fd_robot::HeadType枚举HeadType::kLower:下头(yaw),水平旋转HeadType::kUpper:上头(pitch),俯仰
pos_deg:目标角度,float类型,单位:度 (°)。正值 = 前/上,负值 = 后/下。内部自动限幅:HeadType::kLower(yaw):-45° ~ +45°HeadType::kUpper(pitch):-15° ~ +25°
返回值:
bool:操作结果true:指令发送成功false:指令发送失败
使用示例:
注意: 限幅范围由机型 robot_profile 的 head_upper_range / head_lower_range 配置决定,上表为默认机型范围;输入超限值会被自动钳位。
2.head_stop - 头部停止
方法: ctrl.head_stop(type)
C++ 签名: bool head_stop(HeadType type);
参数:
type:头部类型,fd_robot::HeadType枚举HeadType::kLower:停止下头(yaw)HeadType::kUpper:停止上头(pitch)
返回值:
bool:操作结果true:指令发送成功false:指令发送失败
使用示例:
3.head_get_current_pos - 获取头部当前位置(同步读取)
方法: state.head_get_current_pos(type, angle_deg)
C++ 签名: bool head_get_current_pos(HeadType type, float &angle_deg) const;
参数:
type:头部类型,fd_robot::HeadType枚举HeadType::kLower:读取下头(yaw)当前位置HeadType::kUpper:读取上头(pitch)当前位置
angle_deg:出参,float &类型,返回当前头部角度,单位:度 (°)
返回值:
bool:表示是否已有有效缓存数据true:已有数据,angle_deg有效false:尚无数据,angle_deg不可信
使用示例:
注意: 返回 false 表示该轴尚无有效缓存数据(对应 Python 版的 None),此时出参不可信,建议先订阅或等待数据到达后再读取。
4.head_sub_current_pos - 订阅头部位置(异步回调)
方法: state.head_sub_current_pos(cb)
C++ 签名: SubscriptionId head_sub_current_pos(HeadPosCallback cb); // cb: void(HeadType, float deg)
参数:
cb:回调函数,std::function<void(fd_robot::HeadType, float)>类型HeadType:标识是下头还是上头float:角度值,单位:度 (°)
返回值:
SubscriptionId:订阅ID,类型为uint64_t。可用于后续取消订阅;空回调返回0(失败)
使用示例:
建议:
- 订阅的回调在线程池中执行,注意线程安全
- 无需接收位置更新时及时取消订阅,避免不必要的回调
- 可与
head_get_current_pos同步读取配合使用
