[[2017a/Member]]
*課題について [#g2d8427a]
課題3はコース上にあるカンをGOALの領域に積み上げるというものである。
#ref(2017a/Member/takato/Mission3/2017robotcontest.png,100%,結果)
図のピンクの丸にカンが置かれており、それをGOALまで運んで積んでいく。
詳しくは課題3を参照してください。
*方針 [#p4a09ae8]
僕たちの班はカンを積む側とカンを集めてGOALまで運ぶ側の2体に分けてやることにした。
**積む側 [#a6cb9c0a]
��-積む側は最初にロータリーからスタートして、T地点のカンを掴んで待機しておく。
��-bluetoothの信号が来たら、カンを積む。
��-積まれたカンの一番下を掴んで持ち上げて待機
以下�◆↓�を繰り返し。
**集める側 [#z9435c57]
��-カンを集めてGOAL地点に届ける。
��-積む側に信号を送る。
以下� ↓△魴�り返し。
*ロボットについて [#r7e4b31b]
私たちは缶を運ぶロボットと、缶を積み上げるロボットを製作しました。
**缶を運ぶロボット [#s2bc434b]
#ref(2017a/Member/takato/Mission3/レポート用_10.jpg,50%,結果)
ライントレースして缶を集めるため前方に光センサーを取り付けた。工夫としては缶が倒れなくするように、左右のアームの高さを高くした。
**缶を積み上げるロボット [#r8b93da7]
#ref(2017a/Member/takato/Mission3/レポート用_1.jpg,20%,結果)
モーターを三つ使いました。一つ目は、タイヤにつけて上下にしか動けないもののこれで持ち上げた缶の場所からそれを置く場所までを動くことを可能にしました。
二つ目はアームを上下に動かすためのもので平行四辺形の形の角の部分にモーターを取り付けた。だが、モーターの力だけではアームがあがらなかったのでギアをつけてモーターの力をあげる工夫をしました。
三つ目はアームを締め付けるためのモーターです。缶をできるだけ下から持てるようにアームの最下点を下げる工夫をしました。そして缶をつかんだままアームが上がるようにプログラミングではずっとモーターが回りつずけるよう工夫しました。
*プログラミングについて [#k83c21fe]
缶を運ぶロボットはmattuを参照してください。
缶を積むロボット
**変数宣言 [#r8cfd443]
//A・・・足回り B・・・アーム上下 C・・・アーム
#define CONN 0
#define INBOX MAILBOX3
#define ang_up 340 //持ち上げ用角度
#define ang_put 80 //カン置く角度
#define ANGLE 50 //掴む用角度
#define POWER 30 //正転
#define POWER_LEGS 40 //足回り用
#define POWER_RE -30 //逆転
一番上にどの動作にどのモータを割り当てるかを書いています。
コメント文で説明できていると思うので説明は省略する。
**サブルーチンについて [#odf5cf7d]
sub go_f(int l){ //指定距離前進
float Ang=l*2.0463; //回転角度計算
RotateMotor(OUT_A,POWER_LEGS,Ang); //前進
Off(OUT_A);
}
これについては課題1を参照してください。
sub hold(){ //カンを掴む
go_f(100); //前進してカンの位置を合わせる
RotateMotor(OUT_C,POWER_RE,ANGLE); //カン掴む
}
sub stack(){ //カンを積む
go_f(170); //前進してカンの位置を合わせる
go_f(-10); //カンから離れて位置調整
RotateMotor(OUT_B,POWER_RE,ang_put); //カンを置く(積む)
}
これらはコメント文で説明できていると思うので省略
sub down_arm(){ //アームを下げる
OnFwd(OUT_B,POWER_RE);
Wait(1100);
Off(OUT_B);
}
アームを下げる関数。
アームを下に1100ミリ秒下げる。ここは角度よりも時間で制御したほうが確実に下がるため、時間で
制御している。
*メインタスク [#x31005ed]
task main(){
int msg=0;
until(BluetoothStatus(CONN)==NO_ERR); //bluetoothが確立す
るまで待機
go_f(-50); //アームを下げるた
めの位置調整
down_arm(); //アームを下げてカ
ンを掴む準備
while(1){
hold(); //カン掴む
OnFwd(OUT_C,POWER_RE); //保持し続ける
RotateMotor(OUT_B,50,ang_up); //持ち上げる
go_f(-150); //位置調整
ReceiveRemoteNumber(MAILBOX3,true,msg); //集める側からの信
号が来るまで待機
while(msg!=2){
ReceiveRemoteNumber(MAILBOX3,true,msg);
Wait(10);
}
stack(); //2の信号が来たら
積む
Off(OUT_C); //カンを保持する力
を抜く
RotateMotor(OUT_C,POWER,ANGLE); //カン離す
go_f(-100); //位置調整
down_arm(); //アームを下げて次
の準備
}
}
*結果 [#daf99cee]
最後まで粘ったが結局缶を積み上げるロボットのプログラミングが完成せず本番になってしまい、本番は缶を集めるだけのロボットだけとなり、6点となりました。
*反省.感想 [#h228fd69]
自分も含めて4人全員がバイトやサークル活動で時間が全然合わなかったのが本番までに間に合わなかった原因の一つと考えていますが、一番の原因はどういったロボットにするかという全体の概要が本番の三日前まで変わり続けていた事だと思います。
そしてこのゼミを通して不備のないロボットを作る難しさや、自分の思ったとおりのプログラミングで毎回動いてくれないということを学びました。
私は機械システム工学科なのでこれからもロボットに携わることも多々あると思うのでこのゼミで得た経験を元にさらに機械のプロに近づいて行きたいと思います。