2016a/Member

はじめに

今回の課題は、紙コップを運ぶロボットの作成し、課題2のコースを用いて紙コップを所定の位置に

運び、運んだ紙コップを重ねるタイムレースを行いました。

ロボットを1台で行う班が多くいましたが、私たちは2台のロボットを使って課題を行いました。

ロボットの説明

スレーブ

1台(スレーブ)は、ライントレースをしてCに紙コップを取りに行き、Qまで運ぶ役目。

アームを小さくし、一回で何個も運ぶのではなく確実に一個ずつ運べるサイズにしました。

robot.png

マスター

もう1台(マスター)は、別のロボットが運んできた紙コップをQからPに運び、紙コップを持ち上げて

重ねる役目。こちらのロボットは、片方のロボットと比べてアームが非常に大きく

動いてるのを見ていると、親が初めて子供を一人で買い物に出し、その帰りを待っているかのような

気持ちにさせられました。

robot55.png

アームの動作の説明

無題.png

アームは矢印の方向に動き、オレンジで塗りつぶしたところで紙コップを掴みます。

robot66.png

上で行った動作のあと、丸で囲んだギアが動き紙コップを持ち上げます。 ここの微調整が一番大変でした。

プログラム

注意

スレーブのプログラムについては、「Ari」、「Etu」、「Tea」のページを参照してください。

float関数

float GetAngle(float d) /* dには進みたい距離が入る */
{
const float diameter=5.45;  //タイヤの直径()
const float pi=3.1415;      //円周率(π)
float ang =d/(diameter*pi)*360.0;  //角度を計算する
return ang;                 //角度を返す 
}

定義

アームを動かす定義。上が紙コップを掴むときのプログラムであり、下が掴んだ紙コップを離すプログラムである。

#define Tozire RotateMotor(OUT_A,50,800);//右旋回(モータBとCを35%のスピードで同期させず90度前転)
#define Hirake RotateMotor(OUT_A,-25,800);//左旋回(モータBとCを35%のスピードで同期させず90度後転)

90度回転させる定義。

#define Ninety GetAngle(8.25)

上がlcm前進(モータBとCを25%のスピードで同期させてlcm分前転)させるプログラムであり、下がlcm後進(モータBとCを25%のスピードで同期させてlcm分後転)させるプログラムである。

#define Turn_r RotateMotorEx(OUT_BC,35,Ninety,-100,true,false);
#define Turn_l RotateMotorEx(OUT_BC,35,Ninety,100,true,false);

lcm分回転させるプログラム。

#define Rotary(l) GetAngle(l)

上が右旋回(モータBとCを35%のスピードで同期させず90度前転)させるプログラムであり、下が左旋回(モータBとCを35%のスピードで同期させず90度後転)させるプログラムである。

#define Go_F(l) RotateMotorEx(OUT_BC,25,Rotary(l),0,true,true);
#define Go_B(l) RotateMotorEx(OUT_BC,-25,Rotary(l),0,true,true);

サブルーチン

これは、紙コップを認識し持ち合上げ、所定の位置に持っていくプログラム。

sub Papercop()

 {

SetSensorLowspeed(S1);
int n=0;//紙コップを認識した回数
while(n<1){
 if (SensorUS(S1)<=10){//紙コップとの距離が10cm以内なら
  Go_F(5);//紙コップを取りに行く
  Tozire;
  Turn_r;
  OnRev(OUT_B,50);
  Wait(100);//サークルまで直進できるよう調節
  Go_F(10);//サークルに向かう
  Hirake;
  Go_B(10);//地点に戻る
  OnRev(OUT_C,50);
  Wait(200);//P地点まで直進できるよう調節
  Turn_l;
  OnFwd(OUT_B,50);
  Wait(100);
  Off(OUT_B);//P地点まで直進できるよう調節
  Go_B(5);//スレーブが置いた紙コップにぶつからないようにするために下がる
  n++;//認識回数を増やす
  Off(OUT_BC);//待機

}else{
  OnFwd(OUT_BC,50);  
 }
}
n=0;
}
#define CONN 1
#define Boot 11

Main関数

task main()
{
Go_F(25);//R地点まで進む
Turn_r;//R地点右旋回
OnFwd(OUT_C,50);
Wait(100);
Off(OUT_C);//線に沿って進めるよう調節
Go_F(15);
OnRev(OUT_C,50);
Wait(100);
Off(OUT_C);
Turn_l;
Off(OUT_BC);
OnFwd(OUT_B,50);
Wait(100);
Off(OUT_B);
Go_B(8);
Off(OUT_BC);
int x=0;//メッセージが送られてきた回数
while(x<6){//紙コップは6個あるため6回繰り返す
 int msg;//受け取った値を格納する変数
 ReceiveRemoteNumber(MAILBOX1,true,msg)//MAILBOX1の値を受け取りmsgに格納
                                         //trueを指定するとメールボックスが空に
 if(msg == Boot){//もしメッセージが送られてきたら
 Wait(1000);//スレーブとぶつからないように待機して
 Papercop();
  x++;//メッセージが送られてきた回数を増やす
 }else{
  Off(OUT_BC);//送られてこない限りは待機
 }
}
}

結果

私たちの班は紙コップを一つも運ぶことが出来きませんでした。

一回目はスレーブ側のライントレースのトラブルで紙コップを運ぶことが出来ず、

二回目はマスター側のアームのトラブルで紙コップを運ぶことが出来ませんでした。

ロボコンの順位は全体で3位でした。

正直、ここまでいい結果が取れると思っていなかったので

嬉しかったです。でも、一つも運べなかったことが悔しすぎて

終わった直後は嬉しさを感じることが出来ませんでした。

しかし、技術点では一位、ロボコンでは三位を取れました。

考察

私たちが紙コップを運べなかった一番の理由は、全員で集まって作業をする

時間がほとんどなかったことだと思います。テスト期間ということもありますが

もう少し時間を取って合わせる時間を作れば良かったと思います。

課題3の感想・全体を通しての感想

本番では一つも運ぶことが出来ませんでしたが、リハーサルの時に二段積むことが出来た

時はものすごく嬉しかったです。あの瞬間は今まで頑張ってきて良かったと思わせてくれた

瞬間でした。やっている時は苦しくて途中で何回も諦めたいと思いましたが、最後まで

やって本当によかったです。

すべての課題を終えて、何回も言っていますが苦しいことがたくさんありました。

私たちの班は課題1の時に1人受講をやめてしまい、ずっと二人で課題をやってきました。

二人でやっている時、「もう一人いれば作業が楽になるのに」と何回も思いました。

しかし、大変でしたが二人で最後までやり切れて本当によかったです。

この講義で改めて協力することの大切さを学ぶことが出来ました。


添付ファイル: filerobot66.png 120件 [詳細] file無題.png 102件 [詳細] filerobot55.png 111件 [詳細] filerobot.png 121件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-11 (木) 16:27:27