- 追加された行はこの色です。
- 削除された行はこの色です。
[[ロボティクス入門ゼミ]]
*はじめてのプログラム [#wb70df6a]
四角に走るプログラム
task main()
{
repeat(4){
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(300);
OnRev(OUT_C);
Wait(83);
}
Off(OUT_A+OUT_C);
}
*『木』を書くプログラム [#b0e29fc3]
まだ本体を使って調整していないので試作段階です。
task main()
{
OnFwd(OUT_B);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(300);
OnRev(OUT_B);
Wait(100);
OnRev(OUT_A);
Wait(125);
OnFwd(OUT_A+OUT_C);
Wait(214);
OnRev(OUT_A);
Wait(125);
OnFwd(OUT_B);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(500);
OnRev(OUT_B);
Wait(100);
OnRev(OUT_A+OUT_C);
Wait(250);
OnRev(OUT_A);
Wait(125);
OnFwd(OUT_B);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(300);
OnRev(OUT_B);
Wait(100);
OnRev(OUT_A+OUT_C);
Wait(300);
OnRev(OUT_C);
Wait(83);
OnFwd(OUT_B);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(300);
OnRev(OUT_B);
Wait(100);
Off(OUT_A+OUT_B+OUT_C);
}
前回のものを実際に本体を使って試運転した結果、しっかりと動けてなかったので改良したものです。数値の調整は必要。
#define pen_down OnFwd(OUT_B);Wait(100); //ペンを下げる
#define pen_up OnRev(OUT_B);Wait(100); //ペンを上げる
#define turn1 OnFwd(OUT_A);OnRev(OUT_C);Wait(85); //右旋回1
#define turn2 OnFwd(OUT_A);OnRev(OUT_C);Wait(40); //右旋回2
#define turn3 OnRev(OUT_A);OnFwd(OUT_C);Wait(70); //左旋回
#define OUT1 Off(OUT_A+OUT_C); Wait(10); //タイヤのモーターを止める
#define OUT2 Off(OUT_B);Wait(10); //ペンのモーターを止める
task main()
{
pen_down;
OUT2;
OnFwd(OUT_A+OUT_C);
Wait(150);
OUT1;
pen_up;
OUT2; //一画目
OnRev(OUT_A+OUT_C);
Wait(190);
OUT1;
turn1;
OnRev(OUT_A+OUT_C);
Wait(50);
OUT1; //二画目の始まりまで移動
pen_down;
OUT2;
OnFwd(OUT_A+OUT_C);
Wait(200);
OUT1;
pen_up;
OUT2; //二画目
OnRev(OUT_A+OUT_C);
Wait(215);
OUT1;
turn2;
OUT1;
OnFwd(OUT_A+OUT_C);
Wait(30);
OUT1; //三画目の始まりまで移動(後退・旋回)
pen_down;
OUT2;
OnFwd(OUT_A+OUT_C);
Wait(150);
OUT1;
pen_up;
OUT2; //三画目
OnRev(OUT_A+OUT_C);
Wait(165);
OUT1;
turn3;
OUT1;
OnFwd(OUT_A+OUT_C);
Wait(111);
OUT1; //四画目の始まりまで移動(後退・旋回)
pen_down;
OUT2;
OnFwd(OUT_A+OUT_C);
Wait(150);
OUT1;
pen_up; //四画目
Off(OUT_A+OUT_B+OUT_C);
}
*課題と反省 [#wc1aeb98]
上に書いたプログラムでほぼ完全に動きます。しかし、紙が曲がっていたりでこぼこしていたりすると三画目、四画目が合わなくなってしまいます。今まで新聞紙の上に書いて成功した確率は20%程度なので課題は成功する確率を100%に上げることです。
字を書く仕組みはロボット自体を動かして書くというものだったのでペンの方を動かす仕組みにしていればよかったと思いました。また、実際に字を書かせてみたら字が少しグニャグニャになってしまったので、ペンを持たせる部分をもう少ししっかりさせておけばよかったと思いました。
*課題2 光センサーとタッチセンサーの融合 [#h23035b7]
ラインとレースとタッチセンサーのプログラム
#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 //もし、タッチセンサーが反応したとき、まず、後退し右周りで障害物を避けていく
}
}
}
まだ未完成のもので、ライントレースはするものの曲率の大きいものは曲がりきれなく、障害物をよける方でもまだ調整が必要。
*課題3 光を追い、見失ったら曲をならしながら探すプログラム [#bed8e15b]