PR

【PythonでmBot2プログラミング】超音波センサーで障害物回避

Python
この記事は約6分で読めます。

今回は、mBot2プログラミングシリーズ(Python編)の第2回です。

この回では、mBot2に搭載されている超音波センサーを使って、障害物を検知し、それを回避するプログラムをPythonで作成します。
障害物を検知して回避する動きは、ロボット工学自動運転技術にも通じる重要なトピックです。ぜひ一緒に学んでいきましょう!

目標

  • 超音波センサーの仕組みを理解する
  • 超音波センサーの値を取得するAPIを理解する
  • 障害物を検知して回避する動きをプログラミングする

Python環境(mBlock Python editor)の立ち上げ

ここでは、『mBlock Python editor』を使って、Pythonコードでプログラミングしていきます。
事前にPython環境を導入しておいてください。

環境の導入に関しては、次の記事を参考にしてください。

超音波センサーとは

mBot2の超音波センサーは、目になっている部分で、音波を使って物体までの距離を測ることができます。
前方にある障害物の距離をセンチメートル単位で計測でき、測定範囲は3cm~300cm(3m)です。

右目のTransmitter(送信機)で超音波を送信し、左目のReceiver(受信機)で反射した超音波を受信します。

超音波センサーの仕組みを次に示します。

  1. 送信機(T)から超音波を出す
  2. 何かに反射して超音波が跳ね返ってくる
  3. 受信機(R)で跳ね返ってきた超音波を受信する
  4. 送信から受信までの時間を測定し、距離を計算する

同じような仕組みで、コウモリやイルカは超音波を発して、その反射音から物の形や距離を測っています。

APIとは

API(Application Programming Interface)は、ソフトウェアやハードウェアが外部のプログラムとやり取りをするためのインターフェース(接点)です。
簡単に言うと、『決められたルールに従って機能を利用するための仕組み』です。

cyberpiライブラリをインポートすることで、CyberPiや、mBot2センサーなどの各機能を簡単に利用できます。

超音波センサーのPython API

超音波センサーに関するAPIの中で、今回は障害物回避に使用するものを紹介します。

障害物との距離取得

ultrasonic2.get(index = 1)

障害物と超音波センサーの距離を取得します。

  • 範囲:3~300cm
  • 誤差:±5%

簡単な動作プログラム作成

超音波センサーの値をCyberPiのディスプレイに常時モニタリングする』プログラムを作ってみます。

from cyberpi import table, ultrasonic2

#1行1列
table.add(1, 1, "距離")

while 1:
    #1行2列
    table.add(1, 2, ultrasonic2.get(index = 1))

障害物と超音波センサーとの距離の値を、CyberPiのディスプレイの表(1行2列)に表示させます。
表(1行1列)には分かりやすい名称を入れておきます。今回は『距離』としました。

常時モニタリングするため、センサーの値はwhileループで常に取得するようにします。

CyberPiには次のように表示されます。

【例題】超音波センサーで障害物を回避しよう

例題1:センサー値に応じて処理を切り替える

  • 例題
  • 解答例

mBot2を前進させ、障害物が近づいたら停止させる』プログラムを作ってみましょう。
※障害物が遠ざかったら、前進を再開しましょう

クルマに乗っていて、前方の物体が近づいたら急ブレーキがかかったことはありませんか?
この例題と同じような仕組みが実際に自動車で使われています。

from cyberpi import mbot2, ultrasonic2

while 1:
    #障害物が近い場合
    if ultrasonic2.get(index = 1) < 10:
        mbot2.EM_stop("all")
        
    #障害物が遠い場合
    else:
        mbot2.forward(50)
プログラムのポイント
  • 繰り返し処理で、超音波センサーの値を常時読み出す
  • 障害物が近づいたら』の条件は、比較演算『超音波センサーの値 < 10cm』を実施する
    ※10cmの距離は任意に設定してください

例題2:障害物回避動作をさせてみよう

  • 例題
  • 解答例

mBotを前進走行させて、障害物が近づいたら方向転換する』プログラムを作ってみましょう。

from cyberpi import mbot2, ultrasonic2

while 1:
    #障害物が近い場合
    if ultrasonic2.get(index = 1) < 10:
        mbot2.turn(90, 50)
        
    #障害物が遠い場合
    else:
        mbot2.forward(50)
プログラムのポイント
  • プログラムの構造は例題1と同じ
  • 方向転換』するために、mBot2を回転させるAPI mbot2.turn() を使う

mBot2を回転させるAPIは様々ですが、今回は角度を指定するAPIが良いでしょう。

時間指定で回転させる場合、mBot2の電源状態や外部環境によって、回転角度にばらつきが発生する可能性があるためです。

まとめ

今回は、超音波センサーを使うことで、mBot2が自律的に障害物を回避するPythonプログラミングについて紹介しました。
この機能を活用して、迷路を通り抜けるチャレンジなど、さらに面白いプログラムに挑戦してみてください。

次回は、超音波センサーのLED制御について解説します。

mBlockを使ったmBot2のプログラミング方法を丁寧に解説していておススメです。

CyberPi単体でもプログラミング教育に非常に役立ちます!

タイトルとURLをコピーしました