本文へスキップ

未来の科学技術を子供たちに託す。 ジュニロボ <JRO>

〒619-0237 京都府相楽郡精華町光台8丁目

TEL. 070-5263-2200

jun@kinet-tv.ne.jp

入門コースライントレースRECRUIT

ラインセンサとは。どんなセンサ 



 ラインセンサは、ロボットの下部に床に向けて取付されているセンサです。( 上図 )

 左図は床面からロボットの下部を見た写真で
 ラインセンサ部分の拡大写真です。
 黒く丸い物が2つ見えますが、見えているの
 はレンズです。(レンズの下に発光ダイオー
 ド/受光素子があります。)
 左の丸い部分から赤外線が出ています。
 この光が床から反射して右側の赤外線を検出
 するセンサ(受光素子)に入ります。
 床面の色により光の量が変化することを利用
 して、白色、黒色を判断させることを行いま
 す。
 もちろん床の材料によっても光の反射する量
 が変化しますので床ごとに調整が必要です。

 光の反射に対するセンサからの出力電圧は、おおよそ下記の関係があります。( %表示は、光の吸収率 )
 これはセンサ面と床の距離、センサ基板についている調整ボリュームの位置によって大きく変化します。





  上記の黒い部分では、反射が少なく10%以下    上記白い部分では、反射が大きく50%以上
( もちろん床の材料、黒白の材料により大きく数値は変わりますので、実際のコースで確認してください。)

 TJ3Bのロボットでは、センサは床から約10mmに取付られています。
 手持ちのロボットと手持ちの白画用紙で確認した内容では、白色画用紙で約 2.0[ V ]、ロボットを持ち上げ
 た状態(反射が無い状態)で 0.04[ V ] 程度となっていました。
 センサの出力状態を確認するには、C-Style のセンサモニター機能で確認する事ができますが使用方法は後で
 説明します。


 


【 STEP 1 】

黒ラインを発見したら、ロボットを後退させましょう。




