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オフ

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

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

2021年4月21日水曜日

ロボットを歩かせよう!

ではいよいよ、ロボットを歩かせます。

といっても、今回は「簡易歩行」であって最終的な歩行とは異なるモーションとなります。

まずは本のリスト5-1のプログラムを動かしてサーボ1台ずつのオフセットをざっくり見つけていきます。

次にリスト5-2のプログラムを動かして全体でオフセットの微調整を行います。両脚の位置が左右対称に揃って両方の足裏が全体で偏りなく接地していればOKです。

とりあえず、上半身のサーボ(sv4~sv7)はオフセット0のままで問題ないと思います。

ここまで出来たら途中を飛ばしてリスト5-6のプログラムを動かせるはずです。

ちなみに、上手くいかないときはネジの緩みがないか確認すると良いと思います。私の場合はサーボをフレームにネジ1本で止めている箇所(足首と股関節のピッチ軸)が緩んでいたので締め直しました。締めすぎるとネジがバカになるので慎重に。

はい、動きました。

この歩き方だと机の上だと滑って上手く進まないのでノートパソコンのカバーの上で歩かせました。

若干右寄りに進んでいますがとりあえずこのまま先に進みます。

次回は、ロボットを完成させるところまで行く予定です。


2021年4月18日日曜日

ロボットを組み立てよう!

今回はロボットの筐体部分を組み立てていきます。

まず、パーツを切り出します。


ひとつひとつニッパーで切り離してヤスリで仕上げる作業は結構大変でした。

組立に際して幾つか注意が必要だった箇所を箇条書きしておきます。

  • 本のp.137に脚部の組み立てについて書かれていますが、ここでサーボホーンに使用するネジを長いものではなく短いものに変更(どちらもサーボに付属のもの)しておくと後々p.181でネジを交換する必要が無くなります。

  • 本のp.139で肩の組み立てについて書かれていますが、ここもサーボホーンに使用するネジをネジを長いものではなく短いものに変更した方が良いと思います。長いままだと肩を回転させたときにサーボのケーブルが絡みやすくなりますので。

  • 本のp.141で両脚の取り付けについて書かれていますが、基板上のターミナルブロックの側面の突起とサーボモータが干渉してそのままでははまりませんでした。ターミナルブロックの突起をニッパーで切り取ったらはまりました。

  • 本のp.143のフロントプレートの取り付けの際に気がついたのですが、サーボからケーブルが出ている位置が本のもの(ほぼ底面から出ている)と異なり側面の途中から出ているため(下の秋月電子通商の商品ページからの写真参照)フロントプレートのデフォルトの穴ではケーブルを逃げさせるのに大きさが足りません。これだけのためにもう一回基板を発注するのはしんどいし、穴を広げるのも大変そうだったので無理矢理(多少プレートが反りますが)ネジ止めしてしまいました。余裕がある方は基板の発注前にCADの図面上で穴を広げることをおすすめします。

  • フロントプレートに頭部と腰部のプレートを固定する方法が本には明示されていませんでしたが、5mmの樹脂スペーサーを挟んで両側からM2.6の小ねじで固定すれば良いようです。

というわけで、なんとか組み立て完了しました!

差し込みのパーツではまりが緩いところはエポキシ系接着剤で接着しました。

ちなみに私はタッピングネジを回しているときに(結構な力が必要)、手が滑ってドライバーが自分の手に刺さってしまいました。

皆さんも怪我の無いように注意して下さいね。

次回はサーボの角度調整&簡易歩行をする予定です。

2021年4月13日火曜日

サーボの動作確認をしよう!

 前回までにマイコンにプログラムを書き込んで動かすところまで出来ました。

今回は、サーボを接続してプログラムから動かしてみます。

「よさイチつくロボ」の本ではp.132でsv0端子に接続されたサーボの角度を90度にするプログラムが紹介されています。ただ、これだとsv0端子の確認しか出来ず(端子はsv0~sv11まで12個あります)、また同時に複数のサーボを動かすことが出来るかどうかのチェックが出来ません。

そこで本のp.156のリスト5-7のプログラムを使って歩行(左足へ重心を移す→右足を前に動かす→右足へ重心を移す→左足を前に動かす)時の動きがちゃんと出来るかどうか確認しました。


はい、ちゃんと動きました!歩行動作ではsv0とsv11を使用しないので、この2つは別途動かして動作確認をしました。

...と、これで終わりだったら簡単だったのですが、残念ながら思わぬ事態が発生しました。しばらく動かしているとサーボが暴走し始めたのです。ロボット組立後にこの暴走が起こっていたらサーボやフレームを壊していたかもしれませんので、この段階で発見できて良かったと思います。

最初は原因が分からず途方に暮れましたが、試しに本のp.134のプログラムを参考にしながらサーボの角度を0度→90度で往復運動するようにしてみました。この場合、上記の歩行プログラムと異なりサーボは最高速度で動くことになります。

すると、サーボ1個および2個まではちゃんと動作していたのですが3個同時に動かすと暴走することが分かりました。そこで電源の端子電圧を計測してみるとサーボ駆動時にかなりの電圧低下が起こっていました。どうやら、

サーボを複数動かす

大電流が流れる

電池の内部抵抗のため起電力が大きく落ちる

三端子レギュレーターが3.3Vを発生できなくなる

マイコンが暴走

という流れのようです。

これは困った...

マイコンの暴走を防ぐため三端子レギュレーターの出力側に1000μFの電解コンデンサーを取り付けたりしましたが恒常的な電力不足には通じませんでした。

