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

IMU モジュールを MicroDuck で使う ​

本モジュールは MicroDuck の胴体 IMU —— サーボバス上に載っている imu_to_dxl ボード —— を、I²C 接続の本モジュールに置き換えられます。

状態 ​

IMU データ経路:サンプリング・デコード・観測スロット実機で検証済み
MicroDuck ランタイム(robotd)への組み込み統合フェーズで対応予定

位置づけ:外付け I²C モジュールは過渡的な構成です。最終形態では IMU をロボット本体のハードウェアとメインコントローラに統合します。本ページの配線、座標系、キャリブレーション方法は統合後もそのまま使えます。

完全なガイドとコード:Juxi-Technology/imu-displace-microduck

あちらのリポジトリが本ページの正式版です。正確な配線、キャリブレーション手順、受け入れチェックリスト、実測値はすべてそこにあります。本ページは入口にすぎません。

配線 ​

モジュールICM-42670-P、I²C スレーブ 0x23
ピンGND / 3V3 / SDA / SCL
電源3V3。5V は不可(ホストの I/O は 3.3 V)
バス(公式 HAT)/dev/i2c-pihat = /dev/i2c-3。J6 の R18/R19 を R16/R17 に移すと /dev/i2c-4
アドレス衝突同じバスに 0x18(オーディオ)、0x19/0x68 または 0x6A(オンボード IMU)、0x29(ToF)が既にありますが、0x23 はどれとも衝突しません
bash
sudo apt install -y i2c-tools
sudo i2cdetect -y -r <バス番号>        # 23 が見えるはず

Dynamixel ID 200 にならない理由 ​

ID 200 はサーボバス上のデバイス番号です(1 本の半二重 TTL、1 Mbps、Dynamixel Protocol V2)。本モジュールが話すのは I²C(2 線、レジスタ読み書き)です。HAT の I²C ヘッダに繋いでも ID 200 にはなりません。ホストは 2 つのバスを別々に読み、1 つのセンササンプルに統合します。

検証(モジュールのみ、サーボ不要) ​

bash
cargo run -p duck-control --example imu_probe -- /dev/i2c-7 20
cargo run -p duck-control --example imu_to_observation -- /dev/i2c-7 20
期待値
サンプルレート約 100 Hz、読み取り失敗ゼロ
2 つ目のコマンドobs[0..3](ジャイロ)、obs[3..6](重力)、関節ブロックの不一致ゼロ

Jetson Orin Nano + /dev/i2c-7 での実測:99.4 Hz、1 サンプル 0.92 ms、読み取り失敗ゼロ。

参考取り付け ​

モジュールの 3 軸を胴体の軸に一致させます —— X 前 / Y 左 / Z 上 —— 物理的には部品面を上、Type-C を後方に向けます。このとき mount 回転は単位クォータニオンになります。

モジュール自身の座標系(直交する 3 姿勢で実測):部品面を上にして平置きすると重力は [0, 0, -1]、Type-C を上にすると [1, 0, 0]、部品面を右に向けて側立すると [0, 1, 0]。


今後の予定 ​

  • モジュールを robotd ランタイムに統合する:バスパス、IMU ソース、mount を設定可能にする。
  • IMU 専用の取得スレッドと共有スロットを用意し、I²C 読み取りが制御 tick を占有しないようにする。
  • 実際の 15 サーボバスと歩行ポリシーで機体全体を検証する。最終形態では IMU を機体ハードウェアとメインコントローラに統合する。