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

Motion SDK 的职责包括:
- 通过 UDP 接收机器人上报的关节状态、IMU 数据和接触力信息
- 通过 UDP 向机器人下发 12 关节控制指令
- 管理 SDK 与机器人之间的控制权切换
- 提供定时器、轨迹规划等辅助工具
项目目录结构
Section titled “项目目录结构”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关节控制模型
Section titled “关节控制模型”Motion SDK 提供了低速端(关节端)的 5 个控制参数接口:、、、、。
当 SDK 有指令下发时,底层控制器会优先执行 SDK 的控制指令,将指令分发给机器狗的 12 个关节。底层关节根据 5 个控制参数可计算出最终关节目标力矩为:
驱动器端会将最终的关节目标力矩转化成期望电流,并以 20kHz 的频率进行闭环控制。
控制流程如下图所示:

控制参数使用举例
Section titled “控制参数使用举例”| 控制方式 | 说明 | |||||
|---|---|---|---|---|---|---|
| 位置控制 | 3.14 | 0 | 30 | 0 | 0 | 电机输出轴稳定在固定位置 |
| 速度控制 | 0 | 5 | 0 | 1 | 0 | 电机以目标速度旋转 |
| 阻尼控制 | 0 | 0 | 0 | 1 | 0 | 纯阻尼,无主动力矩 |
| 力矩控制 | 0 | 0 | 0 | 0 | 3 | 纯前馈力矩输出 |
| 零力矩控制 | 0 | 0 | 0 | 0 | 0 | 关节自由摆动 |
| 混合控制 | 3.14 | 0 | 30 | 1 | 1 | 位置 + 阻尼 + 前馈 |
当 SDK 没有指令下发时,经过 1 秒的超时判断后,底层控制器会拿回控制权,进入阻尼保护模式一段时间后清空关节指令。因此,开发者需要保证指令的持续下发或主动归还控制权。
| 资源 | 说明 |
|---|---|
| Lite3_MotionSDK | Motion SDK 代码仓库 |