超音波センサを使ったプログラミングに挑戦(その2)
5 3つの超音波センサで障害物を回避
6 70CM幅のクランク走行
7 ロボットタイヤと床面の関係

ロボット講座の11回目です。前回に続き、超音波センサーを取り付けたロボットカーの制御に挑戦していきます。

今回は3つの超音波センサをRaspberryPiのGPIOに接続し、左右や正面にある壁を回避して走行させ、壁に囲まれたクランクを自動走行させることを目標にロボットカーの制御に挑戦しました。
5 3つの超音波センサで障害物を回避
いよいよフロント、右側面、左側面、3つの超音波センサを使って壁に囲まれたクランクを自動走行させます。3つのセンサがどのような検知を行うか場合分けと、その時の処理をプログラムに書き込んでいきます。このHC-SR04という超音波センサモジュールは正面から±7.5°程度の範囲では反射波を正確に受信できますが、少しずれると測定不可能になってしまうという特性があります。このため壁に対して斜めに侵入する場合は、壁に当たるくらい近づかないとわからないということになります。そこで左右のセンサは少し斜め(約15度)に取り付け、真横だけでなく「前斜め方向」までカバーでき、角のある通路や曲がり角に早く気づき、死角が減るようにしました。特に壁に対して斜めに侵入すると、進行方向と同じ向きに取り付けた場合、制御不能に陥りやすくなります。


このように、多くの条件で判断しなくてはならない場合に便利なのが『all関数』と『any関数』です。
6・7 70CM幅のクランク走行・ロボットタイヤと床面の関係
70cm幅の壁が迷路のように続いています。壁に当たらずにゴールしましょう。L1とL2の差が大きい時と小さい時では幅寄せの量を変える必要があります。

L1とL2の差が大きい時と小さい時では幅寄せの量を変える必要があります。差が小さければ、少しだけカーブし、差が大きい時は大きなカーブが必要になります。このときは絶対値を使うと便利です。abs(L1-L2)・・・・この絶対値が小さければまっすぐ走れと指示すればいいですね。
壁にセンサが近づいたら単純に反対方向へ曲がるだけでよいでしょうか?

①の場合、左右の超音波センサから得られる距離の差を求め、進行方向を調整します。しかし、②のように、左右の距離がほぼ同じになるとどうでしょう?左右の壁までの距離が等しいと判断して真直ぐ進み、今度は右側のセンサと壁との距離が小さくなるため、左に曲がろうとします。惰性があるため、左折の指示が間に合わなくなり、壁に衝突します。

ロボットカーが壁に向かって斜めに侵入すると壁に近づき、ロボットカーを右折させると思います。先ほどの例では、元の位置に戻り切れずに反対側の壁に衝突するので、スピードの調整が必要でしたが、ジグザグ走行になりがちです。反対側に曲がり始めると、右センサが中央ラインに近づくころに右センサは壁までの距離を読み取ります。
しかし、左センサはトリガーからパルスを発信させても、壁が斜めになってしまい、距離測定不可能の状態(最大値2mを表示)になります。ロボットカーは常に真ん中のラインをまっすぐ進むようにしたいですね。どうすればよいでしょうか。左右車輪のデューティ比を調整することにによってプログラムによらずに、まっすぐ走ります。これは、デューティ比を調整すれば、制御しなくても(プログラムに関係なく)まっすぐ走らせたり、円軌道を走行させることができます。ロボットカーの特性を理解した上で制御プログラムを作ると、より速く、より美しい走行を実現できます。

また、今回使用しているギヤボックスは模型用のものなので、車輪は方向転換の信号やstop信号を送っても惰性で走ってしまいます。この惰性を利用して制御するか、あるいはブレーキをいったんかけてから次の命令を出すか考える必要があります。しかし、while文の中でブレーキをかけると、何度もブレーキがかかるので、動作がぎこちなくなります。
ここまでの経験から、床面の摩擦によってロボットカーがうまく動いたり動かなかったりします。特にスピードを押さえて曲がろうとする場合に顕著です。6Vのモータですが、デューティ比が小さくなれば電圧が小さくなるので、ロボットを動かすのに大きな力を必要とする曲がる動作の場合には注意が必要です。自分のロボットカーの特性を理解し、その特性を利用してコントロールすると迷路も早く正確に抜けられます。挑戦してみましょう。

家でうまく走れたのに講座の中ではうまく走らないということがあります。その理由の多くは床面とタイヤの材質の影響です。特に今回のロボットで使用しているタイヤはとても柔らかいので、床面の起毛上で大きく変形することで力の損失が大きくなり、スピードが出ない場合があります。家で車輪のデューティ比を研究しても、講座では思うように走れず、再度、床面に応じたデューティ比に作り直さなくてはならない場合があります。その理由は次のとおりです。
(1)摩擦力には、駆動に必要な摩擦(静止摩擦)と走行を妨げる摩擦(転がり抵抗・変形損失)があります。
(2)柔らかいタイヤは変形が大きいということ。その変形によってエネルギーが奪われます(ヒステリシスロス)。
(3)摩擦の伝わり方が異なるということ。柔らかいゴムは摩擦が高いので、静止摩擦(滑らない力)はしっかり働き、 絨毯でもフロアでも空転しにくくなりますが、駆動に必要以上の摩擦があると、逆に転がり抵抗が増えてしまいます。
(4)柔らかいタイヤほど床の性質に左右されやすいとうこと。
(5)硬いタイヤだと、絨毯での変形が減り抵抗は少し減るが、表面が滑りやすいと空転しやすく、フロアではさらに転がり抵抗が小さくなり、もっと速く走る可能性がある。
対策としては、タイヤの変更やタイヤの改良などがありますが、ここでは現状のタイヤのみで競技を進め、プラスティック・ダンボール(プラダン)に床面の材質を統一します。
