[[2008b]]


*ロボコン:空き缶運搬ロボット [#t59aec34]

フィールドに置いてある空き缶を所定の位置に持ち帰るロボットを作成する。


**目次 [#we2f832a]
#contents


**概要 [#qb1a332d]
-フィールド
#ref(field.png)
 
--フィールドは約160cm×110cm 
--空き缶が積み上げられている場所を中心に半径10cm,20cm,30cmの円が黒い線で描かれている 
--黒い線の太さは約25mm


-ルール説明&br;
基本ルール 
--4段に積まれた空き缶を運びだし、ゴールに入れる。 
--競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。 
--2隅のコーナー(30cm四方)からスタートする。 
--スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 
--開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 
--競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 
--途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。

  基本得点の計算方法 
--緑の空き缶を1個ゴールに運べば4点。 
--黒い空き缶(最上の空き缶)を運べば8点 
--空き缶を場外に出してしまった場合は一個につきマイナス1点。 
--半分以上ゴールに入った空き缶だけを得点の対象とする。ただし空き缶がゴールからはみ出している場合は、マイナス1点

  技術点の計算方法 
--以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム+TAor教員)が20点満点で採点し、その平均点を求める。得点の目安: 
--空き缶までたどり着く動作 (3点) 
--空き缶を運ぶ動作 (転がす・掴むなど) (4点) 
--空き缶をゴールに入れる動作 (2点) 
--2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(3点) 
--自立型のロボットとしての形や動作の美しさ、斬新さ(3点) 
--その他 (5点)

**計画 [#t382c320]
-走行手順&br;
#ref(field_plan.png,around)
.薀ぅ鵑泙念榮&br;
▲薀ぅ鵐肇譟璽垢鰺用してフィールドの奥へ移動。&br;
J漂櫃砲謄織奪船札鵐機爾把篁漾J匹鯏舛辰同へ。&br;
ぅ織奪船札鵐機爾把篁漾4未縫◆璽爐鮓けて近づく。&br;
ゴ未泙任了間を設定して停止し、捕獲。&br;
障害物の間を通り、ラインまで移動(時間で移動距離設定)&br;
Д薀ぅ鵐肇譟璽垢婆瓩辰討る&br;
┘織奪船札鵐機爾把篁漾4未鮖つ側をゴールに向けて移動。&br;
ゴールに缶を入れる(予めアームの開閉時間を設定しておく。)&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
&br;
という手順で移動する。&br;
&br;
&br;
-捕獲方法&br;
4つの空き缶が積んだ状態でおいてあるので、そのまま一気にすべての缶を持ち帰る方法をとった。

**ロボット作成の手順 [#o6ba1252]
-基礎部分&br;
今回のロボコンでは背の高いものを安定な状態で運ぶ必要があったので、付属の説明書に記載されていた高さのあるアクロボットをベースに用いた。
#ref(base_pic.jpg)&br;
&br;
また、センサーの数の問題でNQCが二つ必要である。前部タイヤと本体の間に丁度よい空間があったため、そこにもう一つのNQCを設置した。
#ref(qnc_in.jpg,around)
#ref(qnc_out.jpg)
&br;
&br;
&br;
&br;
&br;


-センサー
--タッチセンサー&br;
壁や障害物とうまく接触できるように高さを調整した。
#ref(touch_sensor.jpg)
&br;

--光センサー&br;
ライントレースの際の動きがぶれないように黒線の幅を考慮して設置した。
#ref(light_sensor.jpg)
&br;
-アーム&br;
缶を捕獲するアームと、ゴール前で缶をゴールに押し出すためのアームを作成した。&br;
--捕獲用アーム&br;
捕獲の際、モーターを回し続ければよりしっかりと缶を確保できるが、モーターの基部に負荷がかかってしまう。それを解消するため、一定以上の力が加わった時は空回りするギアを使用した。
#ref(arm_motor.jpg,around)
#ref(front.jpg,around)
#ref(arm_back.jpg)
&br;
&br;
--押し出し用アーム&br;
一番下の缶が特に倒れにくいため、一段目と二段目の間を押すように長さを調整した。これによって一番下の缶が傾くので、上から落ちる缶に押されてゴールに入りやすくなる。&br;
#ref(push_motor.jpg,around)
#ref(body_side.jpg)
&br;
&br;

-完成&br;
※右側の写真は後部のNQCを外した状態のもの。
#ref(arm_front.jpg,around)
#ref(side.jpg)

**プログラム [#te4eb8fd]
ロボット本体に時間をかけてしまったので、できる限りプログラムを簡略化し、時間設定で二つのNQCが動作するようにした。

前部NQC(捕獲アーム担当)

 task main(){
 #define close(t) OnFwd(OUT_A); Wait(t); Off(OUT_A);
 #define open OnRev(OUT_A); Wait(80); Off(OUT_A);
 #define push OnFwd(OUT_C); Wait(30); Off(OUT_C);
 
 //上から順にアームを閉じる、アームを開く、缶を押し出す。
 
 Wait(2200);          //缶の前まで移動するのを待つ。
 
 close(3500);          //イ瞭虻遏覆修慮紊琉榮庵罎眥呂濛海韻襦)
 
 
 //本体移動中
 
 
 open;          //缶を離す。
 
 push;          //缶を押し出す。の動作
 
 }


後部NQC(駆動担当)

 #define back(t) OnRev(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C);
 #define right(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_A+OUT_C); 
 #define left(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_A+OUT_C);
 #define straight(t) OnFwd(OUT_A+OUT_C); Wait(t); Off(OUT_A+OUT_C);
 
 //上から順に前進、右折、左折、後退。
 
 task main(){
 SetSensor(SENSOR_2,SENSOR_TOUCH);
 SetSensor(SENSOR_1,SENSOR_LIGHT);
 SetSensor(SENSOR_3,SENSOR_LIGHT);
 
 
 straight(100);
 
 
 while((SENSOR_1>=40)&&(SENSOR_3>=40)){
 straight(10);
 }          //ここまで,瞭虻
 
 straight(10);
 right(55);          //黒線に乗る
 
 
 while(SENSOR_2 != 1){
   if((SENSOR_1 > 40)&&(SENSOR_3 < 40)){
     right(20);
   }
   if((SENSOR_1 < 40)&&(SENSOR_3 > 40)){
     left(20);
   }
   else{
     OnFwd(OUT_A+OUT_C);
   }
 }          //ここまで△瞭虻
 
 
 back(20);
 
 left(55);          //壁と平行の向きにする
 
 
 while(SENSOR_2 != 1){
   straight(10);
 }          //の動作
 
 
 OnRev(OUT_C);
 Wait(20);
 Off(OUT_C);          //缶の方に向きを変える
 
 back(150);          //い瞭虻
 
 
 Wait(500);          //アーム担当のNQCの動き(イ瞭虻)を待つ
 
 right(10);
 
 back(150);
 
 while((SENSOR_1>=40)&&(SENSOR_3>=40)){
   if((SENSOR_1 > 40)&&(SENSOR_3 < 40)){
     right(20);
   }
   if((SENSOR_1 < 40)&&(SENSOR_3 > 40)){
     left(20);
   }
   else{
     OnRev(OUT_A+OUT_C);
   }
 }          //Δ瞭虻
 
 left(55);          //黒線に乗る
 
 while(SENSOR_2 != 1){
   if((SENSOR_1 > 40)&&(SENSOR_3 < 40)){
     right(20);
   }
   if((SENSOR_1 < 40)&&(SENSOR_3 > 40)){
     left(20);
   }
   else{
     OnFwd(OUT_A+OUT_C);
   }
 }          //Г瞭虻
 
 right(55);          //缶の方にアームを向ける
 
 back(80);          //┐瞭虻
 
 
 //こちらのNQCの動作は終了。後はアーム担当のNQCがアームを開き、缶を押し出すのを待つ。
 }
 



**実行結果 [#u4c4218b]

本番一回目、フィールド奥でタイヤが壁と接触してしまって缶まで辿りつけなかった。二回目でも同じことが起こってしまったため、缶の得点は0点になってしまった。技術点も伸びず、残念な結果になってしまった。&br;
&br;
角で曲がる角度を調整して臨んだ泣きの一回では、何とか缶に辿りつけはしたもののその後の障害物に接触してしまい、ゴールまで辿りつけなかった。&br;
&br;
-後に改良すべきと感じた点
--タッチセンサーを利用したアームの開閉
--NQC同士の通信ができるようにNQCを設置し直す。
--タイヤに壁との接触を防ぐガードを設置&br;
--タイヤをもう1サイズ小さなものにする。
・・・・等。
&br;

-最終的な点数&br;
--基本点:0点&br;
--技術点(平均):8.2点&br;
--順位:7位


**反省&感想 [#s2b53a30]
-べっとー&br;
時間の設定のみで二つのNQCを同時に動かすことの難しさを知れたし、缶を運んでくるだけの単純な動作をさせることがいかに大変かがよくわかった。ロボコン自体は失敗してしまったが、楽しくロボットを作れたので良かったと思う。&br;

-タカシ&br;
何から何まで任せきりになってしまい、他のメンバーには本当に迷惑をかけてしまった。また当日は係の仕事の影響もあり、チームでの作業にほとんど参加できなかったのが残念だった。この授業を通して、改めて皆で作業することの大切さを学べたと思う。


-カズヤ&br;
アイデアを少し出しただけでプログラムを組む時などはあまり役に立てなかったのが悔しかった。しかし、みんなで協力して作業できたことはとても楽しかった。

-S介&br;
僕はロボット本体のアイデアをいろいろ考え、問題の改良をするといったハード面でのチームへの貢献はそれなりにできていたと思う。ただウェブページやそれを動かすプログラムについては途中からちんぷんかんぷんでほとんど任せきりだった。それについては仲間にお詫びと感謝をしたいと思う。

**コメント欄 [#i0768424]

コメントをお願いします。
- レポートは詳しくてよいと思います。難しいでしょうが、ロボットを小型化できれば缶までたどり着きやすかったかもしれません。 -- [[FI]] &new{2009-02-14 (土) 03:05:06};
- ロボの幅がもう少し狭ければ・・・と思います。 -- [[なかむら]] &new{2009-02-16 (月) 06:24:13};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS