- 追加された行はこの色です。
- 削除された行はこの色です。
[[2019a/Member]]
*課題2 [#q9f9cf6a]
下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
**コース [#sd0456bc]
#ref(2019a/Member/aoto/Mission2/course2019a.png,100%,robot)
黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには、長さ15または16のブロックおく。
**ミッション [#b86789f7]
A地点を出発し、次のいずれかの経路を黒い線にそって動くロボットを作成する (他のメンバーとは別の経路になるようにする)。
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*ロボット [#p655b343]
#ref(2019a/Member/aoto/Mission2/robot.jpg,50%,robot)
光センサーをタイヤの間に取り付けた
#ref(2019a/Member/aoto/Mission2/robot2.jpg,50%,robot2)
ボールを運ぶ部分は3つ目のモーターを使うことでより安定してボールを運ぶ機構を作ることができると考えられるが、私たちは簡易的なアームにすべてを託した。
*プログラム [#ma223713]
**定義 [#offa0f4f]
右折、左折、右旋回、左旋回、そして直進を定義した。
#define migi0 OnFwd(OUT_C,25);Off(OUT_B); //左折
#define hidari0 OnFwd(OUT_B,25);Off(OUT_C); //右折
#define migi1 OnFwd(OUT_C,30);OnRev(OUT_B,30); //左旋回
#define hidari1 OnFwd(OUT_B,30);OnRev(OUT_C,30); //右旋回
#define tyokusinn OnFwd(OUT_BC,30); //直進
光センサーの値を測定したところ
-黒26
-黒灰35
-白灰45
-白52
という結果になった。以後この値をもとにプログラムを作成した。
**交差点で停止するライントレースプログラム [#o8f0c9c9]
交差点で停止させるには黒にいる時間が一定時間を超えると、ライントレースを止めるプログラムを作る必要がある。
void line_trace()
{
SetSensorLight(S3);
long t0; //long型でt0を定義
t0=CurrentTick(); //t0に現在の時間を代入
while(CurrentTick()-t0<100){ //今からt0になるまで0.1秒経つまでの間プログラムを行う
if(SENSOR_3>50){ //明るさ51以上だと判断した際はその場で右旋回
migi1;
t0=CurrentTick(); //t0を更新
}else if(SENSOR_3>43){ //明るさ44〜50だと判断した際は右に曲がる
migi0;
t0=CurrentTick(); //t0を更新
}else if(SENSOR_3>38){ //明るさ39〜43だと判断した際は直進
tyokusinn;
t0=CurrentTick(); //t0を更新
}else if(SENSOR_3>30){ //明るさ31〜38だと判断した際は左に曲がる
hidari0;
t0=CurrentTick(); //t0を更新
}else{
hidari1; //明るさ30以下だと判断した際はその場で左旋回
}
}
}
このプログラムは黒以外の値をとるとt0を更新し続けるため、交差点のような長いあいだ黒の値を取る地点で停止をし、それ以外はライントレースを行うようになっている。