結局、内部抵抗の低い高級アルカリ乾電池「EVOLTA NEO」に交換したら暴走しなくなりました。安物のアルカリ乾電池では力不足だったようです。

「EVOLTA NEO」の場合、上記歩行プログラムは問題なく動きますし、サーボを最高速度で動かしても3個までは大丈夫です。ただ、4個だと暴走するのでロボットのモーションをつくるときは「なるべく少数のサーボでゆっくりの動き」を心がけた方が良さそうです。

いやいや、今回はかなり焦りました。

皆さんも安物の乾電池は使わないようにしましょうね。

最後に、次回以降の組立に入る前にサーボの角度を全部90度に合わせておきました。

次回はロボットのフレームを組み立てていく予定です。

2021年4月7日水曜日

電子回路の動作確認をしよう!

 さて、前回半田付けをした基板の電子回路の動作確認を行います。

ドキドキしますね。

半田付けが得意でない私は動作確認の瞬間はいつも緊張します。

本のp.125からの説明に従ってPCにAdruinoIDEをインストールすれば基板上で動くソフトウェアの開発環境の構築は完了です。

では、基板とPCを接続します。

あれ?

購入した「USBシリアル変換モジュール」のピンが細くてブレッドボード用の「ジャンパーワイヤ」がちゃんとはまらない...スカスカだ...

これじゃ、基板と接続できないじゃん...

どうしましょう...


はいっ!

たまたま家にブレッドボードと両端オスのジャンパーワイヤが落ちていたので、これで接続しましょう。


こんな感じです。

あれ?

接続するケーブルは6本なのに、本のp.121のパーツリストで指定されているピンソケットの端子数は8。

うーん、これは6ピンの間違いでしょうかね。

まあ、上記の写真のように「大は小を兼ねる」状態なので今回は大丈夫ですが。

あと、パーツリストには載っていませんが「USBシリアル変換モジュール」とPCを接続するUSBケーブルが一般的な「Aオス-マイクロBオス」ではなくて若干マイナーな「Aオス-ミニBオス」となりますので、持っていない人は購入するのを忘れずに。


ようやく準備が整ったので、本のp.128に従ってLEDを点滅させるLチカをインストールして走らせてみます。

はい、ちゃんと動きました!

これで一安心です。


今回は結構トラブルが多かったですね。

今後の皆様のご参考のためにまとめますと、

・ブレッドボード買いましょう

・ジャンパーワイヤは両端オスを買いましょう

・ピンソケットは8ピンではなく6ピンのものを買いましょう

・(持って無ければ)Aオス-ミニBオスUSBケーブルを買いましょう

ですね。

次回はサーボの動作確認を行う予定です。

2021年4月5日月曜日

部品を半田付けしよう!仕上げ編

電源回路が出来たので、それ以外の電子部品を全て半田付けします。

あらかじめ、KiCadで回路図を印刷しておくと「R1って何Ω?」とか本の中を探さなくて済むのでおすすめです。

で、なんといっても一番の難題がマイコンESP32-WROOM-32の半田付けです。

よく見るとESP32-WROOM-32の裏側には下の写真のように金色の大きな四角い端子があります。実はこれはGND端子で基板側の銀色の大きな四角い端子と接続する必要があるようですが、どうやって半田付けできるのか全く分からない(&GND端子は他に3カ所半田付けされる)ので、今回は無視します。

半田付けは得意ではないのですが、本に書いてあるようにフラックスをちゃんと塗って慎重に慎重に作業しました。
一応テスターで隣接する端子同士がショートしていないかどうかチェックすることをおすすめ致します。
(私は一カ所ショートしており冷や汗ものでした)

あまり綺麗ではないですがなんとか半田付け終了しました。


色々と手間取ってしまい、1時間以上かかってしまいました...

次回は電子回路の動作確認をする予定です。


2021年4月4日日曜日

部品を半田付けしよう!電源回路編

部品が揃いました!

まずは、本のp.122以降を参考にしながら電子部品を半田付けします。

Elecrow社から届いた部品を部品チェック!回路基板が含まれるパーツはコレ。


あれ?

なぜか12枚も届いている。

発注メールを確認しても最低限の個数(5個)になっているのですが...

まあ、多くて困ることはないのでこのまま先に進みましょう。


最初は電源回路のみ半田付けして電源回路が正しく動いているか確認してから先に進むと良いようです。

電源回路の回路図は本のp.101に書かれているのでこれを参考にして3端子レギュレーター・コネクタ・スイッチ・ダイオード・コンデンサを半田付けします。

あれ?

本のp.121のパーツリストに書かれているスイッチ「SS-12D00-G5」は足が3本しか無いのに基板の方には穴が6つ空いている...

どういうこと?

本をよくよく読んでみると、p.100に「スイッチは2回路2接点のものを使います」と書かれているが、パーツリストのスイッチは「1回路2接点」。

えーと...

...パーツリストの記載ミスかな?

たまたま家に2回路2接点のスイッチが転がっていたのでそれを転用することにしました。

皆さんは発注の際、2回路2接点のスイッチを購入するように気をつけて下さいね!


さて、電源回路の半田付け完了したところで回路の動作チェックをします。

回路図によるとコネクタに乾電池を接続してスイッチを入れた際に、コンデンサ(C2)の両端の電圧が3.3Vになれば正しく回路が動いているといえそうです。


はい、四捨五入で3.3Vで合格!


次回は、電源回路以外の電子部品の半田付けを行っていく予定です。