ロボットの紹介

私たちのロボットは、できるだけコンパクトなものになるように工夫しました。 例えば、車体の前にある空き缶をつかむ部分です。空き缶をつかむアームの部分は、どうしても長くなるのでそこの下にできるスペースでタッチセンサーと光センサーを近くにつけました。しかし、こうすることでタッチセンサーの反応が悪く効率が良くないのでタイマーを使うことによってより正確になりました。 光センサーが斜めに付いているので、しきい値の設定が他とは違って工夫できたかと思います。一つのモーターで2つのアームを動かすのでアームの噛み合い具合にとても気を使いました。アームに付いた歯車は空回りできるようにしてモーターの故障を防ぎました。

1373524663100.jpg
1373524685053.jpg
1373524701220.jpg

コース攻略

robotics-2013a-mission1.jpg

プログラム説明

#define  THRESHOLD  35
#define  HIPOWER  7
#define  LOWPOWER  1
#define  set_power_H  SetPower(OUT_AC,HIPOWER);
#define  set_power_L  SetPower(OUT_AC,LOWPOWER);
#define  go_forward1  set_power_H;OnFwd(OUT_AC);
#define  go_forward2  set_power_L;OnFwd(OUT_AC); 
#define  turn_left1  set_power_L;\
  OnFwd(OUT_C);OnRev(OUT_A);  //左旋回
#define turn_left0  set_power_L;\
  OnFwd(OUT_C);Off(OUT_A);  //左回り
#define turn_right0  set_power_L;\
  OnFwd(OUT_A);Off(OUT_C);  //右回り
#define turn_right1   set_power_L;\
  OnFwd(OUT_A);OnRev(OUT_C);  //右旋回
#define moter set_power_L;OnFwd(OUT_B)
#define STEP  1
#define nMAX  3
#define short_break  Off(OUT_AC);Wait(10);
#define CROSS_TIME  30
#define cross_line  go_forward1;\
  Wait(CROSS_TIME);short_break
#define time0  500
#define time1  1500
#define time2  1900
#define time3  2700
#define time4  2900
#define time5  4000
#define time6  4300
#define time7  5000
     task main()
{
       SetSensor(SENSOR_2,SENSOR_LIGHT);
          ClearTimer(0);
        go_forward1;Wait(35);
        turn_left1;Wait(100);

        while(FastTimer(0) <= time0) {
          line_trace1();
 }
        OnFwd(OUT_B);Wait(50);Off(OUT_B);
        while(FastTimer(0) <= time1) {
          line_trace1();        
 }
        while(FastTimer(0) <= time2) {
          line_cross();
 }
        while(FastTimer(0) <= time3) {
          line_trace2();
 }
       
        while(FastTimer(0) <= time5) {
          line_trace2();
 }
        while(FastTimer(0) <= time6) {
          line_cross();
 }
        while(FastTimer(0) <= time7) {
          line_trace2();
 }
          turn_right1;Wait(100);  //缶を放す動作
            go_forward1;Wait(100);
            turn_left1;Wait(200);
            OnRev(OUT_B);Wait(50);Off(OUT_B);
            OnRev(OUT_AC);Wait(100);
           while(true){
            line_trace2();
    }
}

まとめ

プログラムするときに急カーブがとても苦労しました。特に右回りは、黒ラインの外に出ると逆にターンしてしまい修正が大変でした。ロボットは、自分が想像していたよりもかなり思い通りに動かなくなることが多くありました。そして、プログラムを作るときはしっかりと明白なものにすることが大切だと感じました。 プログラムの管理を時間制にするかセンサーにするかで大きく違ったプログラムができることも分かりました。 空き缶を置くところでは、ロボットが旋回するときに空き缶が倒れてしまってうまくいかなかったので残念でした。 この課題の大切なところは、ロボットを動かして動かしながらプログラムを改善していくことだと思いました。


添付ファイル: filerobotics-2013a-mission1.jpg 289件 [詳細] file1373524701220.jpg 250件 [詳細] file1373524685053.jpg 358件 [詳細] file1373524663100.jpg 249件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-17 (土) 20:03:45