[[2012b/Member]]

*目次[#zdeb50a2]
#contents
*メンバー [#x932bf94]
-HISASI:工学部機械システム工学科。レゴの経験はあるが、プログラミングに関してはズブの素人。
-HIBINO:繊維学部機械ロボットなんちゃら学科。ダメダメの相方を支え、疲労の色を隠せない常識人。

*課題内容 [#b84d0f49]
ボールを運びつつ、ライントレースをするロボットを作る。

**ルール [#hbcdc2d2]
-トレースするコースは次の通り。一人目はコース右端のコの字の中からスタートし、コの字の外に置かれたピンポン玉を掴み、左端のコの字の中まで運ぶ。相方はその逆を行う。
#ref(2012b/Member/HISASI/Mission1/課題のコース.jpg,100%,このコースを走ります。)

**この競技のポイント [#jc488942]
-コース中2箇所に設けられたダミーの交差点を突破すること。
-急カーブのトレースの際もラインを見失わないこと。
-ボールを確実に掴むこと。



*ロボット [#b1bf2015]

**全体像 [#kfa8c200]
#ref(2012b/Member/HISASI/Mission1/ロボット全体像.jpg,60%,全体像)

**各部 [#j62111ad]

-はじめはボールを横から保持する機構を考えたが、強度の問題と大型化してしまう問題が浮上したため、上からボールを掴む形に改良した。
#ref(2012b/Member/HISASI/Mission1/アーム部分.jpg,60%,HIBINO作)

-ライトセンサーと車輪との距離が大きいと左右に旋回する際にセンサーを左右に大きく振ってしまい、急カーブなどで正確なライントレースができないため、それらの距離を詰めるように努力した。
#ref(2012b/Member/HISASI/Mission1/ライトセンサー.jpg,60%,努力の結晶)


*プログラム [#l3b5e380]

  #define Treshold 35                 
  #define Speed_H 50    
  #define Speed_L 40  
  #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
  #define go_forward OnRL(Speed_H, Speed_H);    
  #define turn_left1 OnRL(Speed_L, -Speed_L);    
  #define turn_left0 OnRL(Speed_L, 0);       
  #define turn_right0 OnRL(0, Speed_L);       
  #define turn_right1 OnRL(-Speed_L, Speed_L);   
  #define Step 1
  #define nMAX 800                 
  #define short_break Off(OUT_BC); Wait(300);
  #define Cross_Time 300              
  #define cross_line OnRL(Speed_L,Speed_L);Wait(Cross_Time);short_break;
    
  task main ()
  {
  SetSensorLight(S2);
  int nOnline=0;
  long t0=CurrentTick();
  OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC);   
  OnFwd(OUT_A,30);Wait(780);Off(OUT_A);    
  OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC);   
  while (true){
  while (nOnline < nMAX) {
  if (SENSOR_2 < Threshold){
  turn_right1;
  nOnline++;
  }else{
  if (SENSOR_2 < Threshold-2){
  turn_right0;
  }else if (SENSOR_2 < Threshold+3){
  go_forward;      
  }else if (SENSOR_2 < Threshold+7){
  turn_left0;	 
  }else{  
  turn_left1;	     
  }
  nOnline=0;
  } 
  }
  short_break;
  turn_left1; Wait(200);
  cross_line;
  nOnline=0;
  if(CurrentTick() - t0 >= 50000){OnFwd(OUT_A,-100);Wait(600); 
  }
  }}

*問題点 [#n93bfbd9]
-ボールを掴んでからコースに乗るまでの動作が時間で制御されているため、

*改善点 [#v3c8916f]
-ボールを掴んでからコースに乗るまでの動作が時間で制御されているため、スタート位置がずれたり、電池の減り具合によってはコースに乗れず、迷子になることがある。


*感想 [#g8d4ab38]

黒い線の上を走るという一見単純そうな行動だが、それをロボットにさせるのには多大な苦労が必要だった。

また、せっかく組んだプログラムも周りの環境の違いや部品と部品の間の微妙な遊びで全く意図せぬ動きをしてしまうのが憎らしかった。

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