- 追加された行はこの色です。
- 削除された行はこの色です。
[[ロボティクス入門ゼミ]]
[[2006a/C5/課題2左]]
[[2006a/C5/課題2左/本体編]]
*プログラム編 [#tc6bc860]
ライントレースレースとタッチセンサーのプログラム
制作者:水
#define go_straight OnFwd(OUT_A);OnRev(OUT_C); //真っ直ぐ進む
#define go_back OnFwd(OUT_C);OnRev(OUT_A);Wait(100) //後退
#define turn_1 OnFwd(OUT_A+OUT_C); Wait(100); //右旋回
#define turn_2 OnRev(OUT_A+OUT_C); Wait(100); //左旋回
#define turn_3 OnFwd(OUT_A+OUT_C); //ライントレース用のパーツ
#define turn_4 OnRev(OUT_C+OUT_A); //ライントレース用のパーツ
#define off Off(OUT_A+OUT_C);Wait(1);
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH); //センサ−1、3はタッチセンサー、2は光センサー
go_straight; //基本は直進
while(true)
{
if (SENSOR_2<40) {
turn_4
Off(OUT_A);
} //光センサーが黒線の上にあるとき、機体を左に曲げる
else {
if(SENSOR_2>40) {
Off(OUT_C);
turn_3
} //白色で紙から光がセンサーに反射してくるとき、機体を右に曲げる
}
if((SENSOR_1==1)&&(SENSOR_3==1)) //タッチセンサーが両方とも反応したとき
{
off;
go_back; //はじめに後退
turn_1; //次に右へ方向転回
go_straight
Wait(100); //少し前進
turn_2; //さらに左旋回し、機体の方向を元に戻す
go_straight
Wait(100); //少し前進
turn_2; //元の線に戻るため左旋回
go_straight;
Wait(100); //少し前進
turn_1; //元の位置(予想)に戻る
go_straight
}
}
}
*プログラムの課題 [#b76bf2f1]
まだ完全に完成されたものとは言えず、ライントレースはするものの曲率の大きいものは曲がりきれなく、障害物をよける方でもまだ数値が完全に調整されていなく、調整が必要。問題は元の線に戻ることが予想の位置でプログラムされているため、もとの線に戻らない可能性が大きいということ。そのため、さらに良い方法を考えることが必要。
*もう一つのプログラム [#z7e889d5]
ぶつかったら反転するプログラム
制作者:ぼくつね
#define go_straight OnFwd(OUT_A);OnRev(OUT_C);//go straight
#define go_back OnFwd(OUT_C);OnRev(OUT_A);Wait(100)//go back
#define turn_1 OnFwd(OUT_A+OUT_C); Wait(100);//turn right
#define turn_2 OnRev(OUT_A+OUT_C); Wait(100);//turn left
#define turn_3 OnFwd(OUT_A+OUT_C);//a Instruction for line trace
#define turn_4 OnRev(OUT_C+OUT_A);//a Instruction for line trace
#define off Off(OUT_A+OUT_C);Wait(1);
task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH);
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_TOUCH);//this decler that sensor1,2 is touch senser and sensor2 is light sensor
go_straight;//go_strait is basic main program
while(true)
{
if (SENSOR_2<40) {
turn_4
Off(OUT_A);
}//when right semnsors are above the black line,macine turn right
else {
if(SENSOR_2>40) {
Off(OUT_C);
turn_3
}//
}
if((SENSOR_1==1)||(SENSOR_3==1)) //
{
off;
go_back;//
turn_3
Wait(100);
go_straight
}
}
}
**課題点 [#l1439c3d]
このプログラムで反転するときは回転する時間によって反転させているので、もしも相手とぶつかった場所が直線ではなく、急カーブだったら反転して元に戻ってくれないため、この先プログラムを調整することがあったらそこを改善したい。