# 第13章: 四脚ロボットを歩かせる — Physical AI への一歩 自作 OS でサーボを制御し、四脚ロボットを歩かせます。組み立ては[四脚ロボットの組み立て](../hardware/index.md)を参照。 ## サンプルコード - ディレクトリ: `docs/os-on-arduino/code/13_quadruped` - ビルドと書き込み: ```bash uv run pio run -d 13_quadruped -t upload uv run pio device monitor -b 115200 ``` コードを見る: [docs/os-on-arduino/code/13_quadruped](https://github.com/iory/learning-os-from-arduino/tree/main/docs/os-on-arduino/code/13_quadruped) ## ソースコード この章のスケッチです。ファイル名をクリックすると開きます。コードは原稿リポジトリから自動で同期されているので、ここに出ているものが常に最新です。 :::{dropdown} `src/main.cpp` — 203 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/src/main.cpp) ```{literalinclude} ../../../../code/13_quadruped/src/main.cpp :language: cpp :linenos: ``` ::: :::{dropdown} `include/arduino_quad_policy.h` — 81 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/include/arduino_quad_policy.h) ```{literalinclude} ../../../../code/13_quadruped/include/arduino_quad_policy.h :language: cpp :linenos: ``` ::: :::{dropdown} `include/leg_ik.h` — 13 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/include/leg_ik.h) ```{literalinclude} ../../../../code/13_quadruped/include/leg_ik.h :language: cpp :linenos: ``` ::: :::{dropdown} `include/quad_calib.h` — 26 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/include/quad_calib.h) ```{literalinclude} ../../../../code/13_quadruped/include/quad_calib.h :language: cpp :linenos: ``` ::: :::{dropdown} `include/quad_control.h` — 187 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/include/quad_control.h) ```{literalinclude} ../../../../code/13_quadruped/include/quad_control.h :language: cpp :linenos: ``` ::: :::{dropdown} `include/servo_bus.h` — 24 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/include/servo_bus.h) ```{literalinclude} ../../../../code/13_quadruped/include/servo_bus.h :language: cpp :linenos: ``` ::: :::{dropdown} `src/gait.cpp` — 56 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/src/gait.cpp) ```{literalinclude} ../../../../code/13_quadruped/src/gait.cpp :language: cpp :linenos: ``` ::: :::{dropdown} `src/leg_ik.cpp` — 44 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/src/leg_ik.cpp) ```{literalinclude} ../../../../code/13_quadruped/src/leg_ik.cpp :language: cpp :linenos: ``` ::: :::{dropdown} `src/leg_ik_test.cpp` — 33 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/src/leg_ik_test.cpp) ```{literalinclude} ../../../../code/13_quadruped/src/leg_ik_test.cpp :language: cpp :linenos: ``` ::: :::{dropdown} `src/servo_bus.cpp` — 176 行 :icon: code [GitHub で開く](https://github.com/iory/learning-os-from-arduino/blob/main/docs/os-on-arduino/code/13_quadruped/src/servo_bus.cpp) ```{literalinclude} ../../../../code/13_quadruped/src/servo_bus.cpp :language: cpp :linenos: ``` ::: ## 実機での出力 Arduino UNO R4 WiFi の実機で実際に取得した出力です(macOS / Windows の 両方で同じ結果を確認しています)。手元の出力と見比べてください。 シェルに `iktest` を送ったところです。サーボをつないでいなくても、この往復テストは動きます(脚は動きません)。 ```text 速度設定: 0 / 16 !! 一部失敗 (遅く歩きます) !! 起動時の関節読み取りに失敗 home rad: 1.0307 -1.7629 1.0307 -1.7629 1.0307 -1.7629 1.0307 -1.7629 commands: iktest / stand / trot / rl / stop / free loop avg 24737 us max 24737 us late 1/1 skipped 0 read_fail 1 target=(0.000, 0.1600) hip=40.20 knee=-67.47 err=0.000000 target=(0.040, 0.1400) hip=32.13 knee=-80.90 err=0.000000 ... ``` サーボをつないでいないときは、`!!` の付いた 2 行(速度設定と起動時の関節読み取りの失敗)は、サーボが応答しないので出て当然です。 校正して歩かせると、こうなります(手順は {doc}`../hardware/walk` の「実機で歩かせる」)。 ```{figure} ../_static/quadruped_walk.gif :name: fig-ch13-walk :width: 80% 自作 OS で 8 個のサーボを制御して歩く四脚ロボット(1.5 倍速) ``` ## つまずきやすいポイント (読者からの質問に応じて随時追記します。質問は [GitHub Issues](https://github.com/iory/build-your-own-arduino-rtos/issues) へどうぞ)