跳转到内容

概述

Lite3 Motion SDK 为底层 UDP 运动控制库,负责与 Lite3 机器人固件进行直接通信,实现了模型预测控制算法(MPC)在 Lite3 上的部署。开发者可以通过该 SDK 读取机器人本体感知数据(关节状态、IMU、接触力等),并向 12 个关节下发控制指令。主要流程如下:

测试流程

Motion SDK 的职责包括:

  • 通过 UDP 接收机器人上报的关节状态、IMU 数据和接触力信息
  • 通过 UDP 向机器人下发 12 关节控制指令
  • 管理 SDK 与机器人之间的控制权切换
  • 提供定时器、轨迹规划等辅助工具
Lite3_MotionSDK/
├── include/
│ ├── common/
│ │ ├── basesocket.hpp # Socket 基类
│ │ ├── command.h # 命令协议定义
│ │ ├── udpserver.hpp # UDP 服务端(绑定端口、广播)
│ │ └── udpsocket.hpp # UDP 收发实现
│ ├── dr_timer.h # 高精度定时器(基于 timerfd + epoll)
│ ├── motionexample.h # 站立示例接口
│ ├── receiver.h # 数据接收器
│ ├── robot_types.h # 机器人数据类型定义
│ └── sender.h # 命令发送器
├── src/
│ └── motionexample.cpp # 站立示例实现
├── lib/
│ ├── eigen3/ # Eigen 矩阵库
│ ├── libdeeprobotics_legged_sdk_aarch64.so # ARM 预编译库
│ └── libdeeprobotics_legged_sdk_x86_64.so # x86 预编译库
├── main.cpp # 入口示例
├── CMakeLists.txt # 编译配置
└── LICENSE

Motion SDK 提供了低速端(关节端)的 5 个控制参数接口:posgoalpos_{goal}、velgoalvel_{goal}、kpkp、kdkd、tfft_{ff}。

当 SDK 有指令下发时,底层控制器会优先执行 SDK 的控制指令,将指令分发给机器狗的 12 个关节。底层关节根据 5 个控制参数可计算出最终关节目标力矩为:

T=kp×(posgoal−posreal)+kd×(velgoal−velreal)+tffT = kp \times (pos_{goal} - pos_{real}) + kd \times (vel_{goal} - vel_{real}) + t_{ff}

驱动器端会将最终的关节目标力矩转化成期望电流,并以 20kHz 的频率进行闭环控制。

控制流程如下图所示:

控制流程图

控制方式posgoalpos_{goal}velgoalvel_{goal}kpkpkdkdtfft_{ff}说明
位置控制3.1403000电机输出轴稳定在固定位置
速度控制05010电机以目标速度旋转
阻尼控制00010纯阻尼,无主动力矩
力矩控制00003纯前馈力矩输出
零力矩控制00000关节自由摆动
混合控制3.1403011位置 + 阻尼 + 前馈

当 SDK 没有指令下发时,经过 1 秒的超时判断后,底层控制器会拿回控制权,进入阻尼保护模式一段时间后清空关节指令。因此,开发者需要保证指令的持续下发或主动归还控制权。

资源说明
Lite3_MotionSDKMotion SDK 代码仓库