突然ですが、EV3ソフトウェアを使って、ロボットを200mm(20cm)ほど前進させるプログラムを作ってみたいと思います。前進させるだけなら簡単だろうと思ったのですが、意外にもノウハウが必要な技術です。
▲用意したロボットがこちら。モーター2個だけの極力シンプルな構成にしました。
▲プログラム1。おそらく最もシンプルな移動のプログラムです。タイヤの直径から円周を求めて、それからモーターの回転角度を求めています。
▲プログラム1を実行してみました。だいたい200mmの地点で止まりました。今までだったら、これで終わりなのですが、今回はもっと正確さを追及してみたいと思います
まず、タイヤの位置ですが、良く見ると、10mmくらい距離が足りていません。これを改善してみます。
原因として考えられるのは、値の不正確さです。プログラムではタイヤの直径を56mmとしましたが、実際は55mmくらいのように見えます。ただし定規では測りにくくて、正確な値を出せません。
NXT基本セットに標準で付属するバルーンタイヤは正式に56mmと名前が付いていたので、EV3基本セットに付属するタイヤも56mmだろうと思ってました。ずっと勘違いしてたかもしれません。
タイヤの直径を測ることを諦めて、円周を測ることにしました。
▲プログラム2。タイヤの円周を測るためのプログラムです。
▲プログラム2の実行結果です。モーターを360度回転させます。ロボットの進んだ距離がタイヤの円周となります。
パワー50とパワー25で4回ずつ、計8回計測してみました。一つ発見があったのですが、パワー50の場合だと誤差が大きくなり距離が短くなりがちです。急発進したさいに回転がロスしているためだと思います。パワー25の場合は距離が安定していました。
この結果、タイヤの円周を171mmと決めました。計算すると、タイヤの直径は約54.5mmになります。 当初の値の56mmと比べると、短かったです。ロボットの重みでタイヤが変形しているという可能性もあります。
▲プログラム3です。プログラム2の結果を元にして、タイヤの直径を数式に入れてみました。
▲プログラム3の実行結果。 見事に200mmの地点で止まりました。
しかし、プログラム2の実験では、パワー50だと回転のロスが発生していたので、同じように移動距離が短くなる可能性があります。撮影時にたまたま成功しただけかもしれません。
移動距離を正確に保ちたいなら、パワーを25くらいに落としたほうがいいでしょう。ただし、それだと速度が落ちてしまうというジレンマがあります。
▲プログラム4。おまけ的なプログラムですが、台形駆動を取り入れてみました。急発進と急停止を無くすことで移動距離の誤差を減らすのが狙いです。
この方法、急発進は無くなるのですが、回転センサーの目標値を超えた後でモーターを停止させていますので、必然的にオーバーランしてしまうという欠点があります。実際に動かしてみると10mmくらいオーバーしました。
これを防ぐためには、あらかじめ距離を差し引いておかないといけないのが、カッコ悪いです。
プログラム1~4の実行結果を動画にしてみました。
プログラム1~4のファイルはこちらです。教育版EV3ソフトウェアを使っています。
◆ガムテープでタイヤのゴミを取る
▲余談ですが、こうやってガムテープをペタペタ当てると、表面のゴミが取れてタイヤのグリップ力が復活します。ただし、効果は一時的なもので、一回走らせるとまた元に戻ってしまいます。