[[2016a/Member]]
*今回の課題について [#b8f9634b]
#ref(s_IMG_1335)
#ref(s_IMG_1335.PNG)
ロボティクス入門ゼミ2つ目の課題は、ロボットにセンサーをつけ、黒い線の、与えられたコースに沿って走るロボットを作ることでした。コースは3種類あり、3人グループなので、1人1つコースを選んでプログラミングをすることになります。僕は2つ目のコースの、B地点からC地点へのコースを担当しました。コースについて説明します。B→R右折→Q直進→Q直進→P右折→S右折→Cというコースです。

*制作したロボットについて [#m8d3c615]
#ref(s_IMG_1325.JPG)
これが今回制作したロボットです。なるべくセンサーが地面に近く、より正確に黒線を読み取れるものを目指しました。
#ref(s_IMG_1323.JPG)
ロボット本体と、センサーの部分を別にするとこのようになります。とてもシンプルです。

*今回の課題のポイントとそれに対する工夫 [#j6416d9d]
プログラムについて説明する前に、今回の課題の難しい点と、それをどう解決したかについて説明します。
 
今回の課題で最も難しい点は、交差点をどのように攻略するかという点です。交差点では、交差点を認識したことの証として音を鳴らし、1秒間停止しなければなりません。その後、交差点を右折、左折、直進のどれかを行います。交差点を通過し、また走り始めるためには、センサーの位置が黒線上になければなりません。ロボットが毎回同じ動きをしてくれないことは前回の課題でよくわかっていたので、機体を旋回させて正確にセンサーを線上に移動させる自信は0だったので、ここである工夫をしました。
 #define find_line turn_right1;until(SENSOR_1 < THRESHOLD);Off(OUT_AC);
その工夫というのは、このfind_lineと定義されたものです。turn_right1については後程説明しますが、要するに右旋回です。find_lineとは、黒線が見つかるまで旋回し、センサーが線上に来たら止まるという優れものです。これをどのように使うかというと、
#ref(s_IMG_1328.JPG)
まず、ロボットが交差点でこのように止まります。ここでは例として直進をさせたいと思います。、
 cross_right2;
 find_line;
cross_right2についてはまた後程説明しますが、要するに右旋回です。このようにすると、
#ref(s_IMG_1329.JPG)
このようになります。cross_right2でセンサーが線外に出るまで旋回し、、find_lineで線上まで旋回します。これによって今回の課題に取り組む上での、ロボットの動きによる失敗が大幅に減ったと思います。

*プログラムについて [#g92f8ce3]
 #define THRESHOLD 55 
 #define SPEED_H 50
 #define SPEED_H2 45
 #define SPEED_L 25
 #define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OUT_C,speedL);
 #define go_forward OnRL(SPEED_H,SPEED_H);
 #define turn_left1 OnRL(SPEED_L,-SPEED_L);
 #define turn_left0 OnRL(SPEED_L,0);
 #define turn_left2 OnRL(SPEED_H2,0);
 #define turn_right0 OnRL(0,SPEED_L);
 #define turn_right1 OnRL(-SPEED_L,SPEED_L);
 #define turn_right2 OnRL(0,SPEED_H2);
 #define cross_right1 turn_right2;Wait(500);Off(OUT_AC);
 #define cross_right2 turn_right2;Wait(250);Off(OUT_AC);
 #define cross_left  turn_left2;Wait(500);Off(OUT_AC);
 #define find_line turn_right1;until(SENSOR_1 < THRESHOLD);Off(OUT_AC);
まずはdefineです。白黒の判断の基準となる値や、スピード、右旋回、左旋回、先ほど紹介したfind_lineなどを定義しました。cross_right2はfind_lineの説明に用いたもので、交差点を直進するときに使い、cross_right1は2より時間が長いため、交差点を右折するときに使います。
 
今回の課題に取り組むうえで、コースを5つに分け、5つのサブルーチンを作りました。「」をCROSS1()、「」をCROSS2()、「」をCROSS3()、「」を


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS