[[2006a/C2]]

#hr
CENTER:&size(25){課題2:黒い線に沿って動くロボット };
CENTER:&size(25){[[課題2>2006a/練習問題#kadai2]]:黒い線に沿って動くロボット };
#hr
//CENTER:&size(25){[[''課題2:黒い線に沿って動くロボット'' >2006a/練習問題#kadai2]]


CENTER:製作者:佐藤 堀 (五十音順)

RIGHT:カウンタ&counter;
RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2006a/C2]]
--目次
#contents
-------


*この課題について [#n09e55e3]
*[[この課題>2006a/練習問題#kadai2]]について [#n09e55e3]

-[[この課題>2006a/練習問題#kadai2]]ではスピードと確実性をできる限り両立させたマシンとプログラムを作製しなければならない。

-この課題ではスピードと確実性をできる限り両立させたマシンとプログラムを作製しなければならない。

-コースのショートカットをしないようにする。コースアウトをしないようにする。

-主に[[NQC入門]]の[[ここ>NQC入門/5. センサを使う]]を参考にプログラムの開発を行う。
-----------
*この課題の解決への方針 予想される問題点 [#m118daf0]

-この課題では、正確性と迅速性といった相反する性質をマシンに与えることが目標である。しかし、マシンの速度を上げると正確性が落ち、速度を落とせば正確性が上昇するが、迅速性が無くなる。

-マシンを回転させる方法は大きく分けて2種類ある。ひとつは左と右のタイヤを逆に回転させる方法。もうひとつは、片方のタイヤのみを回転させ、もう片方のタイヤを止めるあるいは、トルクをかけないという方法である。

--前者は機敏に動き、後者は滑らかに動くであろうということが予想される。

-光センサーについて、使用可能な光センサーの数は2までなので二つ使用することにする。((センサーひとつの首振りマシンよりも、ふたつのマシンのほうが速いであろうと予想されるため))

-%%光センサーの取り付け位置について、マシンの中心に近ければ近いほど良いのではないか?%%
-近すぎると、ちょっとしたカーブの場合曲がりすぎてしまうためコースアウトしやすくなる。((ちょうど良いセンサーの位置を探すために、何度も何度もセンサーの位置を変えながら実験を重ねた))

-今回の課題では、プログラムの違いが班ごとにあまり現れないだろうと思われる、そこで、他の班との差を出すために、マシンの開発に力を入れてみる。




------------
*マシンの紹介 [#ya896662]
|>|CENTER:COLOR(#808080):''マシンの全体図とギヤ辺りの拡大の図''|
|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/dscn2634_Medium.jpg,75%);|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/dscn2635_Medium.jpg,75%);|

-マシンがトレイスをしている感じを見る人により強く印象つけるために、マシンを
%%%小型化%%%
した。

-モーターを後ろにつけたので、マシンの形が他の班と大きく異っている。

-タッチセンサー郡を小型化することで、マシン全体を小さくすることが出来た。これにより、前方のマシンと衝突した場合でも、
%%%反転のための動きで、再び他機と衝突することを防ぐために自機を後退させる必要が無くなり、無駄なアクションを減らすことが出来る。%%%

-何度も作りかえることによって最終的にこの形になった。三輪車よりも基本的な車の形が、無難と気づいてからは、ギア比の調整に力をいれた。

-ギア比を簡単に変えることが出来るようにするためにマシンを簡単に分裂できるようにした。

-ギヤ比の調整を最後の最後まで行ったため、結構スピードのあるマシンに仕上がった。

-ギヤ比を調整したため、通常ドライブベースの三倍のスピードでタイヤが回る。^-^
-ギヤ比を調整したため、通常のドライブベースの三倍のスピードでタイヤが回る。^-^

-だが実際はマシンの重さと、ギヤ比の変更により、トルクが通常の3分の1程度まで落ち込んでいるので、通常の3倍も速くは無い。T-T
-だが実際はマシンの重さと、ギヤ比の変更により、トルクが通常の3分の1程度まで落ち込んでいるので、通常の3倍も速くは進まない。T-T

-上記の問題を解決するために、出来るだけ無駄なパーツをマシン本体から取り除いた。でもやっぱりマシンが重かった。

-実際は速い速度を、自機の重みで押さえつける感じ・・・
-実際は速すぎるマシンの速度を、自機の重みで押さえつけ、無理やり速度調整する感じ・・・

|>|>|CENTER:COLOR(#808080):''マシンの細やかな説明''|
|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/VFSH0001.JPG,35%);|←分裂の図|車体とタイヤはすぐにはずせる。そしてすぐにギアを交換出来るような構造になっている|
||||
|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/VFSH0002.JPG,35%);|←ギアチェンジ→|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/dscn2636_Medium.jpg,64%);|わずかな時間で交換可能|

**マシン作り [#z4ad0dd9]

-マシンを作り、テスト走行させ、改善し、また走らせるという作業を繰り返していくうちに分かったことがあります
+前輪と後輪の距離を広げると、回転が遅くなり、比較的ゆるく、曲がりやすいコースでもすぐにコースアウトしてしまう。
+自動車のようなステアリング機構を再現するのは、非常に難しい
+自動車のようなステアリング機構を再現するのは、けっこう難しい
+車体の横幅を小さくしたほうがすばやい旋回が出来る
+かといってあまり狭くしすぎても、うまく曲がってくれない
+結局普通のドライブベースが一番無難((お手軽でしかも結構編安定している。おまけに抜群の強度を誇る。基本のドライブベース・・・・以外にあなどれないやヤツです。))
+結局普通のドライブベースが一番無難((お手軽につくれて、しかも結構編安定している。おまけに抜群の強度を誇る。基本のドライブベース・・・・以外にあなどれないやヤツです。))
+光センサーの取り付け位置は結構重要。2〜3cmずらすだけで、マシンが生まれ変わる
+出来るだけ低重心のマシンにしたほうが良い

------------
*ライントレイスの様子 [#w46bf74a]
||||||||||||||
|&ref(2006a/C2/課題2左/MOL001.ASF,ライントレースの様子);|
||||||||||||||
---見所 動画の開始約6秒後の超急カーブを見事にこなしているマシンの勇姿。

---注意 10番教室のパソコンではどうもうまく再生されないようで、、、、 ごめんなさいです。

---困った....

----------------
*☆前方のロボットに接触したら反転して進むロボット [#y7381ced]

前半後半に課題を分けさせてもらいますと、前半となりますこの課題。とりあえず、ライントレースをするプログラムにタッチセンサーに反応があった場合、反転することを命ずる部分を追加しました。担当:堀

-----------
**プログラムの紹介 [#l69cf354]

 モーターA 車体左側の動力担当 順回転で前進
 モーターC 車体右側の動力担当 順回転で前進

 センサー1 光センサー 車体左側の監視を担当
 センサー3 光センサー 車体右側の監視を担当
 サンサー2 タッチセンサー マシン前方の中央に設置

 #define THRESHOLD 40 //閾値
 #define  TIME 100  //マシンが反転するのにかかる時間、課題1と同様に直前に測定する。
 
 task main()
 {
   SetSensor(SENSOR_1, SENSOR_LIGHT);//1a //センサー1(左)が光センサーであることを宣言
   SetSensor(SENSOR_3, SENSOR_LIGHT);//3c  //センサー3(右)も光センサーであることを宣言
   SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサー2(中央)がタッチセンサーであることを宣言
      
 while(true){
   f((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD))//1&3w //センサー1(左)と2(右)が白を感知
             { OnFwd(OUT_A+OUT_C);} 前進する
                     
  if((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD)) //1w3b //センサー1(左)が白センサー3(右)が黒を感知
             {OnRev(OUT_C); OnFwd(OUT_A);} 右へ回転し、軌道の修正を図る
               
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD))//1b3w //センサー1(左)が黒センサー3(右)が白を感知
             {OnRev(OUT_A); OnFwd(OUT_C);}   //左へ回転し、軌道の修正を図る
                
   if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))//1b 3b //センサー1(左)と2(右)が黒を感知
            {OnRev(OUT_A);OnFwd(OUT_C);} とりあえず回ってみる 
         
   if(SENSOR_2==1) //タッチセンサーに反応があった場合
         {OnRev(OUT_A);OnFwd(OUT_C);Wait(TIME);}    //180°回転する 。  
   }
 }
-----------
***プログラムの説明、解説 [#s91d13af]

-上記の通り、ライントレイスするように命じるためのプログラムに、タッチセンサーに反応があった場合、反転するプログラムを追加したもの


-両方の光センサーが白を感知している場合モーターACを順回転させ、前進する

-左側のセンサーが黒を感知し、右側のセンサーが白を感知している場合、モーターAを逆回転、モーターCを順回転させ、左回転する
 
-左側のセンサーが白を感知し、右側のセンサーが黒を感知している場合、モーターAを順回転、モーターCを逆回転させ、右回転する

-両方のセンサーが黒を感知してしまった場合、とり合えず回転させてみる。((とりあえずというのはこの命令部分に自信が無いからです。うまくライン上に復帰させることが出来るかどうか・・・))

-上記のプログラムでは、障害物に接触した場合180°回転させることになっていますが、これではカーブで接触した場合、ライン上に復帰できません。しかしこの課題では、『前方のロボットに接触したら反転((位置・動きの方向などが反対になること。また、反対にすること。 〜大辞林 第二版 (三省堂)Excite エキサイト 辞書:国語辞典より))して進む 』という表記から、カーブでの接触は無いだろうと考え、このままにしてあります。
-上記のプログラムでは、障害物に接触した場合180°回転させることになっていますが、これではカーブで接触した場合、ライン上に復帰できません。しかしこの課題では、『前方のロボットに接触したら%%%反転%%%((位置・動きの方向などが反対になること。また、反対にすること。 〜大辞林 第二版 (三省堂)Excite エキサイト 辞書:国語辞典より))して進む 』という表記から、カーブでの接触は無いだろうと考え、このままにしてあります。



---------------------
*☆前方のロボットに接触したらそのロボットを右側から追い抜いて再びライン上に戻って進むロボット [#ze40fe3a]

後半にあたりますこちらのプログラム。このプログラムではロボットが接触した場合、右側に避けつつ追い抜いて行くようにプログラムを書いています。担当:佐藤
----------------
**プログラムの紹介 [#l140f428]

今回プログラムを作りましたが、全く同じ内容で別の雰囲気を醸し出すプログラムを三つほど作りました。プログラム自体が行っている処理は表面的に見えるところでは全く変化していないはずです。
-switch文を用いたプログラム
--[[2006a/C2/課題2左/program01]]
-if文を主要な部分で用いたプログラム
--[[2006a/C2/課題2左/program02]]
-サブルーチンを用いたプログラム
--[[2006a/C2/課題2左/program03]]


*旧マシンの紹介及びマシンの変更点[#c719ce03]
|>|CENTER:COLOR(#808080):''旧マシンの前からと横からの図''|
|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/VFSH0003.JPG,35%);|BGCOLOR(#C0C0C0):&ref(2006a/C2/課題2左/VFSH0004.JPG,35%);|

-旧マシンは「マシン同士の衝突」を意識しすぎたため、頑丈・重厚・高トルク・低速のマシンに仕上がってしまった。
-旧マシンは「マシン同士の衝突」を意識しすぎたため、頑丈・重厚・高トルク・低速のまるで戦車みたいなマシンに仕上がってしまった。

-旧マシンは余計な装飾を施し過ぎた。そのためマシンの重量が増して、スピードが落ちてしまった。この課題の主旨から外れてしまう恐れがあったため、新マシンへの変更を決意した。

-旧マシンはリアバンパーを持ち、また前輪にも保護帯が取り付けられており、ほかのマシンと勢いよく衝突し、あるいは衝突されても自機に影響がないようになっている。が、実際は勢いよくマシン同士が衝突することは無く、バンパーなしでも問題ないことが分かったため、バンパーを外し、マシンの軽量化を図った。
-旧マシンはリアバンパーを持ち、また前輪にも保護帯が取り付けられており、ほかのマシンと勢いよく衝突し、あるいは衝突されても自機に影響がないようになっている。だが、実際は勢いよくマシン同士が衝突することは無く、バンパーなしでも問題ないことが分かったため、バンパーを外し、マシンの軽量化を図った。

-旧マシンの車体は通常のドライブベースに改良を加えたものであったが、十分な速度を出だせなかったこと、他の班との差を作るためという理由で、車体を大幅に変更した。というより一度ばらしてまったく新しい車体を作った。



*苦労した点・工夫した点のまとめ [#edd817a7]

-%%%迅速性と確実性の両立に苦労した。%%%両方の性質のマシンに与えるため、何度も、マシンを作り直し、センサーの位置を変え、ギア比を換えたりを繰り返した。これまでに2〜3回はマシンを作って、バラしてを繰り返した。本番直前にもセンサーの位置を変えた。

-我々のコースにはものすごく急なカーブがあり、このカーブの攻略に苦労した。この問題は低速・高トルクのマシンを使用することで一応解決することが出来た。しかし、高速ギアを搭載したマシンを使用するとコースアウトしてしまった。このマシンのギア比を若干落とし、光センサーの位置を変えることにより、何とかそれなりのスピードで、急カーブを曲がりきることができた。
-我々のコースにはものすごく急なカーブがあり、このカーブの攻略に苦労した。この問題は低速・高トルクのマシンを使用することで一応の解決をみることが出来た。しかし、高速ギアを搭載したマシンを使用するとコースアウトしてしまった。この高速マシンのギア比を若干落とし、光センサーの位置を変えることにより、何とかそれなりのスピードで、急カーブを曲がりきることができた。

-人生で初めてのライントレースであったため、最初はセンサーの使い方から勉強した。
-人生で初めてのライントレースするロボット&プログラム作りであったため、最初はセンサーの使い方から勉強した。


*このレポートについて、〜製作者より〜 [#yf54bc97]

-今回のレポートでは、動画を載せるといった新しいことにチャレンジしてみました。MPEGとかいう動画ファイルの形式に関する知識はまったくないので、うまく再生できるか心配です。もしクリックしても見れないようでしたら、一度「対象をファイルに保存」してから、試してみてください。もしかしたら見れるかもです。

-どうも10番教室のMACのパソコンでは再生されないようようで… どうしても見たい方はご自宅のパソコンをつかっていただけるとおそらく再生されるとおもいます

-もっとマシンが動いているところが見たいと思ってくださった方へ ありがとうございます。製作者にとって、これほどうれしいことはございません。アップデートしたファイルには容量の上限までに、撮影時間を10秒ほど延長する余裕がありましあが、製作者の撮影に使用した携帯電話のメモリーがいっぱいになってしまい、これ以上の撮影が出来なくなったため、このような中途半端な映像になってしまいました。申し訳ございません。
-もっとマシンが動いているところが見たいと思ってくださった方へ ありがとうございます。製作者にとって、これほどうれしいことはございません。アップロードしたファイルには容量の上限までに、撮影時間を10秒ほど延長する余裕がありましあが、製作者の撮影に使用した携帯電話のメモリーがいっぱいになってしまい、これ以上の撮影が出来なくなったため&aname(w46bf74a,full){このような};
中途半端な映像になってしまいました。申し訳ございません。

-初めてアンカーとやらを使ってしました。

----------------
*感想 反省点 次に生かしたいこと[#p8e92b60]

-うまく時間が取れなくて実際のコースで走行させる機会を作れなかったこと。課題1の場合は実際のコースというものは無く、ただ紙さえあれば、開発を進められたが、今回はコースがないと思うように作業を進められなかった。

-今回のチームは、全員が寮生であったため、「いつでも作業できるや」とか、「夜中でも作業できるからいいや」などといった怠け心がはたらき、マシン、プログラムの開発が遅れてしまった。

-今回はあまり作業時間がとれず、心から満足出来る仕上がりになったとは言えません。試したい事がまだまだあります。ライントレースの奥深さをよく理解することが出来ました。機会があればぜひ、満足のいくマシンになるまで、とことん作業をしてみたいと思いました。

-今回のマシンは回転時に左と右のタイヤの回転方向を逆にすることで、鋭い回転が出来るようにプログラムを組んだ。しかし、この方式だと、直線でセンサーに反応があるたびに、左右いずれかのタイヤが、マシンの進行方法に対し逆向きに回転することになり、マシンの勢いを殺してしまう。このことを改善したい。




*先生及びTAの方々のコメント [#x6621bd3]
学生にとって、先生そしてTAのアドバイスは三度の飯より重要です。

プログラムやマシン・レポートの良い点・悪い点・改良するべき点などがございましたら、どんな些細なことでもよろしいので、お書きくださいませ。
#hr
-教員のコメントよりもTAのコメントのほうが役に立つ場合も多いのでTAにもアドバイスを求めましょう。 -- [[松本(教員)]] &new{2006-06-14 (水) 10:01:29};
-文法上の話ではありませんが、それなりに意味のある定数名や変数名は多少長くなっても役割がわかりやすい名前にしましょう。 -- [[松本(教員)]] &new{2006-06-14 (水) 10:03:09};
-後半の switch を使用したプログラムについて。switchを使わず、ifの中に直接それぞれの場合の命令を記述したほうが簡明なプログラムになると思います。マクロも活用しましょう。 -- [[松本(教員)]] &new{2006-06-14 (水) 10:07:58};
-半角のカタカナを使うのは止めましょう。 -- [[松本(教員)]] &new{2006-06-14 (水) 10:09:23};
-流れがつかみやすいレポートでなかなかよいのではないでしょうか。また同じタスクを複数のプログラムで表現してあることも評価できます。あと苦労した点についてのまとめや、マシンの詳細や組み立て時の情報などを付け加えるとよりすばらしいレポートとなるでしょう&wink; とりあえず限りなく◎に近い○としておきます。-- [[まいける(TA)]] &new{2006-06-16 (金) 00:38:31};
-ワンタッチで切替えることのできる変速ギアを考えても面白いと思います。3つ目のモータをギア変速用に使用して、例えば、黒白の入れ替わりが少ないところ(つまり直線やゆるやかなカーブ)は高速で、頻繁に黒白が入れ替わるところ(急なカーブ)は低速で、というのもまったく不可能ではないですね… -- [[松本(教員)]] &new{2006-06-21 (水) 09:35:49};
-コメントありがとうございます。変速ギアに関することは当班の開発案の中にありましたが、?@コースが短い、また長い直線が無いので力を十分に発揮できない。?Aモーターをひとつ追加することはマシンの重量の増加につながり、トルク不足のマシンにはつらいであろうと思われたため?B技術的・時間的に厳しいと思われたためという理由で、開発を断念いたしました。 -- [[製作者]] &new{2006-06-21 (水) 21:57:28};
-コメントありがとうございます。変速ギアに関することは当班の開発案の中にありましたが、1 コースが短い、また長い直線が無いので力を十分に発揮できない。2 モーターをひとつ追加することはマシンの重量の増加につながり、トルク不足のマシンにはつらいであろうと思われたため 3技術的・時間的に厳しいと思われたためという理由で、開発を断念いたしました。 -- [[製作者]] &new{2006-06-21 (水) 21:57:28};
-しかし、課題の発表が終わり、時間の枠から解放された今、変速ギアを組み込むことも面白そうだとおもっております。しかし、どのように変速を行えばよいのかよく分かりません、、、(マシンもプログラムも… もう少しヒントをいただけると幸いです。 -- [[製作者]] &new{2006-06-21 (水) 22:10:50};

#comment
----------------
RIGHT:[[ロボティクス入門ゼミ]]
RIGHT:[[2006a/C2]]



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS