2016b/Member/yosuke/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016b/Member]]
#contents
*課題の説明 [#o00b0829]
課題2で作成したフィールドを使って野球ロボットを製作する~
自分はバッターロボを担当しました。
#ref(2016b/Member/yosuke/Mission3/2016b-mission3.png,70%,...
*ロボット本体の説明(バッター) [#q206d180]
#ref(2016b/Member/yosuke/Mission3/IMG_1102.JPG,10%,バッタ...
~
#ref(2016b/Member/yosuke/Mission3/IMG_1104.JPG,10%,バッタ...
~
バッターポジションまで向かうのには前回作成したライントレ...
*ロボット本体の説明(ピッチャー) [#u1c3a590]
#ref(2016b/Member/yosuke/Mission3/IMG_1101.JPG,10%,ピッチ...
~
#ref(2016b/Member/yosuke/Mission3/IMG_1105.JPG,10%,ピッチ...
~
ピッチャーロボットの移動に関してもバッターロボットの移動...
*プログラム (ピッチャー)[#c7a8c9d1]
サブルーチンは光センサーが黒を検知するまで進むというもの...
sub stop_line()
{
until(SENSOR_2<48){
OnFwd(OUT_AC);
}
PlaySound(SOUND_UP);
}
基本的には目的地まで直線的に向かうが最終的に向きがB地点を...
task main()
#define READY 150 //通信で使う値
{
SetSensor(SENSOR_1,SENSOR_ROTATION);
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearSensor(SENSOR_1);
until(SENSOR_1>4){
OnFwd(OUT_C);
OnRev(OUT_A);} //機体の向きを変える
Off(OUT_AC);
stop_line(); //1本目の線(Aの枠)まで前進
ClearSensor(SENSOR_1);
until(SENSOR_1<-5){
OnFwd(OUT_AC);} //1本目の線を完全に通過
stop_line(); //2本目の線まで前進
Off(OUT_AC);
Wait(50);
ClearSensor(SENSOR_1);
until(SENSOR_1<-4){
OnFwd(OUT_AC);} //2本目の線を完全に通過
Off(OUT_AC);
Wait(10);
stop_line(); //3本目の線まで前進
Off(OUT_AC);
Wait(40);
ClearSensor(SENSOR_1);
until(SENSOR_1>2){
OnFwd(OUT_C);
OnRev(OUT_A);} //機体の向き調整
ClearSensor(SENSOR_1);
until(SENSOR_1<-7){
OnFwd(OUT_AC);} //3本目の線を完全に通過
Off(OUT_AC);
stop_line(); //4本目の線(Mの枠)まで前進
Off(OUT_AC);
Wait(60);
ClearSensor(SENSOR_1);
until(SENSOR_1<-6){
OnFwd(OUT_AC);}
ClearSensor(SENSOR_1);
until(SENSOR_1<-20){
OnFwd(OUT_A);
OnRev(OUT_C);} //機体の向き調整 Bを向く Mの枠を...
Off(OUT_AC);
ClearMessage();
until(Message()==READY); //メッセー...
PlaySound(SOUND_CLICK); //確認のた...
while(true){
Wait(500);//
OnRev(OUT_B);
Wait(35);
Off(OUT_B); //一定間隔ごとに...
}
}
*プログラム(バッター) [#lfd4b5a4]
#define go_forward OnFwd(OUT_AC);//前に進む
#define turn_left1 Off(OUT_C);OnFwd(OUT_A);//小さく左に...
#define turn_left2 OnRev(OUT_C);OnFwd(OUT_A);//大きく左...
#define turn_right1 Off(OUT_A);OnFwd(OUT_C);//小さく右に...
#define turn_right2 OnRev(OUT_A);OnFwd(OUT_C);//大きく右...
#define MAX_TIME 20
sub crossing_stop() //交差点に入って止まる
{
ClearTimer(0);
while(FastTimer(0)<MAX_TIME){//タイマーが基準値以下のと...
if(SENSOR_2<39){
turn_left2;//しきい値が39以下のところで大きく左に曲がる
}else if(SENSOR_2<41){
turn_left1;ClearTimer(0);//しきい値が41以下のところで小...
}else if(SENSOR_2<43){
go_forward;ClearTimer(0);//しきい値が43以下のところで直...
}else if(SENSOR_2<50){
turn_right1;ClearTimer(0);//しきい値50以下のところで小さ...
}else{
turn_right2;ClearTimer(0);//しきい値が51以上のところで大...
}
}
Off(OUT_AC);Wait(100);
OnRev(OUT_AC);Wait(20);//タイマーが基準値を上回ったとき...
}
sub crossing_left()//T字路で止まってから、左に曲がる
{
turn_left1;
Wait(80);
}
task main()より上の定義やサブルーチンに関しては前回のライ...
task main()の中でピッチャーロボとの通信について記述してい...
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//バッティングするとき...
SetSensor(SENSOR_2,SENSOR_LIGHT);//ライントレースをする...
SetSensor(SENSOR_3,SENSOR_ROTATION);//回転センサー
ClearSensor(SENSOR_3);
until (SENSOR_3<-18){
OnFwd(OUT_AC);
} //6点のゴールの直前まで進む
ClearSensor(SENSOR_3);
until(SENSOR_3<-7){
OnFwd(OUT_A);OnRev(OUT_C);
} //90度左へ回転する
until(SENSOR_2<40){
OnFwd(OUT_AC);
}Off(OUT_AC); //ロボットから見て、1回目のQR間...
ClearSensor(SENSOR_3);
until (SENSOR_3>1){
OnRev(OUT_A);Off(OUT_C);
} //ロボットから見て、少し左側に機体...
ClearSensor(SENSOR_3);
until (SENSOR_3<-4){
OnFwd(OUT_AC);
} //黒い線を超えるために、少し直進する
until(SENSOR_2<40){
OnFwd(OUT_AC);
} //ロボットから見て、2回目のQR間の黒...
ClearSensor(SENSOR_3);
until (SENSOR_3<-4){
OnFwd(OUT_AC);
} //黒い線を超えるために、少し直進する
crossing_stop(); //RのT字路までライントレースをして、...
crossing_left(); // T字路を左へ曲がる
crossing_stop(); //BのT字路までライントレースをして、...
ClearSensor(SENSOR_3);
until (SENSOR_3>6){
OnRev(OUT_A);Off(OUT_C);
}
ClearSensor(SENSOR_3);
until (SENSOR_3<-24){
OnFwd(OUT_AC);
}
ClearSensor(SENSOR_3);
until (SENSOR_3>9){
OnRev(OUT_A);Off(OUT_C);
} //Bのボックスに入り、かつ球を打てる...
Off(OUT_AC);Wait(30);
ClearSensor(SENSOR_3);
until (SENSOR_3>16){
OnRev(OUT_AC);
} //ピッチャーロボットと通信できる範囲...
Off(OUT_AC);
SendMessage(150); //通信する
Wait(100);
ClearSensor(SENSOR_3);
until (SENSOR_3<-16){
OnFwd(OUT_AC);
} //元のバッターボックスに戻る
Off(OUT_AC);
while(true){
if(SENSOR_1>61){
OnRev(OUT_B);
Wait(10);
Off(OUT_B);Wait(50);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
}
} //SENSOR1の光センサーの値が、62以上にな...
Off(OUT_ABC);
}
*まとめ、感想 [#v8b8eb91]
今回の課題は前回、前々回に比べて非常に難易度が上がってい...
実際に本番のロボコンの際には多くのチームが不具合を起こし...
のように動作しないということがありました。その理由として...
変わったことにより床の環境(摩擦度合い等)や光センサーの...
、教室の傾き度合いでボールの軌道が変化したりするといった...
考えられました。その結果普段のような結果にならなかったと...
ロボットはとても繊細なんだなということを感じました。~
また、機体に関しても動作の途中に部品が外れたりギアのかみ...
正常な動作をしないというケースが多発したことに関してもロ...
感じることができました。加えてこの授業全体を通して最も強...
漢字を一つ書くことや線の上をなぞって所定の位置に行くこと...
もう片方の機体が打つという単純な動作をするロボットを製作...
長い時間をかけ、たくさんの労力をかける必要があったという...
人が行えば一瞬で行うことができる活動をロボットにさせると...
何十時間とかける必要があるということを知りいかに効率よく...
より効率の良いプログラムを構築することはロボットの製作に...
最も大切なことの一つではないかと感じました。現在では対話...
や様々な、人の活動を代わりに行うロボットがたくさん生産さ...
今まではそういったロボットを多少すごいと感じても人間がや...
早いんじゃないかと考えていましたがこのロボティクス入門ゼ...
経験したうえでそういったロボットを見てみると制作者の何時...
そういったロボットが常人には製作できる代物ではないと感じ...
違った視点でロボットを見ることができるようになりました。~
また、そのほかにも自分と同じ班の三人の方には本当に助けて...
自分が参加できない時でも非難することなく取り組んでくれた...
の大切さを学んだ気がします。自分はプログラミングを学ぶ学科
なのでこの講義を通して学んだことを~
これからの授業に生かして行ければいいなと感じました。
終了行:
[[2016b/Member]]
#contents
*課題の説明 [#o00b0829]
課題2で作成したフィールドを使って野球ロボットを製作する~
自分はバッターロボを担当しました。
#ref(2016b/Member/yosuke/Mission3/2016b-mission3.png,70%,...
*ロボット本体の説明(バッター) [#q206d180]
#ref(2016b/Member/yosuke/Mission3/IMG_1102.JPG,10%,バッタ...
~
#ref(2016b/Member/yosuke/Mission3/IMG_1104.JPG,10%,バッタ...
~
バッターポジションまで向かうのには前回作成したライントレ...
*ロボット本体の説明(ピッチャー) [#u1c3a590]
#ref(2016b/Member/yosuke/Mission3/IMG_1101.JPG,10%,ピッチ...
~
#ref(2016b/Member/yosuke/Mission3/IMG_1105.JPG,10%,ピッチ...
~
ピッチャーロボットの移動に関してもバッターロボットの移動...
*プログラム (ピッチャー)[#c7a8c9d1]
サブルーチンは光センサーが黒を検知するまで進むというもの...
sub stop_line()
{
until(SENSOR_2<48){
OnFwd(OUT_AC);
}
PlaySound(SOUND_UP);
}
基本的には目的地まで直線的に向かうが最終的に向きがB地点を...
task main()
#define READY 150 //通信で使う値
{
SetSensor(SENSOR_1,SENSOR_ROTATION);
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearSensor(SENSOR_1);
until(SENSOR_1>4){
OnFwd(OUT_C);
OnRev(OUT_A);} //機体の向きを変える
Off(OUT_AC);
stop_line(); //1本目の線(Aの枠)まで前進
ClearSensor(SENSOR_1);
until(SENSOR_1<-5){
OnFwd(OUT_AC);} //1本目の線を完全に通過
stop_line(); //2本目の線まで前進
Off(OUT_AC);
Wait(50);
ClearSensor(SENSOR_1);
until(SENSOR_1<-4){
OnFwd(OUT_AC);} //2本目の線を完全に通過
Off(OUT_AC);
Wait(10);
stop_line(); //3本目の線まで前進
Off(OUT_AC);
Wait(40);
ClearSensor(SENSOR_1);
until(SENSOR_1>2){
OnFwd(OUT_C);
OnRev(OUT_A);} //機体の向き調整
ClearSensor(SENSOR_1);
until(SENSOR_1<-7){
OnFwd(OUT_AC);} //3本目の線を完全に通過
Off(OUT_AC);
stop_line(); //4本目の線(Mの枠)まで前進
Off(OUT_AC);
Wait(60);
ClearSensor(SENSOR_1);
until(SENSOR_1<-6){
OnFwd(OUT_AC);}
ClearSensor(SENSOR_1);
until(SENSOR_1<-20){
OnFwd(OUT_A);
OnRev(OUT_C);} //機体の向き調整 Bを向く Mの枠を...
Off(OUT_AC);
ClearMessage();
until(Message()==READY); //メッセー...
PlaySound(SOUND_CLICK); //確認のた...
while(true){
Wait(500);//
OnRev(OUT_B);
Wait(35);
Off(OUT_B); //一定間隔ごとに...
}
}
*プログラム(バッター) [#lfd4b5a4]
#define go_forward OnFwd(OUT_AC);//前に進む
#define turn_left1 Off(OUT_C);OnFwd(OUT_A);//小さく左に...
#define turn_left2 OnRev(OUT_C);OnFwd(OUT_A);//大きく左...
#define turn_right1 Off(OUT_A);OnFwd(OUT_C);//小さく右に...
#define turn_right2 OnRev(OUT_A);OnFwd(OUT_C);//大きく右...
#define MAX_TIME 20
sub crossing_stop() //交差点に入って止まる
{
ClearTimer(0);
while(FastTimer(0)<MAX_TIME){//タイマーが基準値以下のと...
if(SENSOR_2<39){
turn_left2;//しきい値が39以下のところで大きく左に曲がる
}else if(SENSOR_2<41){
turn_left1;ClearTimer(0);//しきい値が41以下のところで小...
}else if(SENSOR_2<43){
go_forward;ClearTimer(0);//しきい値が43以下のところで直...
}else if(SENSOR_2<50){
turn_right1;ClearTimer(0);//しきい値50以下のところで小さ...
}else{
turn_right2;ClearTimer(0);//しきい値が51以上のところで大...
}
}
Off(OUT_AC);Wait(100);
OnRev(OUT_AC);Wait(20);//タイマーが基準値を上回ったとき...
}
sub crossing_left()//T字路で止まってから、左に曲がる
{
turn_left1;
Wait(80);
}
task main()より上の定義やサブルーチンに関しては前回のライ...
task main()の中でピッチャーロボとの通信について記述してい...
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//バッティングするとき...
SetSensor(SENSOR_2,SENSOR_LIGHT);//ライントレースをする...
SetSensor(SENSOR_3,SENSOR_ROTATION);//回転センサー
ClearSensor(SENSOR_3);
until (SENSOR_3<-18){
OnFwd(OUT_AC);
} //6点のゴールの直前まで進む
ClearSensor(SENSOR_3);
until(SENSOR_3<-7){
OnFwd(OUT_A);OnRev(OUT_C);
} //90度左へ回転する
until(SENSOR_2<40){
OnFwd(OUT_AC);
}Off(OUT_AC); //ロボットから見て、1回目のQR間...
ClearSensor(SENSOR_3);
until (SENSOR_3>1){
OnRev(OUT_A);Off(OUT_C);
} //ロボットから見て、少し左側に機体...
ClearSensor(SENSOR_3);
until (SENSOR_3<-4){
OnFwd(OUT_AC);
} //黒い線を超えるために、少し直進する
until(SENSOR_2<40){
OnFwd(OUT_AC);
} //ロボットから見て、2回目のQR間の黒...
ClearSensor(SENSOR_3);
until (SENSOR_3<-4){
OnFwd(OUT_AC);
} //黒い線を超えるために、少し直進する
crossing_stop(); //RのT字路までライントレースをして、...
crossing_left(); // T字路を左へ曲がる
crossing_stop(); //BのT字路までライントレースをして、...
ClearSensor(SENSOR_3);
until (SENSOR_3>6){
OnRev(OUT_A);Off(OUT_C);
}
ClearSensor(SENSOR_3);
until (SENSOR_3<-24){
OnFwd(OUT_AC);
}
ClearSensor(SENSOR_3);
until (SENSOR_3>9){
OnRev(OUT_A);Off(OUT_C);
} //Bのボックスに入り、かつ球を打てる...
Off(OUT_AC);Wait(30);
ClearSensor(SENSOR_3);
until (SENSOR_3>16){
OnRev(OUT_AC);
} //ピッチャーロボットと通信できる範囲...
Off(OUT_AC);
SendMessage(150); //通信する
Wait(100);
ClearSensor(SENSOR_3);
until (SENSOR_3<-16){
OnFwd(OUT_AC);
} //元のバッターボックスに戻る
Off(OUT_AC);
while(true){
if(SENSOR_1>61){
OnRev(OUT_B);
Wait(10);
Off(OUT_B);Wait(50);
OnFwd(OUT_B);
Wait(10);
Off(OUT_B);
}
} //SENSOR1の光センサーの値が、62以上にな...
Off(OUT_ABC);
}
*まとめ、感想 [#v8b8eb91]
今回の課題は前回、前々回に比べて非常に難易度が上がってい...
実際に本番のロボコンの際には多くのチームが不具合を起こし...
のように動作しないということがありました。その理由として...
変わったことにより床の環境(摩擦度合い等)や光センサーの...
、教室の傾き度合いでボールの軌道が変化したりするといった...
考えられました。その結果普段のような結果にならなかったと...
ロボットはとても繊細なんだなということを感じました。~
また、機体に関しても動作の途中に部品が外れたりギアのかみ...
正常な動作をしないというケースが多発したことに関してもロ...
感じることができました。加えてこの授業全体を通して最も強...
漢字を一つ書くことや線の上をなぞって所定の位置に行くこと...
もう片方の機体が打つという単純な動作をするロボットを製作...
長い時間をかけ、たくさんの労力をかける必要があったという...
人が行えば一瞬で行うことができる活動をロボットにさせると...
何十時間とかける必要があるということを知りいかに効率よく...
より効率の良いプログラムを構築することはロボットの製作に...
最も大切なことの一つではないかと感じました。現在では対話...
や様々な、人の活動を代わりに行うロボットがたくさん生産さ...
今まではそういったロボットを多少すごいと感じても人間がや...
早いんじゃないかと考えていましたがこのロボティクス入門ゼ...
経験したうえでそういったロボットを見てみると制作者の何時...
そういったロボットが常人には製作できる代物ではないと感じ...
違った視点でロボットを見ることができるようになりました。~
また、そのほかにも自分と同じ班の三人の方には本当に助けて...
自分が参加できない時でも非難することなく取り組んでくれた...
の大切さを学んだ気がします。自分はプログラミングを学ぶ学科
なのでこの講義を通して学んだことを~
これからの授業に生かして行ければいいなと感じました。
ページ名: