底层运动控制服务
约 1757 字大约 6 分钟
2025-05-29
提供机器人系统底层运动控制服务,通过 LowLevelMotionController 可以使用话题通信方式实现对机器人关节的指令控制和状态获取。
接口定义
LowLevelMotionController
是面向底层开发的运动控制器,支持对腿等运动部件的直接控制与状态订阅。
LowLevelMotionController
项目 | 内容 |
---|---|
函数名 | LowLevelMotionController |
函数声明 | LowLevelMotionController(); |
功能概述 | 构造函数,初始化低层控制器对象。 |
备注 | 构造内部资源。 |
~LowLevelMotionController
项目 | 内容 |
---|---|
函数名 | ~LowLevelMotionController |
函数声明 | virtual ~LowLevelMotionController(); |
功能概述 | 析构函数,释放资源。 |
备注 | 清理底层资源。 |
Initialize
项目 | 内容 |
---|---|
函数名 | Initialize |
函数声明 | virtual bool Initialize() override; |
功能概述 | 初始化控制器,建立底层连接。 |
返回值 | true 表示成功,false 表示失败。 |
备注 | 首次调用必须初始化。 |
Shutdown
项目 | 内容 |
---|---|
函数名 | Shutdown |
函数声明 | virtual void Shutdown() override; |
功能概述 | 关闭控制器,释放底层资源。 |
备注 | 配合 Initialize 使用。 |
SetPeriodMs
项目 | 内容 |
---|---|
函数名 | SetPeriodMs |
函数声明 | void SetPeriodMs(uint64_t period_ms); |
功能概述 | 设置控制周期时间(毫秒)。 |
参数说明 | period_ms :周期时间,单位为毫秒。 |
备注 | 非阻塞接口,控制器内部使用的周期参数,控制关节指令的发送频率。 |
SubscribeLegState
项目 | 内容 |
---|---|
函数名 | SubscribeLegState |
函数声明 | void SubscribeLegState(LegJointStateCallback callback); |
功能概述 | 订阅下肢关节状态数据 |
参数说明 | callback:回调函数,用于处理下肢关节状态的接收数据 |
备注 | 非阻塞接口。 |
PublishLegCommand
项目 | 内容 |
---|---|
函数名 | PublishLegCommand |
函数声明 | Status PublishLegCommand(const LegJointCommand& command); |
功能概述 | 发布下肢关节控制指令 |
参数说明 | command:包含目标角度/速度等控制信息的下肢关节控制指令 |
返回值 | Status::OK 表示成功,其他为失败。 |
备注 | 非阻塞接口。 |
EnableSendMsg
项目 | 内容 |
---|---|
函数名 | EnableSendMsg |
函数声明 | void EnableSendMsg(bool enable); |
功能概述 | LCM 通道开关 |
参数说明 | enable:LCM 通道开关信息 |
备注 | 使用高层运动控制时,关闭 LCM 通道,使用底层运动控制时,打开 LCM 通道。 |
类型定义
SingleLegJointCommand
— 单个下肢关节的控制命令
字段名 | 类型 | 描述 |
---|---|---|
q_des | float | 期望关节位置 |
dq_des | float | 期望关节速度 |
tau_des | float | 期望前馈力矩 |
kp | float | P 增益,必须为正数 |
kd | float | D 增益,必须为正数 |
LegJointCommand
— 整个下肢控制命令
字段名 | 类型 | 描述 |
---|---|---|
timestamp | int64_t | 时间戳(单位:纳秒) |
cmd | std::array<SingleLegJointCommand, kLegJointNum> | 控制命令数组 |
SingleLegJointState
— 单个下肢关节的状态
字段名 | 类型 | 描述 |
---|---|---|
q | float | 实际关节位置 |
dq | float | 实际关节速度 |
tau_est | float | 估计力矩 |
LegState
— 整个下肢状态信息
字段名 | 类型 | 描述 |
---|---|---|
timestamp | int64_t | 时间戳(单位:纳秒) |
state | std::array<SingleLegJointState, kLegJointNum> | 所有下肢关节状态 |
URDF 参考
底层运动控制机器人状态介绍
机器人底层运动主要是开发关节的三环控制给开发人员进行机器人运动能力的二次开发,基本的控制状态切换机制: