2006b/A1/ROBOTICS

課題 字を書くロボット

メンバー

ウメ

田中

ロボットと作品

2つのギアでキャタピラを動かし、残り1つのギアでペンを動かします。ゴムを使い2本の棒を回転させ、アームを動かします。

robo 006.jpgrobo 001.jpg

苦労した点

  1. ペンをどう上げ下げさせるか。
    • モーターとギアをうまくつなぎ合わせることができなかった.
  2. アームが安定しない
    • 動かす度にグラグラと揺れていた。
  3. ペンを下ろすスピード速すぎかも。
  4. モーターを回すとペンが勝手に戻る・・・
  5. 旋回後のペンの位置
    • キャタピラは旋回すると旋回前より前の方向にペンの先がいってしまうので、旋回後にバックするなどして微調整するのに時間と労力くを費やした。
  6. 時間がない
    • 空きコマは常にロボと格闘していたような気がする

解決策、工夫した点

  1. 苦労した点1を解決するために
    • 相方のひらめきによって完成。結局ゴムを使ってアームの2点を動かすようにした。robo 003.jpg
  2. 苦労した点2を解決するために
    • 3つ、穴付きのブロックで固定し、安定性が保てるようにした。robo 008.jpg
  3. 苦労した点3を解決するために
    • スピードはかえれないので、モーターの動きをかなり短くしてみた。
  4. 苦労した点4・5を解決するために
    • 大きさの違うローラーを使っていたため、ゴムの伸び縮みで元に戻ってしまう事に気づき同じ大きさのローラーを使うことで解決。
robo 002.jpg
  • 回りすぎてしまわないようにストッパーをつけたrobo 007.jpg
  1. 苦労した点5を解決するために
    • 旋回の前後に余分に動くことにしてみた。

考察

  • ロボットを作る時間とプログラムを作る時間の両方が必要なため、完成までにかなりの時間が必要だということがわかった。
  • ロボットの動きにいろいろ微調整を加えたら動きが複雑になり、プログラムもわかりにくくなってしまった。
    • なので、できるだけシンプルなプログラムを作るようにしないとかえって時間だかかってしまうし、プログラミングのミスを発見するのも遅くなってしまう。
    • 微調整が少なくても思い通りに動いてくれるよう、ロボット作成時にもっと工夫をこらすべき。
  • キャタピラに限ったことではないが、旋回時の床の硬さやすべり安さによって旋回の角度が変わってしまうため、できるだけ本番に近い状態で練習する必要があった。
  • 最初のプログラムは複雑だったので、ほんの少しシンプルにしてから貼り付けさせてもらいました。

中プログラム

#define MOVE_TURN 165     //90度旋回時間
#define TURN_BACK 130     //旋回後微調整時間
#define AMARI 80          //旋回前微調整時間
#define TATE 60      //縦への移動時間
#define YOKO 100     //横への移動時間
 
sub turn_right()
{
OnFwd(OUT_C);
        OnRev(OUT_A);         Wait(MOVE_TURN);      
        Rev(OUT_A+OUT_C);   Wait(TURN_BACK);
      Off(OUT_A+OUT_C);
}     //右への90度旋回
      
      
task main()
{	 

OnFwd(OUT_B);   Wait(20);
Off(OUT_B);
     OnRev(OUT_A+OUT_C);   Wait(TATE);
     Off(OUT_A+OUT_C);
OnRev(OUT_B);   Wait(7);
Off(OUT_B);          //ここで一画目が終了
      OnFwd(OUT_A+OUT_C);   Wait(TATE);
      Fwd(OUT_A+OUT_C);   Wait(AMARI);
        
      turn_right();  
    
OnFwd(OUT_B);   Wait(20);    //ここから二画目:横
Off(OUT_B);
      OnFwd(OUT_A+OUT_C);   Wait(YOKO);
      Off(OUT_A+OUT_C);
OnRev(OUT_B);   Wait(7);
Off(OUT_B);
        OnFwd(OUT_A+OUT_C);   Wait(AMARI);
      Off(OUT_A+OUT_C);       

       turn_right();     //右へ90度旋回
       
OnFwd(OUT_B);   Wait(20);
Off(OUT_B);

      OnFwd(OUT_A+
OnFwd(OUT_B);   Wait(20);     //二画目:縦
Off(OUT_B);OUT_C);   Wait(TATE);
      Off(OUT_A+OUT_C);
OnRev(OUT_B);   Wait(10);
Off(OUT_C);
      OnFwd(OUT_A+OUT_C);   Wait(AMARI);
      
        turn_right();       //右へ90度旋回

      OnFwd(OUT_A+OUT_C);   Wait(YOKO); 
      Off(OUT_A+OUT_C);
    
     OnRev(OUT_A+OUT_C);    Wait(YOKO);//三画目
     Off(OUT_A+OUT_C);
OnRev(OUT_B);   Wait(10);
Off(OUT_B);
      OnFwd(OUT_A+OUT_C);   Wait(AMARI);
          Fwd(OUT_A+OUT_C);    Wait(34);
 
       turn_right();     //右へ90度旋回
       
      OnFwd(OUT_A+OUT_C);   Wait(100);
      Off(OUT_A+OUT_C);
OnFwd(OUT_B);   Wait(20);
Off(OUT_B);
       OnRev(OUT_A+OUT_C);   Wait(200);//四画目
       Off(OUT_A+OUT_C);             //停止
}       

