黒ラインをトレースするプログラム ~レゴマインドストームEV3~ | そう備忘録

黒ラインをトレースするプログラム ~レゴマインドストームEV3~

トレーニングロボットでライントレース

教育用レゴマインドストームEV3のトレーニングロボットを使って黒ラインをトレースするプログラムを作成する。

黒ラインの判別にはカラーセンサーを利用する。

トレーニングロボットとカラーセンサー

尚、トレーニングロボットの組み立てについてはこちらを参照

カラーセンサーは主に

  1. 色の判別
  2. 反射光の強さの判別
  3. 周囲の光の強さの判別

の機能があり今回は2つ目の反射光の強さの判別を利用して黒ライン上か(そうで無いか)を判別してトレーニングロボットの車輪のLモーターを制御しながら黒ライン上をトレースさせる。

黒は光を吸収するので反射光が弱くなりカラーセンサーで測定をすると10~20程度の数値になる。

一方、白紙上は60~70の数値になるのでその差でラインを判別する。

カラーセンサー

使用するブロック

使用するブロックは以下の3種類。

ループブロック

ループ内に配置されたブロックを右側の条件に一致するまで繰り返す。

ループブロック無限に繰り返す

  • ループ:無限

スイッチブロック

条件を判定して処理を分岐をするブロック

スイッチブロック カラーセンサーカラーセンサーで反射光の強さを判定して50未満(黒ライン上)であれば上の分岐、そうでなければ下の分岐を処理する

  • スイッチ:カラーセンサー、比較、反射光の強さ
  • 比較タイプ:4(未満)
  • しきい値:50

Lモーター

トレーニングロボットの車輪のLモーターを制御して黒ライン上に乗るようにする。

ポートB:左車輪

ポートC:右車輪

使用するLモーターは以下の4パターン

Lモーター(Bポート)オフ左車輪を停止する

  • ポート:B
  • Lモーター:オフ
  • ブレーキ方法:真
Lモーター(Bポート)オン左車輪を回転させる

  • ポート:B
  • Lモーター:オン
  • パワー:50
Lモーター(Cポート)オフ右車輪を停止する

  • ポート:C
  • Lモーター:オフ
  • ブレーキ方法:真
Lモーター(Cポート)オン右車輪を回転させる

  • ポート:B
  • Lモーター:オン
  • パワー:50

プログラム全体

カラーセンサーの反射光の強さの判定で黒ライン上か、そうで無いかを判別してライン上であれば右に旋回、ラインから外れると左旋回を連続的に繰り返す事により蛇行をしながら黒ラインをトレースするプログラムとする。

トレースラインとしては非常に無駄が多いがまずはこのロジックで組んで見ることにした。

ライントレース図

黒いライントレースイメージ図

プログラム

黒ラインをトレースするプログラム

1 プログラム開始
3~7を繰り返す(無限)
カラーセンサーで反射光の強さを判定して50未満(黒ライン上)であれば4,5の処理、そうでなければ6、7を処理する
右車輪を停止する
左車輪を回転させる

4,5で右に旋回する

左車輪を停止する
右車輪を回転させる

6,7で左に旋回する

2へ戻る

手を加えたプログラム

先程のプログラムだと黒ラインの上を蛇行して進むので動きに無駄が多い。※下記の動画参照

トレースするラインが左回りの円と決まっている場合は下記の様なプログラムにすればスムーズに黒ラインをトレースする。

尚、右回りの円周の場合はこのプログラムは通用しない。

コースが分からない時は最初のプログラムの方が汎用的に使える。

  • 先程のプログラムとは赤枠の部分だけが異なる
  • 黒ライン上の時は直線運動
  • ラインから外れた時は左旋回(必ず左側にラインが存在する前提)

イメージ図

イメージ図2

黒ラインをトレースするプログラム(改良版)

更に手を加えたプログラム

2019年2月11日 追記

時計・反時計回り両方に対応しながらもう少しスムーズにライントレースをする様にプログラムを改良した。

改良したライントレースの記事はこちら

プログラミング動画

プログラミングと実際のトレーニングロボットの動きを動画にしている。

特に最初のプログラムと後のプログラムの動きの違いに注目して欲しい。

文字と画像だけでは分からない部分は動画を参照すれば分かりやすい。

データロギング

2018年10月4日 追記

上記の黒ライン上をトレースするプログラムを使って、トレーニングロボットにジャイロセンサーを取り付けてLモーターやジャイロセンサーの値をロギングしてグラフ表示を行った。

データロギング&グラフ表示は実際のモーターやトレーニングロボットの姿勢を数値化して分かりやすく表示するメリットがある。

その時の記事はこちら

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。