2021年4月27日火曜日

ロボットを完成させよう!

いよいよ仕上げです。

本ではp.181に「リスト5-19のプログラムまでで一応の完成」と書かれているので今回はリスト5-19を動かすところまでいきます。

ちなみに、今回ロボットを本格的に動かすにあたって乾電池を「EVOLTA NEO」から「エネループ」に変更しました。というのも、本格的に動かし始めると結構すぐに電池がなくなってしまい何回も交換することになったからです。エネループは充電器等初期投資がかかりますが長い目で見ればお得なのではないかと思いました。

「エネループ」に切り替える際に心配だったのが電池の起電力です。アルカリ乾電池は1.5Vと書かれていますが「エネループ」は1.2Vです。電圧が足りなくなるとマイコンが暴走してしまうのでこのロボットの場合、4本で4.4V保てるかどうかが重要になってきます。パナソニックのウェブサイトから抜粋した以下のグラフによると単3形電池のデータではありますが500mA流れていても1.2V以上キープできるようなので問題無さそうでした。

では、早速リスト5-19をロボットに書き込みます。基本的に前回のリスト5-6が動くところまで出来ていればリスト5-19を動かせる状態になっているはずです。自分のロボット用に求めたオフセット値の書き込みを忘れないようにしましょう。

そのまま動かせば完成!...となれば良かったのですが今回も幾つか注意すべき点がありますので箇条書きします。

  • rtrn(右旋回)のモーションデータを見ると左足首のロール軸が90度のままで固定されてしまっています。左旋回のデータを参考にしてrtrnの[5][3]を90から100に変更します。
  • 各モーションは独立して勝手に動く(モーション間の遷移動作無し)ので実際にロボットをリモコンで動かすときは各モーションとモーションの間に直立姿勢を挟んで動かすことになると思います。各モーションの途中の姿勢から直立姿勢へと遷移する際(およびその逆動作時)に、姿勢によってはサーボモータが高速で動いて電圧不足でロボットが落ちることがあります。これを避けるためにソースコードを変更しました。サーボモータの動作を補間してゆっくり動かすようにします。具体的には、
    • リモコンからの信号を処理しているswitch文のSTOP時の処理(case 32:)中でkeyFrameとnextKeyFrameとdivCounterに0を代入。およびtempAngles[i] = 90;としている処理をコメントアウト。
    • // サーボ角度計算 のコメントが書かれているところから // サーボ信号出力 のコメントが書かれているところまで以下のように変更
      // サーボ角度計算
      if(keyFrame == 0 && nextKeyFrame == 0){//STOPからの最初のモーション
        for(int i=0; i<12; i++) {
          tempAngles[i] = 90 + int8_t((action[nextKeyFrame][i] - 90) * divCounter / action[nextKeyFrame][12]);
        }
      }else{
        for(int i=0; i<12; i++) {
          tempAngles[i] = action[keyFrame][i] +
               int8_t((action[nextKeyFrame][i] - action[keyFrame][i])
                    * divCounter / action[nextKeyFrame][12]);
        }
      }
    }else{
      //STOPモード
      for(i = 0; i < 12; i++) {
        if(tempAngles[i] < 90) tempAngles[i]++;
        if(tempAngles[i] > 90) tempAngles[i]--;
      }
    }
 

  • リスト5-18には書かれているのですが、なぜかリスト5-19ではSTOP時に音を消す処理が抜けていますので、上記STOP時の処理(case 32:)中に ledcDetachPin(audPin); を挿入します。
  • 足首のロール軸動作時にロボットのフレーム同士がぶつかることがあったので足の方のフレームを削りました(下写真赤丸部分)。

という感じで、結構苦労しました...

結果、以下のように

LEDオン→前進→後退→左横歩行→右横歩行→左旋回→右旋回→LEDオフ

で動作させることが出来ました。

一応、これで一通り完成ですが、次回は起き上がり動作に挑戦してみたいと思います。

0 件のコメント:

コメントを投稿