由プログラム

#define HUDE_TIME 10//筆上げ下げの時間
#define MOVE1_TIME 150//一画書く時間(3画目を除く)
#define TURN1_TIME 177//90度旋回時間
sub hdown(){OnFwd(OUT_B); Wait(HUDE_TIME); Off(OUT_B);}//筆を下ろす動作
sub hup(){OnRev(OUT_B); Wait(HUDE_TIME); Off(OUT_B);}//筆を上げる動作
sub turn right(){Fwd(OUT_A); Wait(TURN1_TIME); 
Rev(OUT_A); Wait(BACK2_TIME); Off(OUT_A+OUT_C);}//右90度旋回
task main() {
hdown();
OnFwd(OUT_A+OUT_C); Wait(MOVE1_TIME);//1画目
hup();
Rev(OUT_A+OUT_C); Wait(38);
turn right();//2画目始点までの移動
hdown();
OnFwd(OUT_A+OUT_C); Wait(MOVE1_TIME); Off(OUT_A+OUT_C);//2画目前半
hup();
OnFwd(OUT_A+OUT_C); Wait(84);
turn right();//2画目後半始点までの移動
hdown();
OnFwd(OUT_A+OUT_C); Wait(MOVE1_TIME);
hup()//2画目後半
Rev(OUT_A+OUT_C); Wait(MOVE1_TIME); Fwd(OUT_A); Wait (TURN1_TIME);
Rev(OUT_A); Wait(50); Fwd(OUT_A); Wait(200); Off(OUT_A+OUT_C);
hup();//ずれ落ちてきた筆を補正
OnRev(OUT_A+OUT_C); Wait(150); Off(OUT_A+OUT_C);//3画目始点までの移動
hdown();
OnRev(OUT_A+OUT_C); Wait(230); Off(OUT_A+OUT_C);
hup();//3画目
OnFwd(OUT_A+OUT_C); Wait(220);
Rev(OUT_C); Wait(TURN1_TIME);
Rev(OUT_A); Wait(33);
Off(OUT_A+OUT_C);//4画目始点までの移動
hdown();
OnRev(OUT_A+OUT_C); Wait(MOVE1_TIME);
hup();//4画目
OnFwd(OUT_A+OUT_C); Wait(300);
Rev(OUT_C); Wait(185);
Fwd(OUT_C); Wait(50);
Rev(OUT_C); Wait(185);
Off(OUT_A+OUT_C);//5画目始点までの移動
hdown();
OnFwd(OUT_A+OUT_C); Wait(MOVE1_TIME);
Off(OUT_A+OUT_C);
hup();//完成 }

皆さんからのコメント・アドバイス

  • モーター〜アーム部分はよく工夫していますね。強度面で改良の余地がありそうですが。 -- ゆき(TA)? 2006-11-24 (金) 12:40:36
  • プログラムを貼付ける際、タブや空白がどう表示されるかに注意すると、もっと見やすくなると思いますよ。 -- ゆき(TA)? 2006-11-24 (金) 12:42:12
  • 最初は少し時間がかかっても、なるべく修正や調整がしやすい分かりやすいプログラムを書くように努力しましょう。 -- 松本(教員)? 2006-12-01 (金) 08:51:12


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-02-09 (金) 18:15:08