ロボティクス入門ゼミ

2006a/MemberOnly/進行状況C

2006a/C5/ロボコン

2006a/C5/ロボコン/本体編

2006a/C5/ロボコン/プログラム編

2006a/C5/ロボコン/プログラム編/右

2006a/C5/ロボコン/プログラム編/左

プログラム

このプログラムはロボコンが終了した後にロボコンでの動きの問題点を想像で(実際に動かしたりなどの試しなしに)製作したものです。

#define arm_up OnFwd(OUT_B);Wait(80);  //腕を上げる
#define arm_down OnRev(OUT_B);Wait(80); //腕を下ろす
#define R_turn_90 OnFwd(OUT_C);OnRev(OUT_A);Wait(85);  //右に90°旋回
#define L_turn_90 OnRev(OUT_C);OnFwd(OUT_A);Wait(85); //左に90°旋回
#define R_turn_180 OnFwd(OUT_A);OnRev(OUT_C);Wait(170); //180°回転
#define light until((SENSOR_2<40)&&(SENSOR_3<40));  //光センサーが黒線を感知するまで
#define touch until(SENSOR_1==1);  //缶に触れるまで
#define go OnFwd(OUT_A+OUT_C);  //直進
#define back OnRev(OUT_A+OUT_C);  //後退
#define go_line  go light line_number=line_number+1;  //線を1本感知するまで直進
#define back_line  back light line_number=line_number+1; //線につくまで後退
#define message ClearMessage();while(Message() !=0  {SendMessage(1);Wait(50);} until(Message() !=0);  //メッセージを送信、受信

int line_number;  //線の本数を変数とします 
sub GO()    //上同様何度も使うのでサブルーチンにしました
{
go
Wait(50);   //少しだけ直進、1本目の線を過ぎる
Off(OUT_A+OUT_C);
Wait(1);
go
light   //2本目の線に達したら
R_turn_90 //右に90°回転
go_line  
go  
Wait(10);
go_line //直進し2本線を過ぎるまで進み続ける
}

sub BACK() //以前のものと変えたのはここだけです。帰りに場所の不足で曲がりきれなかったためにそれを補うように一応プログラムしました。
{ 
OnRev(OUT_C);OnFwd(OUT_A);Wait(42);  //缶をつかんだ状態でのはじめに約45°旋回
back
until((SENSOR_2<40)  //センサー2のみが黒線の上に来るまで後退
OnRev(OUT_A);Wait(42);  //機体をはじめのと垂直になるようにそろえる
L_turn_90  //左に90°旋回する
back_line  //1本目の黒線まで後退
back
Wait(10);
back_line  //2本目の黒線まで後退
}

task main()
{
SetSensor(SENSOR_1,SENSOR_TOUCH); //センサー1をタッチセンサーとします
SetSensor(SENSOR_2,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー2,3を光センサーとします

line_number=0;
GO();
until(line_number==2);  //線が2本になったら
R_turn_90  //右に90°旋回
go
touch //缶に触れるまで直進
arm_down //腕を下ろす

BACK();
L_turn_90 //受け渡し場所の前まできたら90°左旋回
back //後退(前進)する
Wait(50);

message //メッセージの作業が済んだら
go //少し下がって
Wait(50);
R_turn_180 //180°回転
arm_up
go
Wait(50); //腕を上げ、缶を渡す
back
Wait(50);  //少し下がり
R_turn_180 //180°回転

GO();
until(line_number==6); //1回目と同じ動作
OnRev(OUT_C);
Wait(85); //少し小さめに右寄りに回転
go
touch
arm_down

BACK();
L_turn_90
back Wait(50);

message
go
Wait(50);
R_turn_180
arm_up
go
Wait(50);
back
Wait(50);
R_turn_180   //1回目と同じ

GO();
until(line_number==10); //1回目、2回目と同じ
OnFwd(OUT_A);Wait(85); //今度は少し大きめに左よりに回転
go
touch
arm_down

BACK();
L_turn_90
back
Wait(50);

message
go
Wait(50);
R_turn_180
arm_down
go
Wait(50);  //1,2回目と同じ
}

課題と反省

先にも書いておきましたが、このプログラムは試運転も何もなく、調整なしのためこれでしっかりと動けるかどうか分かりません。しかし、ロボコンで失敗した点はこの考え方で改善できていると思います。出来ればここまでのプログラムをロボコン前までに完成させて、更に試運転し調整も完全な状態でロボコンに出したかったです。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-13 (日) 23:20:48