[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 008 まで繰り
   返します。
002 CN2(ライセンサ)の値をチェックしています。
003 黒色と判断して後退します。(速度30%)
004 後退時間を 0.5 秒間とします。
005 白色(黒色でなければ=白色)
006 白色なので直進します。(速度30%)
007 002 の if 文に戻ります。
008 001 のペア(無限ループの最後:実行はされない)

上記サンプルプログラムは、CN2のデーターが下記であった前提で設定されたものです。
 黒色ラインでのCN2の値 :  9 〜 13 程度
 白色ラインでのCn2の値 : 51 〜 58 程度
 白黒切り分け値(しきい値) : 30%  計算:( 13 + 51 )/2 = 32 (今回は30とした。)
[ 動かしてみましょう。 ]

 どうでしたか?
 思い通りの動きをしましたか?

 うまく動かなかった人は、002 行目 if 文での白黒判断する数値( しきい値 )が、適当ではなかった為 です。
 ラインセンサは、床からの反射光を測定していますので、床にある白色からの反射、黒からの反射は、 床材料、ライン材料等で変わってきますので走行前に反射光がどれほどかをチェックしてみましょう。

 うまく動いた人も確認しましょう。たまたま動いたとかギリギリの状態で動いた可能性があります。

【 よくある勘違い 】

「While」の使い方で無限ループを作ろうとして左記の様に記述する人がいます。
無限ループは、「while」「end while」の間をループするので、いつまでたっても 003 以降は実行されません。

これは、「if」、「for」などのループ命令はすべて同様です。注意しましょう。



 


【 STEP 2 】

黒ラインをトレースするプログラムを作ってみましょう。( 左まわり )


 まずは黒ラインを左まわり限定でプログラム
 を考えてみましょう。

 黒ラインから外れた場合、ラインは必ず左側
 にあることを考えて作成して下さい。











【 ヒント 】

 前問と同じです内容ですので省略します。


[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 007 まで繰り
   返します。
002 CN2(ライセンサ)の値をチェックしています。
003 黒ライン上と判断して直進します。(速度30%)
004 白色(黒色でなければ=白色)
005 白色でラインから外れたので、左に回転(自転)し
   黒ラインへ方向転換させています。
006 002 の if 文に戻ります。
007 001 のペア(無限ループの最後:実行はされない)

しきい値30%の考え方は、STEP1と同等です。
[ 動かしてみましょう。 ]

 どうでしたか?
 思い通りの動きをしましたか?

 うまく動かなかった人は、002 行目 if 文での白黒判断する数値( しきい値 )が、適当ではなかった為 です。
 ラインセンサは、床からの反射光を測定していますので、床にある白色からの反射、黒からの反射は、 床材料、ライン材料等で変わってきますので走行前に反射光がどれほどかをチェックしてみましょう。

 うまく動いた人も確認しましょう。たまたま動いたとかギリギリの状態で動いた可能性があります。

 このサンプルソフトは、
  1.ラインの内側はうまくトレース出来ない。
  2.円形のコースでないとトレース出来ない。
  3.右まわり出来ない。



 


【 STEP 3 】

黒ラインをトレースするプログラムを作ってみましょう。( 右まわり )


 つぎは黒ラインを右まわり限定でプログラム
 を考えてみましょう。

 黒ラインから外れた場合、ラインは必ず右側
 にあることを考えて作成して下さい。










【 使用するアイコン 】

 前問と同じ内容ですので省略します。

【 ヒント 】

 前問と同じ内容ですので省略します。


[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 007 まで繰り
   返します。
002 CN2(ライセンサ)の値をチェックしています。
003 黒ライン上と判断して直進します。(速度30%)
004 白色(黒色でなければ=白色)
005 白色でラインから外れたので、右に回転(自転)し
   黒ラインへ方向転換させています。
006 002 の if 文に戻ります。
007 001 のペア(無限ループの最後:実行はされない)
[ 動かしてみましょう。 ]

 どうでしたか?
 思い通りの動きをしましたか?

 うまく動かなかった人は、002 行目 if 文での白黒判断する数値( しきい値 )が、適当ではなかった為 です。
 ラインセンサは、床からの反射光を測定していますので、床にある白色からの反射、黒からの反射は、 床材料、ライン材料等で変わってきますので走行前に反射光がどれほどかをチェックしてみましょう。

 うまく動いた人も確認しましょう。たまたま動いたとかギリギリの状態で動いた可能性があります。

 このサンプルソフトは、
  1.ラインの内側はうまくトレース出来ない。
  2.円形のコースでないとトレース出来ない。
  3.左まわり出来ない。



 


【 STEP 4 】

黒ラインをトレースするプログラムを作ってみましょう。( 左右限定なし:汎用プログラム )


 つぎは黒ラインを左右限定なしのプログラム
 を考えてみましょう。

 どんなライン上でも黒色ライントレースが可
 能なプログラムなので応用範囲が広がります









【 使用するアイコン 】

 前問と同じ内容ですので省略します。

【 ヒント 】

 前問と同じ内容ですので省略します。


[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 007 まで繰り
   返します。
002 CN2(ライセンサ)の値をチェックしています。
003 黒ライン上と判断とし、床部(白色)へ左側へ
004 白色(黒色でなければ=白色)
005 白色でラインから外れたので、右側に回転
006 002 の if 文に戻ります。
007 001 のペア(無限ループの最後:実行はされない)
[ 動かしてみましょう。 ]

 どうでしたか?
 思い通りの動きをしましたか?

 回転角の調整により、ロボットのトレーススピードが変化したり、ラインから脱線したりします。
 最適な角度を探しましょう。スピードを上げようとすると脱線する可能性が高くなります。
 回転角度を大きくするとスピードは遅くなりますが、カーブが急なラインでも対応できます。

** 回転角 **

 回転角が大きいとは : ( L : −30% 、 R : 60% )など
 回転角が小さいとは : ( L :   0% 、 R : 30% )など

 しかし( L  : −30% 、 R : 30% )では、自転して前には進まない。



 


【 STEP 5 】

白ラインをトレースするプログラムを作ってみましょう。( 左右限定なし:汎用プログラム )


 ラインと床の色が反転した場合には、プログラムを
 どの様にすればいいでしょうか。











【 使用するアイコン 】

 前問と同じ内容ですので省略します。

【 ヒント 】

 前問と同じ内容ですので省略します。


[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 007 まで繰り
   返します。
002 CN2(ライセンサ)の値をチェックしています。
003 黒ライン上と判断とし、床部(白色)へ左側へ
004 白色(黒色でなければ=白色)
005 白色でラインから外れたので、右側に回転
006 002 の if 文に戻ります。
007 001 のペア(無限ループの最後:実行はされない)
[ 動かしてみましょう。 ]

 どうでしたか?

 サンプルソフト上、まったく前問と変わりはありません。
 これは、ロボットのラインセンサ(CN2)は、床と黒ラインという切り分けをしている訳ではありませ
 ん。あくまでも黒色と白色として判断し、この中間値を「しきい値」としているので白黒が反転しても
 判断条件はまったく同じとなります。



 


【 STEP 6 】

ライン上にある銀テープで、ロボットを停止させましょう。


 左写真の黒ライン上側中央部に銀色テープが貼ってあ
 りここでロボットを停止させます。











【 使用するアイコン 】

 前問と同じ内容ですので省略します。


[ サンプルプログラム ]

C-Style部分は、拡大できます。
001 while 文の条件は、無条件ループとし 011 まで繰り
   返します。
002 銀テープか、チェックしています。
003 銀テープなので停止します。
004 銀テープ意外なので白黒判定へ
005 もし黒色ならば
006 黒ラインと判断とし、左向きに前進
007 白色(黒色でなければ=白色)
008 白色と判断して、右向きに前進
009 010 の if 文の最後へ
010 002 の if 文に戻ります。
011 001 のペア(無限ループの最後:実行はされない)
[ 動かしてみましょう。 ]

 どうでしたか?

 今回のポイントは、銀テープ上では光はほとんどが反射してきますのでロボットにより多少の差はあり
 ますが、平均的に 85 %以上あるので、しきい値を「70%」としています。
 
 黒色 : 10%前後( 黒色の紙材によって、1%になる場合があります )
 白色 : 55%前後( 白色の紙材によって、60%程度になる場合があります )
 銀色 : 85%前後

 後日説明するセンサモニタで色々な材料の反射率を確認してみましょう。





 


【 STEP 7 】

ライン上にある銀テープでロボットを5秒間停止させ、その後再スタートさせる。



 コースは前問と同じです。

 今回は、銀テープで停止して一定時間経過後、再スタ
 ートさせる問題です。








【 使用するアイコン 】

 前問と同じ内容ですので省略します。



[ サンプルプログラム ]

C-Style部分は、拡大できます。
< Sample1 >タイマー方式
001 while 文の条件は、無条件ループとし 014 まで繰り
   返します。
002 銀テープか、チェックしています。
003 銀テープなので停止します。
004 銀テープ上で 5.0 秒間停止
005 停止後再スタート(前進)
006 前進を銀テープ幅分( 約 0.5 秒間 )
007 銀テープではないので、通常ライントレースへ
008 白黒判断( CN2 が30% 以下か=黒色 )
009 右方向に前進
010 黒以外(白色)処理を次に記述
011 左方向に前進
012 008 の if 文が終了、013 へ
013 002 の if 文が終了、002 へ戻ります。
014 while 文の終了

< Sample 2 >銀テープ判定方式
001 while 文の条件は、無条件ループとし 015 まで繰り
   返します。
002 銀テープか、チェックしています。
003 銀テープなので停止します。
004 銀テープ上で 5.0 秒間停止
005 銀テープなら以下を実行
006 銀テープの間、直進
007 銀テープ間、処理終了
008 銀テープ処理が終了
009 白黒判定( CN2 30% 以下か=黒色 )
010 黒色と判断して、左向きへ前進
011 白色(黒色でなければ=白色)
012 白色と判断して、右向きへ前進
013 009 の if 文が終了、014 へ
014 002 の if 文に戻ります。
015 001 のペア(無限ループの最後:実行はされない)
[ 動かしてみましょう。 ]

 どうでしたか?

 Sample1は、今までのサンプルと同じ手法を使っているので理解ができたと思います。
 Sample2は、while 文の変わった使い方です。今までは while 文はループ条件を「無限ループ」として
 使っていましたが、今回はループ条件をセンサ情報( CN2 )としました。
 具体的には、CN2の情報が75%以上(銀テープ)の間は直進する為、銀テープの長さが変化しても対
 応することができます。銀テープが無くなれば通常のライントレース処理に戻ります。





 


【 STEP 8 】

銀テープでロボットを5秒間停止、停止中LED(赤)を1秒間隔で点滅させ、その後再スタートさせる。


 処理する内容は、前問とまったく同じです。

 ただ、ロボットが銀テープ上で停止している間に
 LED(赤)を1秒間隔で点滅させる処理が追加です。










[ サンプルプログラム ]

C-Style部分は、拡大できます。
< Sample1 >銀テープ判定方式
001 while 文の条件は、無条件ループとし 019 まで繰り
   返します。
002 銀テープか、チェックしています。
003 銀テープと判断して停止します。
004 LED2を5回(5秒間)点滅させるループ回数を設
   定します。
005 RED2(赤色LED)をON(点灯)させます。
006 点灯時間を 0.5 秒間にします。(ON/OFFで1秒)
007 RED2(赤色LED)を、OFF(消灯)させます。
008 消灯時間を 0.5 秒間にします。(ON/OFFで1秒)
009 5回ループ( 5秒間でRED2・LEDが5回点滅 )
010 銀テープの間、下記命令を無限実行
011 銀テープ上なので40%の速度で直進前進走行させる
012 銀テープの間の続くループ処理
013 銀テープを超えて通常の白黒コースに戻った。
014 白黒判断( CN2 が30% 以下か=黒色 )
015 左方向に前進
016 黒以外(白色)処理を次に記述
017 右方向に前進
018 014 の if 文が終了、019 へ
019 002 の if 文が終了、020 へ
020 while 文の終了、001へ(無限ループ)
[ 動かしてみましょう。 ]

 どうでしたか?

 今回はLEDを点滅させる方法を学びました。他のLEDも同様に動作させることができます。
 一度トライしましょう。( 緑色LED、赤色LED1、赤色LED2、赤色LED3 )



 


【 STEP 9 】

センサ情報を見てみましょう。

 センサの情報は、通信ケーブルを通じてパソコン上で確認することができます。
 センサから得られる値を知る事はプログラムを作成する上で大変重要です。

( 例 )

 黒色の値 :  5
 白色の値 : 60
 銀色の値 : 85  とした場合( 環境、ロボットにより値は変わります。)

< 白黒判定値の計算 >

  ( 黒色部分の値 + 白色部分の値 )/ 2 =  判定値
      5  +   60    / 2 = 32.5( 32 又は 33 )

< 銀色判定値の計算 >


  ( 銀色部分の値 + 白色部分の値 )/ 2 =  判定値
      85  +   60    / 2 = 72.5( 72 又は 73 )


< C-Style からセンサ情報を得る方法 >
@ オプションメニュー内にあるセンサーモニターを選択します。


A 下記センサーモニター画面が表示されます。


B パソコンとロボットに通信ケーブルを接続して、ロボットの電源を入れてリセットスイッチを押す。


 今勉強中のラインセンサは、CN2<Line>の値を見ます。

 センサの値は、0 〜 1023 の範囲で変化します。これはセンサからのアナログ電圧をデジタルに変換する
 回路できまります。

 黒色は、0 に近い値になります。
 白色は、1023に近い値になります。

 また、直接上記数値を使っても良いですが、解り易く ”%” 表示が一般的に使われています。
 % 表示は、以下の様になっています。

  ( 297 / 1024 ) X 100 = 29 [ % ]



 おつかれさまでした。

 以上が、ラインセンサを使ったライントレースの基本を勉強してきました。
 今回は、1個のラインセンサを使った勉強でしたが、よりスムースにラインをトレースするには複数個のセンサ
 を使いますが、これは上級コースで勉強していきます。
 ( ロボカップ等に対応しようとした高度なライントレース )






  

教室情報 ――――――

ロボカップ関連 ――――
  

バナースペース

けいはんな
   ジュニアロボットクラブ

〒619-0237
京都府相楽郡精華町光台8丁目

TEL : 070-5263-2200
FAX : 0774-98-1100
mail : jun@kinet-tv.ne.jp