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 換成實際串列埠):
pio device monitor --rts 0 --dtr 0 -b 115200 -p COM27(串列埠工具/串列埠助手(含 Windows UartAssist 下載)見 03 頁 3.3。)
開啟串列埠後,如果板子剛上電或按過 RST,會先看到啟動日誌;沒有啟動日誌時按一下 RST 再看。之後每 250 ms 一行遙測:
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 視窗):
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° 表示完全直立。
資料一直滾動不好看時,用固定刷新視窗(命令照常輸入):
python tools/hw_watch.py --port COM27視窗固定顯示 up/傾角、角速度、關節角、模式與最後一條事件;在 cmd> 輸入命令按 Enter 即傳送, 事件同時寫入 logs/hw_watch.log。跑完整扶正、需要保留每一行時,仍用 pio device monitor 或 tools/hw_monitor.py(後者每 5 秒把摘要寫入日誌)。
串列埠命令怎麼發:保持監視器開啟,直接輸入命令並按 Enter(單字元命令不用加引號)。 本頁會用到的命令:
c # 陀螺 + 加速度計標定(站立水平、靜止)
t # 舵機自檢
k # 讀兩舵機中位脈寬
m 0.5 0 # 手動測試肩方向
i / j # 翻轉 IMU X / Y 符號(只在方向相反時用)完整命令表見 03 頁 3.4。
快速自檢指令碼(先關閉上面的串列埠監視器,避免佔用串列埠):
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 會做兩件事:
- 陀螺零偏:靜止取樣 200 點(約 2 秒),取平均作為零角速度偏移;僅本次上電有效, 每次重啟會自動重標;
- 加速度計零點:同一次取樣取平均重力向量,要求機器人水平站立(重力全部在 +Z), 通過合理性檢查後寫入 NVS(重啟自動載入)。
操作(舵機可以不上電):
先按 04 頁 4.5 做機械方向自檢(肩輸出軸朝 IMU −Y、肘輸出軸朝 IMU +X);
機器人直立、放在水平桌面,手離開,線不要拉;
在串列埠監視器或
hw_watch的cmd>裡輸入c並按 Enter:textc保持靜止約 2 秒,看到下面三行即成功:
textgyro bias (rad/s): ... accel bias (m/s^2): ... (saved) calibration done; hold若出現
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 舵機檢查與方向自檢
| 檢查 | 方法 | 預期 |
|---|---|---|
| 中位脈寬 | 傳送 k | centers: 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.55rad(執行器內部可達); m手動命令的肘部限位為[-0.90, +0.70]rad;- PWM 輸出範圍 500–2500 µs,50 Hz。
在串列埠監視器/串列埠助手的傳送框裡逐條輸入(每條按 Enter 傳送):
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 |
跌倒門條件(韌體):
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。

