06 デバッグとキャリブレーション
完成品ユーザーはこのページをスキップできます:工場で全個体をキャリブレーションし、検証しています。 これらの手順をやり直すのは、サーボ/IMU の交換後、ホーンの再取り付け後、またはファームウェア更新が キャリブレーションに影響した疑いがある場合のみです。
これは組立、書き込み、ゼロ点校正の後のロボット全体の機能チェックとキャリブレーションです。ロボットを使用する前に順番に進めてください。
デバッグ中の給電:USB はシリアルデータのみを伝送します。
cは IMU だけで足ります(サーボは 無給電で構いません)。t/z/eは 5 V サーボレールの給電が必要です。ESP32 を 2 つの電源から 給電したくない場合は、ESP32 への 5 V 分岐を外し、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 を 1 回押してください。その後、250 ms ごとに 1 行のテレメトリが流れます。
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)、傾き≈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 # upright
up x-1.00 y+0.00 z+0.00 # pitch_pos: top points +X
w +0.0 +0.0 +0.0 rad/s |w| 0.0 # still
q sh +0.00 el +0.00 mode hold # arm vertical, idletilt は up ベクトルと鉛直方向のなす角です(up_z から算出)。0° は完全な直立を意味します。
スクロールするストリームが読みにくい場合は、固定行のライブウィンドウを使います(コマンドも引き続き使えます):
python tools/hw_watch.py --port COM27up/傾き、角速度、関節角度、モード、直近のイベントをその場で再描画します。cmd> で入力して Enter を押すとコマンドを送信でき、イベントは logs/hw_watch.log にも追記されます。生の行がすべて重要な起き上がり実行では、引き続き pio device monitor または tools/hw_monitor.py を使用してください(後者は 5 秒ごとにログへサマリを書き込みます)。
シリアルコマンドの送り方:モニタを開いたまま、コマンドを入力して Enter を押します(1 文字コマンドに引用符は不要)。このページで使うコマンド:
c # gyro + accel calibration (robot level and still)
t # servo self-test
k # read both servo center pulses
m 0.5 0 # manual shoulder direction test
i / j # flip IMU X / Y signs (only if a direction is reversed)全コマンド表は 03 ページ 3.4 節にあります。
クイックセルフチェックスクリプト(先にシリアルモニタを閉じてポートを空けてください):
python tools/hw_check.py --port COM27
python tools/hw_check.py --port COM27 --tilt 81 つ目のコマンドは 0.6 秒分のテレメトリを読み取ります。--tilt 8 ではロボットを手で傾けると、up/ジャイロの範囲と傾きの範囲が表示され、IMU の固着や向きの誤りを発見できます。
6.2 IMU のチェックとキャリブレーション
c は 2 つのことを行います:
- ジャイロゼロバイアス:静止サンプル 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; holdaccel 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)。 - 横倒し時に 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 出力は 50 Hz で 500〜2500 µs。
これらをシリアルモニタ/アシスタントの送信ボックスに 1 つずつ入力します(毎回 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 4 つの横倒し姿勢とフォールゲート
| 姿勢 | モニタの 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 and |ω| < 0.9 rad/s for 25 consecutive ticks (0.5 s)この条件を満たしたときだけ、ファームウェアは getup start pose=... を表示して開始します。したがって、ロボットを置いてから手を離し、約 0.5 秒間静止させてください。置いた直後に揺らすと、手がまだ触れているか機体がまだ転がっていると判定されます。
確認:4 つの姿勢それぞれにロボットを置き、手を離して静止させます。0.5 秒以内にシリアルログへ getup start pose=<matching pose> が表示される必要があります。
6.6 完了条件
- [ ]
cがaccel bias ... (saved)を出力する。 - [ ]
tで両関節の方向が正しいことを確認できる。 - [ ]
kが書き込み済みのセンターと一致する(または 05 ページに従って再ゼロ点校正して書き込んだ)。 - [ ] 4 つの横倒し姿勢すべてで
getup startがトリガーされる。

