先日、子供がArduinoで何か作りたいと言うので、ELEGOOのスマートロボットカーを購入しました。小学校低学年でも2~3時間で組み立てることができました。プログラムは書き込まれた状態で出荷されているため、組み立てたらすぐに遊ぶことができます。どのような仕組みで動いているのか、簡単に説明したいと思います。
1.障害物回避(自動運転)の動作について
自動車業界のトレンドとして、自動運転があります。自動運転にはいくつかレベルがあり、現在はレベル1やレベル2の機能が搭載された車が増えてきています。その内の「衝突被害軽減ブレーキ」と「障害物回避」の機能を簡素化しておもちゃの車に搭載したのが、今回の作成物です。
2.回路構成
この機能を構成するための主なパーツは下記のとおりです。
- 超音波センサ(HC-SR04)
- サーボ(SG90)
- モータドライバ(L298N)
- DCモータ4個
- Arduino-UNO-R3
超音波センサとサーボの使用方法については、以前の記事で紹介していますので、基本的な使用方法についてはそちらを参照してください。
実際の車では、障害物を検知するために、ミリ波レーダ・赤外線レーザ・ステレオカメラが使用されています(wikipedia:衝突被害軽減ブレーキ)。今回のキットでは、安価に実現するために超音波センサ(HC-SR04)を使用しています。この製品仕様は、測定可能距離が2cm~400cmで、測定角度範囲が30度となっており、ある程度指向性を持っていることが特徴です。
障害物を検知して止まるだけであれば、前方の障害物のみを常時測定していれば良いのですが、回避するためには周囲の状況も把握する必要があります。実際の車をよく見てみると、車の前方と後方の左右にセンサが取り付けられています。同様に、おもちゃの車では超音波センサを複数使用することで実現できますが、値段が高くなってしまいます。今回のキットでは、1つの超音波センサを使用して、それをサーボモータで動かすことで、周囲の障害物の有無を検知しています。
3.プログラム構成
プログラムの流れは下記のフローチャートのとおりです。
電源を入れると前方の障害物までの距離を測定し、その値が閾値よりも大きければ、一定期間直進します。一方、その値が閾値以下である場合は、サーボを動かして右側の障害物までの距離を測定します。次に反対方向にサーボを動かして左側の障害物までの距離を測定します。その結果、左右ともに障害物がある場合は後退し、左右どちらか(もしくはどちらも)障害物までの距離が遠い場合は、より遠い方に旋回します。

非常に簡単なプログラムですが、ページ先頭で示した動画のように、それなりに機能しています。ただし、超音波センサは測定ばらつきがあるため、障害物があるにも関わらず、そちらの方向に旋回してしまうことがありました。これを軽減するためには、複数回測定してフィルターで処理をする方法が考えられます。具体的なフィルターの記述方法については、別の記事で紹介したいと思います。
コメントを残す