黒ラインをトレースするプログラム(改良版その2) ~レゴマインドストームEV3~
Contents
ライントレースの再改良版について
前回は教育用レゴマインドストームEV3のトレーニングロボットを使って楕円コースの黒ライン上をトレースするプログラムを改良した。
中心位置からの距離に比例して左右の車輪のパワーを補正する事により比較的スムーズにライントレースをする事ができたが、パワーを上げてスピードを出すとトレースから外れてしまうことも時々発生していた。
今回はカラーセンサーを2つ付けてライントレースのスピードアップを目指した時の備忘録。
カラーセンサーを2つにする理由
カラーセンサーが1つの時のライントレース方法は黒ラインと白い部分の真ん中をトレースしていた(詳細は前回の記事を参照)。
この方法は進行方向に向かって右側に黒ライン、左側に白紙がある状態を維持するように両車輪のパワーを制御するのだが、カーブを曲がりきれない、車輪が滑る等の理由で右側に白紙を検出してしまうと一気にコースアウトしてしまう。
理由は常に左側に白、右側には黒ラインが”ある”前提でプログラミングをしているので逆の状態になると車輪を逆に制御してしまうためだ。
特にスピードを出すと何かの加減でコースアウトする可能性が高まり、安定的な走行をする為には両車輪のパワーが30前後までだった。
一方、カラーセンサーを両側に2つ付ける方法だとラインから外れた時の許容範囲が広がるので、よりスピードを出しやすくなる。
制御の考え方
前提
黒は光を吸収するので反射光の強さは弱くなる、逆に白は光を反射するので反射光の強さは強くなる。
当方の環境での反射光の強さは以下の通りだった。
測定の詳細については前回の記事を参照の事。
白紙上 | 84前後 |
黒ライン上 | 10前後 |
尚、外部環境(室内、屋外、昼、夜など)によっても測定値は変わってくるので必要に応じてその都度測定をした方が良い。
制御方法
カラーセンサーが2つの時の制御の基本的な考え方は以下の通り。
左右のカラーセンサーの反射光の強さの差分を利用して左右の車輪のパワーを制御する。
尚、カラーセンサーも個体差があるので個体差間の若干の補正を行う必要もあるので注意が必要。
プログラム概要
プログラムの概要は以下の通り
- 初期値の設定
- 左右のカラーセンサーの反射光の強さの差分から補正値を計算
- 補正値を左右の車輪のパワーに加・減算
大きく分けて上記3つのロジックから成り立っている。
基本的な考え方は前回のカラーセンサーが一つの時と同様だが左右のカラーセンサーの反射光の強さの差分を元にパワーを制御する所が若干異なる。
尚、記事の最後にプログラミングと実際に動かした時の動画を載せているので確認して欲しい。
プログラム全体
1 | プログラム開始 |
2 | 変数Powerに60を格納する |
3 | 4~11までを繰り返す |
4 | 左のカラーセンサーで反射光の強さを測定する |
5 | 右のカラーセンサーで反射光の強さを測定する |
6 | (左の反射光の強さー右の反射光の強さ)÷2.5を計算して補正値として出力する |
7 | 変数Powerから60を取り出す |
8 | 60+補正値を計算して出力する |
9 | 8の結果を左車輪のパワー値とする |
10 | 60ー補正値を計算して出力する |
11 | 10の結果を右車輪のパワー値とする |
使用したブロック
今回使用したブロックは以下の5種類。
変数ブロック
プログラム中の数値や文字列、ロジック(”真” or ”偽”)を保存することができる。
変数ブロックの詳細についてはこちらの記事を参照のこと。
直進時の車輪のパワー値を保存する
この値をベースに左右の車輪のパワーを加・減算して黒ラインをトレースする | |
直進時の車輪のパワー値(60)を読み込む
|
ループブロック
指定した条件に一致するまでループ(同じ処理を繰り返す)する。
プログラム終了まで繰り返す
|
カラーセンサーブロック
カラーセンサーには3種類のモードがある。
- 色の判定
- 反射光の強さの測定
- 周囲の光の強さ(明るさ)の測定
今回は2の反射光の強さを測定するモードを使用する。
カラーセンサーの反射光の強さを測定してデータワイヤーで出力する ポート1と4の2つのカラーセンサーで反射光の強さを測定する
|
数学ブロック
数学計算を行って結果を出力する
数学ブロックの詳細についてはこちらの記事を参照のこと。
反射光の強さと補正値、両車輪のパワーと結果の関係は以下の通り
現在位置 | 左・反射光 | 右・反射光 | 補正値 | 左車輪 | 右車輪 | 結果 |
中心位置 | 84 | 84 | (84-84)÷2.5=0 | 60+0=60 | 60-0=60 | 直進する |
左寄り | 84 | 60 | (84-60)÷2.5=9.6 | 60+9.6=69.6 | 60-9.6=50.4 | 右に曲がる |
右寄り | 60 | 84 | (60-84)÷2.5=-9.6 | 60+(-9.6)=50.4 | 60-(-9.6)=69.6 | 左に曲がる |
Lモーターブロック
左右のパワーの計算結果をデータワイヤーで受け取って制御する。
左車輪のパワーを制御する
| |
右車輪のパワーを制御する
|
プログラミングと実際に動かしてみた時の動画
プログラミングと実際に動かしてみた時の動画。
パワー30と60とでライントレースをしているので見て欲しい。
ガイちゃんやん