DEEP 43 · 第五辑 · 电路 · LEARN NOTES

收进学习手册 · 2026-09-11 · duck.whatled.com

解读 43 · imu_to_dxl:这块自绘板要解决什么

解读对象:microduck-replica/docs/imu_to_dxl-设计包/设计规格.md + microduck-replica/hardware/imu_to_dxl/README.md(自绘,未打样)
需要的前置:解读 41(为什么 IMU 要挂在舵机总线上)。

使命一句话:让 IMU 伪装成一个舵机

Dynamixel Protocol V2 是舵机的串行通信协议,每台设备有个 ID。自绘板做的事:把 LSM6DSV16X 姿态芯片的数据打包,让它对外表现得像 ID 200 的"舵机"。于是主控不需要第二条总线、不需要新驱动——用读舵机寄存器的方式要姿态。

设计规格.md 把主机侧预期写成验收标准,全部标注源码行号:

项 值 出处
总线 ID 200 model.rs L78
波特率/格式 1 Mbps, 8N1 model.rs L80
读地址/长度 124 / 12 字节 bus.rs L27–28
主机超时 30 ms bus.rs L49

12 字节里装什么

字节 内容
0..6 陀螺 x/y/z,i16 小端原始计数,量程 ±500 dps(主机按 17.5 mdps/LSB 换算)
6..12 姿态四元数 x/y/z,IEEE fp16 半精度

两个省带宽的巧思:姿态解算交给芯片——LSM6DSV16X 片上有 SFLP 硬件融合块,直接输出四元数,主控不跑融合算法;四元数本来有 4 个分量,但单位四元数满足 w=√(1−x²−y²−z²),只传 x/y/z,主机自己补 w,12 字节刚好一次读完。另有 20 字节诊断块(原始加计、采样计数、状态标志),主机只读前 12。

板上三样东西

MCU(STM32G031F8P6,本仓选型;官方用什么无从还原)收包组包 + 读 IMU;LSM6DSV16X 出数据;SN74LVC2G241 双缓冲做单线半双工收发。供电直接从总线取。元件少、协议公开,这是整个项目里最值得自己画的一块板。

为什么装躯干、朝向写死

策略观测里的角速度和投影重力,只取决于 IMU 固连刚体的姿态。头挂在脖子三个串联关节之后,装头里读到的是头的姿态——仿真把传感器绑在 trunk_base,实物装头上就是 sim-to-real 失配。固件里 DEFAULT_MOUNT = [√½, 0, √½, 0] 把芯片读数旋到躯干系(trunk = [+raw_z, +raw_y, −raw_x],绕 Y +90°)。位置在躯干内可自由选,朝向必须确定并已知。

你带走的收获

  1. 协议伪装(设备虚拟化):只要在总线上表现得像个标准从机,主机不关心里面是什么芯片——新传感器可以"借壳"旧协议接入。
  2. 数学性质能省字节:单位四元数少传一个分量,是"利用约束换带宽"的通用手法。
  3. 能下沉的算力就下沉:片上融合块把姿态解算从主控挪进传感器,主循环里少一段代码就少一个出错点。
  4. 验收标准先于设计:先把主机怎么读(地址、长度、超时、字节序)钉死,固件照着实现,联调才有仲裁依据。

延伸

什么鸭 WHATDUCK · 复刻学习笔记 ← 全部手册 · 首页