🧪 新しいチュートリアルを公開中 — ロボットアームからセンサーまで
コンテンツへスキップ

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 はご自身のポート):

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

(シリアルツール / Windows 用 UartAssist のダウンロードは 03 ページ 3.3 節。)

ポートを開いたあと、ボードの電源を入れた直後か RST を押した直後なら起動ログが最初に表示されます。起動ログがない場合は RST を 1 回押してください。その後、250 ms ごとに 1 行のテレメトリが流れます。

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)、傾き≈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   # 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, idle

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 を押します(1 文字コマンドに引用符は不要)。このページで使うコマンド:

text
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 節にあります。

クイックセルフチェックスクリプト(先にシリアルモニタを閉じてポートを空けてください):

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

1 つ目のコマンドは 0.6 秒分のテレメトリを読み取ります。--tilt 8 ではロボットを手で傾けると、up/ジャイロの範囲と傾きの範囲が表示され、IMU の固着や向きの誤りを発見できます。

6.2 IMU のチェックとキャリブレーション ​

c は 2 つのことを行います:

  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)。
  • 横倒し時に 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 出力は 50 Hz で 500〜2500 µs。

これらをシリアルモニタ/アシスタントの送信ボックスに 1 つずつ入力します(毎回 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 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 方向を向く

フォールゲート条件(ファームウェア):

text
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 がトリガーされる。

← チュートリアル目次に戻る