<課題>

競技1.スピード競争(Autonomous Speed Circuit)

MindStorms付属のサーキットの2倍の大きさのサーキットで行う.

<ルール>
スタートラインから黒線のトラックに沿いながら2周し,タイムとルートの正確さを競う.

<点数>
1.もっとも短いタイムでゴールしたチームを20点とし,以下タイム順に少なくなる.
2.半周ごとに銀紙が貼ってあり,そこを通ったときに音を鳴らせば10点.
  2周で計4回通ることになり最大40点となる.
3.上記の点数とは別にして,1周できるごとに点.2周で計20点となる.

これらの3つの合計点で競う.
※この競技では,マシンの構造はステアリング+後輪駆動に限定する.

<ヒント>
・ラインを光センサで感知しながら進むことで,ラインをトレースできる.
・とりあえず1周するアルゴリズムはMindStormsのCD-ROMに収録されている.
 (ステアリング機構のものではないが参考までに)
・ステアリング機構のギア比,前輪と後輪の間隔,センサをつける位置,車体の大きさ,
 電池の残量等に気をつけないとうまくコースを回ることができない.
・マシンの強度を考えて作らないといざというときに壊れる.

 

<説明,考察 etc...>

マシン

 マシンを作るにあたって気をつけたのは,まずは強度である.RCXの本体裏面はブロックとのくっつきがイマイチよくないので,遠心力で落ちないようにできるだけ広い面積で繋ぐようにした.最終的には上からも押さえて,だいぶしっかりとしたつくりになった.(光センサ周りがまだ弱いが・・・)
 次に考えたのが光センサーである.僕たちの班のマシンの光センサは縦に動かすことができるようにした.このため床から任意の距離をとることができ,床から0.1ミリ程度の高さにもにもできる.床に近づけることができるということは,つまり余計な光が入り込まず,センサの値が安定するということだ.しかし,実際に地面すれすれにして動かしてみたときに発覚した問題点が,テストコースの銀紙である.テストコースの銀紙はをのうえを何度も車が通っているため光センサが引っかかったりしてめくれあがっているのだ.地面すれすれだと光センサがこの僅かな段差に引っかかってしまうのだ.(まぁコンマ数ミリ浮かせればいいので我々にとってはさほど問題ではなかったが・・・)
 次に後輪であるが,最初,左右の後輪を繋いでしまったことによって,カーブでタイヤが歪み,詰まってしまうことがあった.(特に電池が減っているとよく起こる)そのため左右を独立にしたのだが,そうすると今度はタイヤの安定性が下がり,がたつき,カーブでタイヤ,がギヤと接触してしまった.そして最終的には実際に駆動するタイヤは本体のほぼ真ん中に入れ横に補助輪が2つ,前輪が2つ(ほぼ1つだが・・・)ある5輪車となった.横のタイヤは本体から離してあるためどこかに接触することはないし,全てのタイヤが独立に回るので,カーブで詰まることもない.今までのタイヤがらみの問題は全て解決することができた.さらに,歪まないということは本体への不可の軽減につながり,間接的に強度の向上にも役立っている.

プログラム(ソースファイル

 まず,当初の予定では,

1.今いる位置の光センサの値,およびその直前の光センサの値(どの色だったか)から現在位置(コース外側の白,黒,灰,コース内側の白) を把握し, 現在位置によって前輪の回転方向,および回転角度限界を設定(変数の中に入れる)
2.現在位置と前輪の角度から後輪を調整(コースアウトを防ぐため止めたり進めたり)
3.今居る位置が銀紙なら1回音を鳴らす.

の3つの無限ループタスクを同時に走らせるつもりだったのだが,どうも2のタスクがうまく動かなかったため,床が白になったときに若干Waitで止めるようにした.(ただし2のタスクは復活予定なのでこの処理は仮のもの)

色の変わり目で変数にセットされる,曲がる方向,およびそのおおよその強さは,
  白 → 黒 : 左に弱
  黒 → 灰 : 左に弱
  灰 → 白 : 左に弱(中)
  白 → 灰 : 右に弱
  灰 → 黒 : 右に中
  黒 → 白 : 右に強
      (ただし周回方向は時計回り)
である.
 現在のプログラムにおいての場合分けはこれだけである.(これ以外の場合はそれまでの動作を継続.とりあえず2周まわることはできた) しかしこれだけでは制御は完全ではない.黒の領域から白の領域にでる時に光センサが灰色の領域と認識されるような値をとってしまうことがあるからだ.そうなると灰→白という風に認識され,マシンはさらに外側に出て行ってしまう.これは実際にマシンを走らせてはじめてわかる問題点のひとつだろう.現在は黒と白の間の制御についていろいろと試行錯誤をしている最中である.

その他

 LEGOの実験における最大の難点はRCXの赤外線通信プロトコルかもしれない.
RCXにプログラムを送信するとき, RCXは「データを正常に受け取りました」といった類のデータを送り返してはくれないと思われる.なぜなら,データがちゃんと送信されていなくとも何の反応もないからである.以前,プログラム内でどのループの中に入っているかを調べるため.PlaySystemSoundsを使って音を鳴らしていたとき,どうも鳴り方がおかしいと思って,PlaySystemSoundsを全て消したにもかかわらず音が鳴り続けたことがあった.光センサがどのような値をとっても前輪が反応しないことなどもよくある.(電池の減り具合もこの事態の発生率に大きく関わっているようにも思えた.)

しかし,これらの「予定外の事態」「予想だにしないトラブル」との遭遇は,我々にとっては良き勉強となるだろう.
我々の中でLEGOのプロになる人はおそらく居ないだろうが,こういった特殊なケースへの対応,適応能力が上昇したという意味では,意義のあるトラブルだったのかもしれない.