//ここから後退用ライントレース起動。†このプログラム全体の特徴としては子機の動きをすべて親機で制御しているため、通信ミスがおこらないよう送信メッセージに対し、必ず応答メッセージを返すようにしてあります。子機は4つのタスクを同時に起動し、常に親機からメッセージが送られてくるのを待つようにしてあります。・パックに触れたことを知らせるタッチセンサーの4つです。上二つは親機から指示を受けるとその通りにアームを動かすだけものですが、した二つは子機に搭載されたセンサーの値を判断し、その結果を親機に送る機能がついています。この中でも特筆すべきはタッチセンサーのタスクです。このタスクによって送られてくるメッセージによって親機は後退のタスクを停止させます。通常は前進後退の制御はそれを担当するRCXにタッチセンサーを取り付けた方が圧倒的に簡単かつ反応も早いのですが、私たちのロボットは前進後退の制御をしている親機にライントレース用の光センサーを前進用に2つ、後退用に1つ使っているため、タッチセンサー用のポートが空いておらずやむを得ず子機から情報を転送する形をとりました。転送によるディレイを減らすためにこの部分だけは親機からの起動指令に対する応答を1回のみにし、子機からタッチセンサーが押されたというメッセージを受け取った親機がまず後退を止めてから応答するようメッセージ送信方法を変えています。その結果それほど遅れることなく後退を停止することができるようになりました。親機は子機の制御と前進後退の制御を行っています。同じタスクですべてのパターンに対応できるように変数を多用する形になりました。基本となるライントレースタスクは前進用がtransfer、後退用がbackです。transferで、交差点に到達すると交差点用のタスクturnが起動しうまく曲がれるようになっています。どの交差点で曲がるかはすべて変数でコントロールしており、その変数を決定するタスクがcolor(行き)とrevert(帰り)です。colorは子機にパックの色情報を送るよう指示し、送られてきた色情報をもとに曲がる場所の変数を決定します。このときrevertのために今何色を運んでいるかの情報を残しておきます。revertはcolorの残した情報をもとに帰りに曲がる場所を指定します。あとはそれらのタスクをメインタスクでコントロールするという形になっています。†テスト終了後からできる限り時間を割いてプログラムしてきましたが、時間が足りず、turnとcolorタスクにバグが残ったままとなってしまい、メインタスク内で無理矢理誤摩化すという方法をとらざるを得なくなってしまいました。優勝したとはいえ非常に心残りです。基本的に制御はできる限りセンサーからの情報にたより時間を指定した制御はしないようにしよう(時間制御だと電池残量により値を修正しなくてはならないため)という目標があったのですが、誤摩化した部分とかごに入れる部分以外はセンサーだけで制御することができある程度満足しています。RCX同士の通信はタッチセンサーの部分など、ほぼ完璧にできていると思うので満足しています。人によってプログラムの癖が違い、整合性をとるのが面倒だと思ったのですべて一人でプログラムしたのですが、バグフィクスの際に他の人からのアドバイスがもらいにくいというデメリットがありました。時間に余裕があるようならば一人がベースとなり部分を作りもう一人と一緒にチェックおよび修正していった方がうまくいくのではないかと思います。