A2R 担当者 いっせー&ぐっさん

ラインレース

ラインに沿って走行するロボットを2L班と協力しながら製作した。

コース

コース  →   コース2

↑信大のシンボル                    ↑信大のシンボル?

信州大学のシンボルマークをモチーフにした。見ての通りかなり難易度の高いコースだ。

試作コース

試作コース説明

信州の「S」と羽ばたく鳥をイメージした愛らしい信州大学のシンボルマークであるが、このコースはロボットにとって脅威でしかない。

頭の部分から羽にかけてのヘアピンカーブ、そしてなにより「教育」、「研究」、「社会貢献」を象徴するとされる3枚の羽を曲がりきることがこのコースの攻略のポイントとなる。

また、交差点への入る前後がコーナーだという点もプログラムを組む上での課題となる。なぜなら「ラインを見失ったら直進」というプログラムではこれを攻略できないからである。

いろいろプログラムを改良したが、やはり急カーブ→交差点という構造があだとなり攻略は困難を極めた。

時間の都合上、大変悔しいがコースを組み直すこととなった。

本番用コース

本番用コース説明

作り直したコース。このコースの特徴は前回の特徴を生かして雰囲気だけは前のままにしたつもりである。

やはり交差点は垂直に入れるようにすることが重要であるのでその事を考慮した上で作り直した。

しかし、首の付け根に当たる(?)部分の急カーブなど、依然として他の班と比べても難易度の高いコースとなっている。

工夫点は、コースの調節の簡易化のために黒マジックではなく、黒の粘着テープを使用した。これによりでこぼこが発生し光センサーが誤作動するトラブルが起きたが、でこぼこ除去後は狙い通りうまくいった。

残念だった点は、表の試作コースのインクが裏までにじんで汚くなってしまったことだ。 新しい模造紙を購入しようかとも悩んだが、地球環境のために元のコースの紙を再利用した。

ロボット

試作1号機  ”サソリ”

最初に製作したロボット。前回の習字ロボットからドライブベースごと組みなおして製作した。

試作ロボ

車体は前方に傾いている。光センサーは前方先端のかなり低い位置に設置。感度の向上を図った。

タッチセンサーは光センサーの上に位置、光センサーとタッチセンサー一体型のフロントバンパーとなっている。 バンパー前方の障害物を感知する他、ぶつかった時の衝撃吸収の役割を果たしている。

試作ロボ・センサー

後輪は一輪車となっており、スムーズなコーナリングを目指した。 また、後輪を高くすることで、先に記したように車体全体を大きく前に傾かせている。

試作ロボ・後ろから見た図

全体としてかなり大型のロボットとなった。大型ではあるが小回りは効く機体となっている。これは後輪の一輪車によるところが大きい。 また、大型であるため安定度はかなりのものである。

試作ロボ・上から見た図

しかし実際に走らせてみると回転するばかりで全前進せず、コースを攻略するまで至らなかった。

失敗点として、前輪の幅や車体の縦幅がひらきすぎたことや、速度が速すぎたことが挙げられる。

また光センサーの位置が、2つでラインを挟み込むには狭く、2つでライン上をなぞるには広すぎ、すぐに軌道修正に入ってしまったことも1つの要因であると考えられる。

このままではコーナーの攻略が困難と判断。また駆動部の簡易化の困難やセンサーの位置の調節ができない等不便だったことから、車体ごと組みなおすこととなった。

試作2号機  ”うま”

1号機の失敗を糧に、再度組み直したロボット。

全体的に1号機よりシンプル&コンパクトになっており、拡張性も高い。さらに1号機より若干スピードも抑えられている。

これにより同じプログラムでも急コーナーも曲がりきれるようになった。コーナリング重視の足回りである。

2号機全体図

光センサーは黒い線をトレースさせるために2つ並べて設置。バンパーは前回同様ショック吸収と障害物感知の2つの機能を併せ持たせてある。

光センサー タッチセンサー

下図は上から見た様子である。 サソリ号に比べ、だいぶコンパクトになっていることがわかる。

うま説明

工夫した所

タッチセンサー

タッチセンサー留め具 タッチセンサーと接触する部分。

クッションかつ留め具に接触する このロボのクッションとなり、またタッチセンサーへの留め具と接続する大切な部分。

光センサー

光センサー 光センサー1が黒線からはみ出ると右へ曲がり、光センサー3が黒線からはみ出ると左へ曲がる。

タッチセンサーと光センサーの接続部

前のロボにぶつかる時、タッチセンサーが浮く事があるので、強度をあげるようにした。

接続を固めるパーツ

↑これがタッチセンサーと光センサーを固めることとなるパーツ。

留め具パーツを取り付ける部分

