課題と改善案
今回の設計では、以下の機能を全て1タスクで行うような設計としました。
- バンパースイッチ(トレースの開始・停止)の監視
- 真下の明るさを検知するライト(黒、白の読み取り)の監視
- タイヤの駆動制御
このため、本来は、切り離して個別に管理できるはずの機能同士が、相互に影響を及ぼし合うことになるという課題を残すことになります。
具体的には、タイヤの駆動制御機能と、バンパースイッチの監視機能は、本来であれば、個別に管理できるものであり、相互に影響を及ぼす必要がないものです。しかし、今回の設計では、これらが相互に影響を及ぼし合うため、以下の弊害が生まれます。
- タイヤ駆動制御機能で行っているwait時間を伸ばすことで、バンパースイッチ監視間隔が伸び、バンパースイッチが押されたというイベントを取りこぼす(※注)可能性が高まります。
※注:
イベントを扱う場合、本来であれば、イベントを取りこぼさないために、イベントはキューイングします。しかし、今回は、リアルタイム性に着目したものであるため、イベントのキューイングは省きました。
なお、今回の設計において、イベントのキューイングを行ったとしても、wait時間を伸ばした場合、イベントの取りこぼしは発生しませんが、イベントに対する反応時間の低下という弊害が生まれます。
実際に、タイヤ駆動制御機能で行っているwait時間を100ミリ秒から500ミリ秒に伸ばした場合の画像をご覧ください。バンパースイッチが押されたというイベントを取りこぼしている様子を、実感として、感じていただけるかと思います。
コラム:開発時のFAQ
【Q1】リセット方法は?(ファームウエアアップデートモード)
【A1-1】NXTの電源投入後、本体の背面のボタンを5秒以上長押しします。
【Q2】リセットされません。
リセットはNXTの電源が入っていないと行えません。電源が入っていてもバッテリーや電池が劣化しているとリセットされないことがあります。
【A2-1】バッテリーをフル充電後、NXTの電源を入れてリセットしてみます。
【A2-2】新品の電池に入れ替え、NXTの電源を入れてリセットしてみます。
【Q3】SAM-BA起動時に「Select the connection」コンボボックスに「\usb\ARM0」が表示されません。
【A3-1】以下の手順で接続し直してみます。
- NXTが接続され、電源が入っていることを確認します。
- SAM-BAのバージョンが2.6になっているか確認します。バージョンが違う場合は2.6を再インストールします。
- デバイスマネージャでNXTのドライバを確認します。下の画像の(○)のようになっているか確認します。なっていない場合はデバイスマネージャからドライバの更新を行い、「atm6124...」に変更します。
- SAM-BAを終了します。
- NXTとPCの接続を解除し、USBケーブルを抜きます。
- NXTの電源を投入しリセットします。
- NXTとPCをUSBで接続します。
- SAM-BAを起動し、次のダイアログがでること確認します。

次回は
次回は、今回の課題を改善するために、各機能ごとにタスクを割り当てる設計を行いたいと思います。また、リアルタイムOSの機能を利用することによる、リアルタイム性の向上も図りたいと思います。
【関連サイト】
・JUDE(Change vision):軽快で直感的に使えるUMLエディターです(無償版もあります)。本原稿のUMLはこのツールで記載しています。
・Afrel:本連載で利用しているロボット「教育用レゴマインドストームNXT」の正規代理店です。組み込み向けの各種教材を提供しています。
・レゴ社
・LEJOS OSEK
・LEJOS OSEKの日本語ミラーサイト


