左肩を上げ、右肩を下げます。姿勢をある目標値に向けて動かします。コマンドの種類によってモータに通電します。以下のタイミングチャートは、モータ駆動信号のパターンを描いたものです。三つのパラメータが用意されています。tDriveモータに通電する時間を100マイクロ秒単位で与えます。この時間が長くなるとモータに流れる電流が大きくなり力が出ます。tIdleモータに電流を流さない時間を100マイクロ秒単位で与えます。モータ・ドライバは、この期間休むことができます。nPulse一動作あたりのモータ駆動パルスの数を与えます。おおざっぱな動作をするようになります。コマンドによっては、片方のモータだけが動作することもあります。モータ駆動プログラム以上の方針を元にモータ駆動プログラムを作成します。以下のプログラムを"processAcc(void)"関数の直後に追加します。}}更にメインプログラムは、以下のように変更します。}これで、コマンドに従ってモータが動くようになります。プログラムを書き込んで、デバッガから実行させてもモータは動きません。モータが少しだけ動きます。これが、下降コマンドの動作です。他のコマンド(4,16,32)を送ると別の動作をします。これらをつなぐ制御戦略を決めます。指示された方角を向く戦略まずは、パラメータで指示された方角に向くプログラムです。この場合の方角は、地理上の方角ではなく上下左右の方角です。センサの値によって以下のような動作を行わせます。左にロールして上昇このような戦略にしました。以下のプログラムを"processMot(void)"関数の直後に追加します。中心の値は理想的には512になります。Y=512を目標の値に設定します。X,Yの許容誤差を2にしてあります。デバッガから変更して適当な値を見つけてください。以下のような値に設定してみました。これも私の経験値ですので色々な値を試してみてください。このパラメータは、使用する電池の消耗度にも影響されるようです。以下のように変更します。}これで、指示された方角に向くと静止するようになるはずです。値を大きくしてみてください。targetXの値を変えると左右の傾きが変わります。右左に揺れたまま落ち着きません。左右の揺れも検出してしまっているためです。パラメータを取り入れました。左右に揺れてしまいます。パラメータを小さくして、一動作当たりの移動量を減らしています。本来の意味の「制御」を行う必要があります。ここでは、そこまでの厳密な制御は扱いません。最後に腕立て動作をする戦略プログラムを導入します。以下のプログラムを"specifyStrategy(void)"関数の直後に追加します。}}プログラムは、上昇中と下降中で処理が大きく二つに分かれています。目標値を更新していきます。ロボットの動きを確かめながら変更することができます。以下のように変更します。}これで、腕立て動作を行うロボットの完成です。左右の傾きを水平に保とうとします。姿勢を保つために腕の曲げ方を工夫して腕立て動作を行います。noritan.org。