↑左右から留め具となるパーツを取り付けている部分。

接続部の全体図

↑強度をあげることができた完成図。

プログラム

試作練習用

とりあえず黒い線上を動くように作ったプログラム。動作確認を目的にしているので交差点超えはオミットしてある。

なお、微妙にサウンドを使っていたり、使用していないタイマーが設定されているのは練習のためである。

#define THRESHOLD 40  //白と黒の境界を40に設定
#define RUN_TIME 1500  //タイマー練習用

task main ()
{

  SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサー1を光センサー(左)に設定
  SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーに設定
  SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサー(右)に設定
  
  ClearTimer(0); //タイマー練習用
  
  while(SENSOR_2 == 0) {   //タッチセンサーが反応してないときの行動
     if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){
         Off(OUT_A+OUT_C);
         OnFwd(OUT_A+OUT_C);  //黒線上の時は直進
     } else if(SENSOR_1>=THRESHOLD) {
         Off(OUT_C);
         OnFwd(OUT_A);  //左側にそれた時、右に修正
     } else {
         Off(OUT_A);
         OnFwd(OUT_C);  // 右側にそれた時、左に修正
     } if((SENSOR_1>=THRESHOLD)&&(SENSOR_3>=THRESHOLD)){
         Off(OUT_A+OUT_C);
         OnRev(OUT_A+OUT_C);
         Wait(20);
         Off(OUT_A+OUT_C);
         OnFwd(OUT_C);  //白紙になったら後退
     }
     
     
   while(SENSOR_2==1){  //タッチセンサーが反応した時の行動
     PlaySound(SOUND_UP);  //音練習用
     OnRev(OUT_A+OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);  //反対方向を向く
     }
   
}
}

本番用

タイマーを用い、交差点をクリアできるようにプログラムを改良した。

#define THRESHOLD 48  //白と黒との境界を48に設定
#define RUN_TIME 50  //タイマー用の秒数設定

task main ()
{

  SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1を光センサー(左)に設定
  SetSensor(SENSOR_2,SENSOR_TOUCH); //センサー2をタッチセンサーに設定
  SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3を光センサー(右)に設定
 
  
  while(SENSOR_2 == 0) {  //タッチセンサーが反応していない時の行動
     if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){
         Off(OUT_A+OUT_C);
         OnFwd(OUT_A+OUT_C);  //黒線上なら直進
     } else if(SENSOR_1>=THRESHOLD) {
         Off(OUT_C);
         OnFwd(OUT_A);
         OnRev(OUT_C);  //左にそれたら右に修正
     } else {
         Off(OUT_A);
         OnFwd(OUT_C);
         OnRev(OUT_A);  //右にそれたら左に修正
     } if((SENSOR_1>=THRESHOLD)&&(SENSOR_3>=THRESHOLD)){ //白紙上での行動
         ClearTimer(0); //タイマーカウント開始
         OnFwd(OUT_A+OUT_C);  
         while(FastTimer(0)<=RUN_TIME){ //白紙上にいる時間が0.5S未満の時
         Off(OUT_A+OUT_C);
         OnFwd(OUT_C);
         OnRev(OUT_A);}  //線を探す
         while(FastTimer(0)>RUN_TIME){ //白紙上にいる時間が0,5S以上の時
         Off(OUT_A+OUT_C);
         Wait(100);  //一旦停止
         OnFwd(OUT_A+OUT_C);
         Wait(100);
         Off(OUT_A+OUT_C);  //直進(交差点での行動)
         ClearTimer(0); //タイマーリセット
     }
     }
     
    while(SENSOR_2==1){ //タッチセンサーが反応している時の行動
     OnRev(OUT_A+OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     OnFwd(OUT_C);
     OnRev(OUT_A);
     Wait(160);
     Off(OUT_A+OUT_C); //反対を向く
     }
   
}
}

音がなるプログラム

マリオが一番光り輝く時の音楽と共に疾走するプログラムを作りました。

#define THRESHOLD 48
#define RUN_TIME 40
#define Do 523
#define Re 587
#define Mi 659
#define Fa 698
#define sol 784
#define Ra 880
#define Si 988
#define HiDo 1047

sub  hachibuHiDo()
{
         PlayTone(HiDo,10);
         Wait(20);
}        

sub  jyuurokubuHiDo()
{
         PlayTone(HiDo,5);
         Wait(10);
} 

sub jyuurokubuDo()
{
         PlayTone(Do,5);
         Wait(10);
}    

sub jyuurokubuRe()
{
         PlayTone(Re,5);
         Wait(10);
}      

sub hachibuSi()
{
        PlayTone(Si,10);
        Wait(20);
} 

sub jyuurokubuSi()
{
        PlayTone(Si,5);
        Wait(10);
}


