🧪 新教程持续更新中 · 从机械臂到传感器,跟着教程从零搭建
跳到主要内容

06 调试与标定 ​

成品用户可跳过本页:出厂已逐台完成标定与验证。仅在更换舵机/IMU、重新装盘、换齿, 或升级固件后怀疑标定漂移时,按本页顺序重新做一遍。

本页是装配、烧录、定零之后的整机功能检查与标定,按顺序做完即可投入使用。

调试时的供电:USB 只负责串口数据;c 标定只需要 IMU(舵机可以不上电), t / z / e 需要舵机 5 V 有电。若不想让 ESP32 同时接两路电源,可断开 5 V→ESP32 的分支、让 ESP32 只由 USB 供电,5 V 电源继续供舵机——这是正常接法,详见 04 页 4.4。

6.1 打开串口、看遥测 ​

在 SR-Support 目录、已激活 .venv 的终端里打开串口(COM27 换成实际串口):

bash
pio device monitor --rts 0 --dtr 0 -b 115200 -p COM27

(串口工具/串口助手(含 Windows UartAssist 下载)见 03 页 3.3。)

打开串口后,如果板子刚上电或按过 RST,会先看到启动日志;没有启动日志时按一下 RST 再看。之后每 250 ms 一行遥测:

text
IMU version 1.1.2
autorun on: get-up waits for a fall
up -0.01 +0.02 +1.00 | w  0.0  0.0  0.0 | q +0.00 +0.00 | qd  0.0  0.0 | run
字段含义怎么读
up世界 up 向量在机体坐标下的分量(x 前、y 左、z 上)直立 (0,0,1)、tilt≈0°;躺姿见 6.5 表(如 (-1,0,0)=pitch_pos)
w三轴角速度(rad/s)静止时≈0;扶正/翻滚时明显非零,跌倒门要求 `
q当前关节指令角(肩、肘,rad;无位置反馈)q=0 手臂竖直;肩 + → 大臂向 −Y,肘 + → 小臂向 +X
qd关节指令角速度一般不用看
mode运行模式run / hold / manual / auto

读数示例(hw_watch 窗口):

text
up  x+0.00 y+0.00 z+1.00 tilt  0.0   # 直立
up  x-1.00 y+0.00 z+0.00            # pitch_pos:顶部朝 +X
w   +0.0 +0.0 +0.0 rad/s |w| 0.0    # 静止
q   sh +0.00 el +0.00 mode hold     # 手臂竖直、待命

tilt 是 up 向量与竖直方向的夹角(由 up_z 算出),0° 表示完全直立。

数据一直滚动不好看时,用固定刷新窗口(命令照常输入):

bash
python tools/hw_watch.py --port COM27

窗口固定显示 up/倾角、角速度、关节角、模式与最后一条事件;在 cmd> 输入命令回车即发送, 事件同时写入 logs/hw_watch.log。跑完整扶正、需要保留每一行时,仍用 pio device monitor 或 tools/hw_monitor.py(后者每 5 秒把摘要写入日志)。

串口命令怎么发:保持监视器打开,直接输入命令并回车(单字符命令不用加引号)。 本页会用到的命令:

text
c        # 陀螺 + 加速度计标定(站立水平、静止)
t        # 舵机自检
k        # 读两舵机中位脉宽
m 0.5 0  # 手动测试肩方向
i / j    # 翻转 IMU X / Y 符号(只在方向相反时用)

完整命令表见 03 页 3.4。

快速自检脚本(先关闭上面的串口监视器,避免占用串口):

bash
python tools/hw_check.py --port COM27
python tools/hw_check.py --port COM27 --tilt 8

第一条读取 0.6 秒遥测;--tilt 8 期间用手倾斜机器人,会打印 up/角速度范围与倾角变化, 用来确认 IMU 不是卡死或方向接反。

6.2 IMU 检查与标定 ​

c 会做两件事:

  1. 陀螺零偏:静止采样 200 点(约 2 秒),取平均作为零角速度偏移;仅本次上电有效, 每次重启会自动重标;
  2. 加速度计零点:同一次采样取平均重力向量,要求机器人水平站立(重力全部在 +Z), 通过合理性检查后写入 NVS(重启自动加载)。

操作(舵机可以不上电):

  1. 先按 04 页 4.5 做机械方向自检(肩输出轴朝 IMU −Y、肘输出轴朝 IMU +X);

  2. 机器人直立、放在水平桌面,手离开,线不要拉;

  3. 在串口监视器或 hw_watch 的 cmd> 里输入 c 并回车:

    text
    c
  4. 保持静止约 2 秒,看到下面三行即成功:

    text
    gyro bias (rad/s): ...
    accel bias (m/s^2): ... (saved)
    calibration done; hold
  5. 若出现 accel cal rejected: |a|=...:说明没放平或还在动(重力模长偏离 9.8 超过 1.5 m/s²),零点保持不变,重新放稳再发 c。

验证:

  • 缓慢左右、前后倾斜,up 的 x/y 分量应跟手、无跳变;若方向相反,用 i / j 翻转 IMU 轴符号后重新 c;
  • 放倒静置 2 秒,up 应与 6.5 的躺姿表一致(如 (0,-1,0) = roll_neg)、底座面贴平;
  • 若躺姿下 up 长期偏斜 5° 以上,通常是加速度计零点没标好,重做本节。

成品出厂已标定并写入 NVS,无需重做;仅在更换/重新安装 IMU、或躺姿明显倾斜时执行。 c 只标 IMU,不改变舵机零点——舵机零点见 05 页。

如果校准前用过手动命令(遥测末尾是 manual),c 完成后会停在 hold/manual, 跌倒门不会自动扶正;保持机器人直立后发送 g 恢复运行,或直接复位。

6.3 舵机检查与方向自检 ​

检查方法预期
中位脉宽发送 kcenters: shoulder 1681 us, elbow 1456 us(2026-11 视觉中位固化值;以 05 页 重新标定为准)
肩中位微调o / p(每次 ±10 µs)手臂竖直时 q=0
方向m 0.5 0 / m 0 0.5肩 + 使大臂向 −Y;肘 + 使小臂向 +X
符号翻转v(肩)/ b(肘)方向反了才用
自检t两关节小幅动作后回中
回中m 0 0 或 r手臂竖直

关节限位(固件):

  • 肩:手动命令 [-1.85, +1.82] rad;肘:机械 ±1.55 rad(执行器内部可达);
  • m 手动命令的肘部限位为 [-0.90, +0.70] rad;
  • PWM 输出范围 500–2500 µs,50 Hz。

在串口监视器/串口助手的发送框里逐条输入(每条回车发送):

text
t
k
m 0.5 0
m 0 0.5
m 0 0

确认:肩 q>0 → 大臂向 −Y;肘 q>0 → 小臂向 +X; 方向反了用 v / b 翻转,或重装舵盘。

6.4 中位核对 ​

出厂已固化(肩 1681 µs / 肘 1456 µs),成品可跳过。DIY 流程中这一步应已在 05 零点校准 完成并把脉宽固化回 config.h(改过就重烧);这里用 k 核对中位与固化值一致即可。仅当换齿、拆装过手臂,或收臂后不在正中竖直时,才需要回 05 页重新定零并重烧。

6.5 四种躺姿与跌倒门 ​

姿态监视器 up物理含义
pitch_pos(-1, 0, 0)机体顶部指向 +X
pitch_neg(+1, 0, 0)机体顶部指向 −X
roll_pos(0, +1, 0)机体顶部指向 −Y
roll_neg(0, -1, 0)机体顶部指向 +Y

跌倒门条件(固件):

text
up_z < 0.30 且 |ω| < 0.9 rad/s,连续 25 拍(0.5 s)

满足后才会打印 getup start pose=... 并开始扶正。因此把机器人摆成躺姿后需要松手并 保持静止约 0.5 秒;放下后立即乱摆通常是手还在扶着或身体仍在滚动。

验证方法:分别把机器人摆成上表四种姿态,松手静止,观察串口是否在 0.5 秒内出现 getup start pose=<对应姿态>。

6.6 完成标准 ​

  • [ ] c 打印 accel bias ... (saved);
  • [ ] t 两关节方向正确;
  • [ ] k 中位与固化值一致(或已按 05 页重新定零并固化);
  • [ ] 四个躺姿都能触发 getup start。

← 返回教程目录