🧪 新教程持續更新中 · 由機械臂到傳感器,跟隨教程從零搭建
跳到主要內容

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> 輸入命令按 Enter 即傳送, 事件同時寫入 logs/hw_watch.log。跑完整扶正、需要保留每一行時,仍用 pio device monitor 或 tools/hw_monitor.py(後者每 5 秒把摘要寫入日誌)。

串列埠命令怎麼發:保持監視器開啟,直接輸入命令並按 Enter(單字元命令不用加引號)。 本頁會用到的命令:

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 並按 Enter:

    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。

在串列埠監視器/串列埠助手的傳送框裡逐條輸入(每條按 Enter 傳送):

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。

← 返回教程目錄