task play_music()
{    

repeat(10)
{
 hachibuHiDo(); 
 hachibuHiDo();
 hachibuHiDo();
 jyuurokubuRe(); 
 hachibuHiDo();
 hachibuHiDo();
 jyuurokubuRe();
 jyuurokubuHiDo();
 jyuurokubuRe(); 
 hachibuHiDo(); 

 hachibuSi();
 hachibuSi();
 hachibuSi();
 jyuurokubuDo();
 hachibuSi();
 hachibuSi();
 jyuurokubuDo();
 jyuurokubuSi();
 jyuurokubuDo();
 hachibuSi();
}

}


task main ()
{ 

  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT);
 
  start play_music;
  while(SENSOR_2 == 0){
     if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)){
         Off(OUT_A+OUT_C);
         OnFwd(OUT_A+OUT_C);
     } else if(SENSOR_1>=THRESHOLD) {
         Off(OUT_C);
         OnFwd(OUT_A);
         OnRev(OUT_C);
     } else {
         Off(OUT_A);
         OnFwd(OUT_C);
         OnRev(OUT_A);
     } if((SENSOR_1>=THRESHOLD)&&(SENSOR_3>=THRESHOLD)){
         ClearTimer(0);
         OnFwd(OUT_A+OUT_C);
         while(FastTimer(0)<=RUN_TIME){
         Off(OUT_A+OUT_C);
         OnFwd(OUT_C);
         OnRev(OUT_A);}
         while(FastTimer(0)>RUN_TIME){
         Off(OUT_A+OUT_C);
         Wait(100);
         OnFwd(OUT_A+OUT_C);
         Wait(100);
         Off(OUT_A+OUT_C);
         ClearTimer(0);
     }
     }
     
   while(SENSOR_2==1){
     PlaySound(SOUND_UP);
     OnRev(OUT_A+OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     OnFwd(OUT_C);
     OnRev(OUT_A);
     Wait(160);
     Off(OUT_A+OUT_C);
     }
   
}
}

頑張った点

○交差点を通るためのプログラム作りが上手くいかなかった。黒い線をトレースするようにしたので、

両センサーが白い部分を感知したら前進するようにしたのだが、交差点以外でもカーブではみ出してしまって

前進してしまったので、タイマーを使う事により解消した。

○2つ目のコース作成をペンでするのではなくて、テープを貼ることにより、コースの微調整を行いやすくした。

苦労した点

○今回はオリジナル性のあるロボットを作りたかったのでロボ作成に時間をかけたのだが、結局ボツになってしまい、あんなに時間をかけたことを後悔した。

さらにロボ作成の時間が祟り、プログラム作成がかなり慌ただしく作ってしまった。

○調子に乗ってコースを難しくしすぎてしまった。

○二つ目のコースにはテープを貼って作ったので、コースがでこぼことなっているところができてしまい、

そこを光センサーが誤って白と判断してしまい、ロボがライン通りに進まなかった時があるので、カッターで

切って修復した。

感想

○今回はラインの上を動くだけなのでプログラムは簡単であろうと思っていたのだが、甘かった。 前回のように余裕を持って完成する事はできなかった。

○コースをこり過ぎて、またロボットにもこり過ぎたので、プログラム作成に余裕がなく終わってしまった。 まさに『二兎追うものは一兎をも得ず』である。

これからの課題

○今回はオリジナル性を出そうとして断念してしまったが、今度こそは自分たちの考えで作られたロボットを走らせたい。

○今回は音楽を完成させるまで時間がまわらなかったので、今度はチャレンジしたい。

○プログラムをサブルーチンを使用することで、プログラムを簡略化したかった。

コメントをどうぞ

  • 試行錯誤の過程が見られてよい。 -- ヒロヤ? 2007-06-21 (木) 12:45:43


添付ファイル: file200706211831000.jpg 186件 [詳細] file200706211830000.jpg 197件 [詳細] file200706211828000.jpg 194件 [詳細] file200706211827000-1.jpg 187件 [詳細] file200706211825000-1.jpg 181件 [詳細] file200706211823000-1.jpg 191件 [詳細] file2007062018420002.jpg 178件 [詳細] file2007061419360002.jpg 216件 [詳細] file200706201941000.jpg 185件 [詳細] file200706201842000.jpg 188件 [詳細] file200706181639000.jpg 199件 [詳細] file200706181628000.jpg 208件 [詳細] file200706181628001.jpg 197件 [詳細] file200706142035001.jpg 174件 [詳細] file200706142035000.jpg 203件 [詳細] file200706142034001.jpg 220件 [詳細] file200706142034000.jpg 209件 [詳細] file200706141936000.jpg 199件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-21 (木) 20:09:20 (4442d)