目次
#contents
*課題3 [#baf7da67]
-空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる
-図のピンク色の場所に350mlの空き缶を置く
-図のライトブルーの円のいずれか一箇所に中身の入った350mlの缶を置く
**コース [#n82ef327]
#ref(./2017a-mission3.png,75%,コース)
*ロボットの説明 [#if0afa39]
**ロボット全体 [#v0c313ef]
#ref(./hanntai.jpg,75%,全体)
本体を2台使うということで僕たちは前後に繋げました。前の本体は車輪を前後させ、後方の本体は腕の部分を開閉させたり缶を持ち上げるためのプログラムを組みます。
**前方アーム部 [#kc2ac520]
#ref(./tennkai.jpg,75%,腕)
アームは少し長めにしました。
#ref(./syamae.jpg,75%,車輪)
また、中には缶を上に持ち上げるための装置を用意してあります。
アームでは缶を二本同時につかみ押し込むことで機体側の缶を持ち上げながら外側を手前に引き寄せ持ち上げた缶の下に滑り込ませるものでした。
#ref(./ude.jpg,75%,展開)
これがアーム部の全体です。
**後方 [#p267f855]
後方はほぼ本体だけです。
メッセージを送れるように送受信部を向かいあわせてます。
#ref(./zenntai.jpg,75%,全体2)
後輪はギアが着いていないので滑りやすいようにキャスターです。
#ref(./usiro1.jpg,75%,後ろ)
*プログラム [#xaaefb95]
前の本体をメインで後ろの本体をサブで活用しました。
そのため缶を捕まえたり缶を持ち上げたいときに、前から後ろにメッセージを飛ばすようにしています。
**後方本体(アーム部) [#j6da4dc1]
#define SIGNALON 11
#define SIGNALOFF 12
#define SIGNALUP 21
#define SIGNALDOWN 22
#define SIGNALOPEN 31
#define SIGNALCLOSE 32
ここではメッセージの番号を定義付けしています。
task main()
{
ClearMessage();
while(true){
until (Message()==SIGNALON);
OnRev(OUT_C);
OnFwd(OUT_A);
until(Message()==SIGNALOFF);
Off(OUT_AC);
SIGNALONはアームを閉めながら缶を持ち上げ、SIGNALOFFは停止をプログラムしています。
until (Message()==SIGNALUP);
OnRev(OUT_C);
until(Message()==SIGNALDOWN);
Off(OUT_C);
SIGNALUPはアームを閉め、DOWNは停止のプログラムです。
until (Message()==SIGNALOPEN);
OnFwd(OUT_C);
until(Message()==SIGNALCLOSE);
Off(OUT_C);
SIGAALOPENはアームを開け、SIGNALCLOSEは停止を表しています。
}
}
停止のプログラムを逆の意味を表す単語を使用しています。
また、最初と少し変更したのもあり名前はかなりおかしな部分がありますが、プログラムには問題がなかったのでそのままにしました。
**前方本体(動き) [#q5d580a0]
#define SIGNALON 11
#define SIGNALOFF 12
#define SIGNALUP 21
#define SIGNALDOWN 22
#define SIGNALOPEN 31
#define SIGNALCLOSE 32
後ろに送るメッセージの番号を定義付けしました。
task main()
{
OnFwd(OUT_AC);
Wait(321);
Off(OUT_AC);
OnRev(OUT_A);
OnFwd(OUT_C);
Wait(30);
Off(OUT_AC);
OnFwd(OUT_AC);
Wait(150);
Off(OUT_AC);
最初の缶に向かって角度をつけながらむかいます。
SendMessage(SIGNALON);
Wait(200);
SendMessage(SIGNALOFF);
SendMessage(SIGNALOPEN);
OnFwd(OUT_AC);
Wait(10);
SendMessage(SIGNALCLOSE);
SendMessage(SIGNALUP);
Wait(50);
SendMessage(SIGNALDOWN);
アームが長いこともあって二つの缶を同時に捕まえ持ち上げます。
ロボットでは一瞬アームを緩め前に進むことできれいに重ねることができました。
OnFwd(OUT_AC);
Wait(90);
Off(OUT_AC);
OnFwd(OUT_C);
OnRev(OUT_A);
SendMessage(SIGNALOPEN);
Wait(60);
SendMessage(SIGNALCLOSE);
Off(OUT_AC);
OnRev(OUT_AC);
Wait(30);
Off(OUT_AC);
ここではゴールまで運んだうえで缶を離し離れるプログラムです。
}
#ref(./Inked2017a-mission3_LI.jpg,50%,ポイント)
狙った缶は二本だけとなりました。
**まとめ [#m7889c61]
プログラムは簡単にあらかじめ決められた動きをするようにし、メッセージを使って二台の本体を動かすようにしましたが、本番では上に上げるという機能が作動しなくて残念でした。
*感想 [#qc237425]
取れる時間が少なかったのでクオリティの低いものとなったりルール的に見逃しているところもあったりと残念な部分もあったりしました。せっかく組んだプログラムも当日には動かなかったりと残念でした。もっと時間をかけてつくればよかったなと思いました。