- 追加された行はこの色です。
- 削除された行はこの色です。
目次
#contents
*ロボットについて [#u62a9aac]
私たちが今回作成したのはライントレースマシンである。これは線を引いた上を走るというロボットである。図にあるようなライントレースマシンは前回作った別のロボットの設計問題(字を書く際に紙が動いてしまう...etc)を考慮しながら作成していった。今回工夫したのは光センサーが反応する位置と動かなければならない位置との距離を短くするためにモータのある位置付近に光センサーを設置した。また場所によって光センサーの反応する値の変化を少なくするために光センサーと地面との距離を短くした。
#ref(image2.JPG)
*プログラミング [#gd0a47e1]
スピードや動かす方向を定義したもの
今回のプログラムは黒い線の恥に沿って動き、交差点の差し掛かる回数でロボットの向かう方向を変えていくというものである。これを行う際にはカウンタとタイマーという機能を活用した。タイマーで黒い線にいる場合の値を計測し、ある一定の値以上になった場合交差点であるという判断をさせるようにし、カウンタで交差点が通りかかった回数を数え、その状況に応じた動きをさせるようにした。
~●スピードや動かす方向を定義したもの
#define THRESHOLD 49//33(黒線に対して光センサーが反応した値)+65(白に対して光センサーが反応した値)÷2
#define SPEED_L 50//モーターの50%の出力
#define SPEED 25//モーターの25%の出力
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);//前後左右に動かせる
#define go_forward OnRL(SPEED_L,SPEED_L);//直進
#define turn_left1 OnRL(SPEED_L,-SPEED_L);//左旋回
#define turn_left0 OnRL(SPEED_L,-SPEED);//若干左に回る
#define turn_right0 OnRL(-SPEED,SPEED_L);//若干右に回る
#define turn_right1 OnRL(-SPEED_L,SPEED_L);//右旋回
#define STEP 1
#define tMAX 350
#define short_break Off(OUT_BC);Wait(1000);
#define CROSS_TIME 200
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
#define MOVE_TIME 500
SetSensorLight(S3);
long t0=CurrentTick();
int nOnline=0;
SetSensorLight(S3);//()は光センサーがつながっている。
long t0=CurrentTick();//currentTick()で現在の時刻が得られる。
int nOnline=0;//交差点を通った回数
●交差点以外の行動するプログラム
while(true){
if(CurrentTick()-t0<tMAX){
if(SENSOR_3<THRESHOLD-9){
turn_left1;
}else{
if(SENSOR_3<THRESHOLD-5){
turn_left0;
}else if(SENSOR_3<THRESHOLD+5){
go_forward;
}else if(SENSOR_3<THRESHOLD+9){
turn_right1;
}else{
turn_right0;
}t0=CurrentTick();
Wait(STEP);
}
}else{
}
●交差点に差しかかった時のプログラム
#define STEP 1
#define tMAX 350
#define STEP 1//0.001秒
#define tMAX 350//通常の道における許容できる繰り返しの最大値
#define short_break Off(OUT_BC);Wait(1000);//少しの間待つ
#define CROSS_TIME 200//交差点を直進する時の時間
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;//ちょ
#define MOVE_TIME 500
else{
●左右に振れた分を修正し、交差点に対してまっすぐにする
Off(OUT_BC);
turn_right0;
Wait(275);
‣一回目の交差点
if(nOnline<1){
turn_left1;
Wait(500);
}else if(nOnline<2){
}
‣二回目の交差点
else if(nOnline<2){
turn_right1;
Wait(520);
}else if(nOnline<3){
}
‣三回目の交差点
else if(nOnline<3){
turn_left1;
Wait(500);
}else if(nOnline<4){
}
‣四回目の交差点
else if(nOnline<4){
go_forward;
Wait(200);
}
go_forward;
Wait(200);
nOnline++;
t0=CurrentTick();
Wait(STEP);
}
}
}
}
*作成時における問題と解決方法 [#v06b571b]
*結果・反省 [#j39f5243]
*感想 [#n92be6ce]
場所により光センサーの反応する値が変化する。 ⇒ 光センサーと地面の距離を短くした。
~ 交差点の通る回数ごとに動きを変化することが出来なかった。 ⇒ タイマーとカウンタを併用した。
*結果・感想[#j39f5243]
結果としては課題通りに動かすことが出来た。しかし、交差点に通りかかり次の道に移る際に曲がりすぎたりしてコースから外れることがたまにあった。今回の行ったライントレースマシンは来年行うかもしれないものであり、プログラミングやロボットの作成の際に起こった問題や改善方法を活かしていこうと思った。