[[ロボティクス入門ゼミ]]

[[2006a/C5/課題2左]]

[[2006a/C5/課題2左/本体編]]
*プログラム編 [#tc6bc860]
ライントレースレースとタッチセンサーのプログラム
 制作者:水

 #define  go_straight   OnFwd(OUT_A);OnRev(OUT_C); //真っ直ぐ進む
 #define  go_back  OnFwd(OUT_C);OnRev(OUT_A);Wait(100) //後退
 #define  turn_1   OnFwd(OUT_A+OUT_C); Wait(100); //右旋回
 #define  turn_2   OnRev(OUT_A+OUT_C); Wait(100); //左旋回
 #define  turn_3   OnFwd(OUT_A+OUT_C); //ライントレース用のパーツ
 #define  turn_4   OnRev(OUT_C+OUT_A); //ライントレース用のパーツ
 #define  off   Off(OUT_A+OUT_C);Wait(1);
 task main()
 {
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_2,SENSOR_LIGHT); 
 SetSensor(SENSOR_3,SENSOR_TOUCH); //センサ−1、3はタッチセンサー、2は光センサー 
 go_straight; //基本は直進
 
 while(true)
  {
 if (SENSOR_2<40)   {
 turn_4
 Off(OUT_A);
 }        //光センサーが黒線の上にあるとき、機体を左に曲げる
 else   {
 if(SENSOR_2>40)    {
 Off(OUT_C);
 turn_3
 }        //白色で紙から光がセンサーに反射してくるとき、機体を右に曲げる
     }
 if((SENSOR_1==1)&&(SENSOR_3==1)) //タッチセンサーが両方とも反応したとき
 {
 off;
 go_back; //はじめに後退
 turn_1; //次に右へ方向転回
 go_straight
 Wait(100); //少し前進
 turn_2; //さらに左旋回し、機体の方向を元に戻す
 go_straight
 Wait(100); //少し前進
 turn_2; //元の線に戻るため左旋回
 go_straight;
 Wait(100); //少し前進
 turn_1; //元の位置(予想)に戻る
 go_straight
 }
 }
 }

*プログラムの課題 [#b76bf2f1]
まだ完全に完成されたものとは言えず、ライントレースはするものの曲率の大きいものは曲がりきれなく、障害物をよける方でもまだ数値が完全に調整されていなく、調整が必要。問題は元の線に戻ることが予想の位置でプログラムされているため、もとの線に戻らない可能性が大きいということ。そのため、さらに良い方法を考えることが必要。

*もう一つのプログラム [#z7e889d5]
ぶつかったら反転するプログラム
 制作者:ぼくつね

 #define  go_straight   OnFwd(OUT_A);OnRev(OUT_C);//go straight
 #define  go_back  OnFwd(OUT_C);OnRev(OUT_A);Wait(100)//go back
 #define  turn_1   OnFwd(OUT_A+OUT_C); Wait(100);//turn right
 #define  turn_2   OnRev(OUT_A+OUT_C); Wait(100);//turn left
 #define  turn_3   OnFwd(OUT_A+OUT_C);//a Instruction for line trace
 #define  turn_4   OnRev(OUT_C+OUT_A);//a Instruction for line trace
 #define  off   Off(OUT_A+OUT_C);Wait(1);
 task main()
 {
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetSensor(SENSOR_2,SENSOR_LIGHT); 
 SetSensor(SENSOR_3,SENSOR_TOUCH);//this decler that sensor1,2 is touch    senser and sensor2 is light sensor
 go_straight;//go_strait is basic main program
  
 while(true)
  {
 if (SENSOR_2<40)   {
 turn_4
 Off(OUT_A);
 }//when right semnsors are above the black line,macine turn right
 else   {
 if(SENSOR_2>40)    {
 Off(OUT_C);
 turn_3
 }//
     }
          
    
    
 if((SENSOR_1==1)||(SENSOR_3==1)) //
 {
 off;
 go_back;//
     
 turn_3
 Wait(100);
     
 go_straight
    
      
       
 }
 }
 }

**課題点 [#l1439c3d]

このプログラムで反転するときは回転する時間によって反転させているので、もしも相手とぶつかった場所が直線ではなく、急カーブだったら反転して元に戻ってくれないため、この先プログラムを調整することがあったらそこを改善したい。

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