![]() |
chieさん作 Message Router 概念図 |
今回作成したものは、1台の PC のキーボードや JoyStick を複数のプレイヤーが同時に操作し、押されたキーや JoyStick の情報を RCX へのメッセージに変換して、PC に接続した IR Tower を1つ使って時分割でメッセージを送信し、プレイヤーがそれぞれ自分の RCX を4台まで自由にコントロールできるというシステムと、このシステムを動かすために必要な PC 上で動くアプリケーション Message Router だ。あくまで PC もしくは PC につながったデバイスの操作による RCX 制御なのだが、一応線のとりまわしを心配することなく RCX を4台外部から制御出来るということで、その辺は見逃してもらおう。
開発スピードを優先させると....
![]() |
マイコンBASICマガジン2000年6月号 「レゴ道場チャレンジ!!レゴ・マインドストーム」より (掲載許可を得ているものです) |
PC 上で動かすプログラムの開発環境は Visual Basic を使用することにした。お手軽さを考えれば、もうこれしかないだろう。おまけに最近リリースされた DirectX7 は VB からでも簡単に使用出来るようになった。これによりキーボードだけでなく JoyStick からのリアルタイム入力もバッチリ対応できる。
RCX との通信には前述の通り標準ファームウェアのメッセージ送受信機能を使うことにした。あまり RCX 側の環境を特殊にしてしまうと、応用範囲が限られてしまう恐れがあるためだ。RCX リモコンのようにキーの情報をビットパターンにして1つのメッセージ番号に集約し、各 RCX に対応するメッセージ番号を順番に送信する方法を取った。常に各 RCX へのメッセージが送りつづけられることになるので、一時的に赤外線を受光出来なくなっても、再び赤外線を受光できれば制御が出来るようになる。
しかしここで問題発生!Spirit.ocx では PC から直接 RCX にメッセージを送れないことが判明した。色々考えた末に、いつものごとく RCX へのコマンドを直接シリアルで送信することにした。但し、いしかわの持っている VB は Learning Edition なのでシリアルポートを制御出来ないので、最初はフリーのシリアル制御用 ActiveX を使用することにした。しかし OCX はレジストリに登録するのが面倒なので、Ver.3 からは シリアル制御 Win32API を呼出す DLL を自作し、これを VB から呼出すようにした。ファイルが増えてしまったが、まあ仕方ないだろう。
メッセージを送信するためのコマンドは、いつものように kekoa さんの Web ページで調べた。Set message(F7H) がそうだ。このコマンドは他のコマンドと違い bit3 を反転させる必要はない。また RCX からの赤外線によるレスポンスも無い。これはラッキーだ。複数の RCX からレスポンスがあると面倒なことになるし、その間は次のコマンドを送信できないので、メッセージの送信間隔が開いてしまうところだった。願ったり叶ったりだ。
メッセージを使うことで RCX 内部で動かすプログラムと協調して動作をさせることが可能だ。単にラジコンのようにモータを ON/OFF させるだけでなく、キー入力をトリガにして、プログラムによる一連の処理を開始させることが出来る。またセンサを使った自律動作と外部からの指示との組み合わせという、インテリジェントなテレコントロールロボットの実現が可能だ。さらに Scout SDK を使えば Scout だって制御可能だ。2台での対戦なら RCX 対 Scout の方が分かりやすくて面白いし、RDS は RIS より安いので、パーツさえ持っていればロボットの数を増やすには最適だ。
キーボードからの入力は、キーリピートなどがあっては困るので DirectX を使っている。PC へインストールする必要があるのが面倒だが、これは仕方ないだろう。ゲームパッドへの展開を考えると、他に選択肢は無いような気がする。
Message Router を使ってみると....
Message Route を使うには、DirectX7 を事前にインストールする必要がある。Microsoft のダウンロードページからインストールしてもらいたい。また Message Router は VB5.0 で作られているので、環境によっては Vb5jp.dll 等をインストールする必要がある。
mesroute.exe を実行すると、右上のようなウインドウが表示される。ここで使用するロボットと操作するキーを選択し Start ボタンを押すと、赤外線出力動作を開始する。動作を開始すると、何もキーを押していなくても常にメッセージを送るため赤外線が出続けるので IR Tower の電池消費に注意すること。PC の Esc キーを押すと赤外線発光が停止する。Exit ボタンで mesroute.exe を終了できる。ちなみに IR Tower の接続先は現状では COM1 固定になっている。許してもらいたい。
操作により出力されるメッセージ番号は ini ファイルによって変更可能である。ini ファイル中に Bit0〜5 と書かれている所があるが、右に書いてあるキーやパッドのボタンが押された時、該当する bit が 0 になる。Bit6〜7 は各ロボットの番号により決まる。例えば Robot1 は Bit6,7 が共に 0 となり、Robot4 では共に 1 となる。
複数キーを同時に押すと、各 bit がそれぞれ 0 になった番号が送信される。例えばロボット1で上と左を同時に押すと、メッセージ番号58番(2進数で00111010)が送信される。nqc や Spirit.ocx による RCX 制御プログラムを使えば AND 演算等を行なうことが出来るので、各操作に対応した処理を独立して書くことが出来る。
対応するキーの説明は画面に表示される。この表示もビットマップファイルを修正することで、ユーザの好きなキーマッピングを反映させることが出来る。
RIS の PathFinder2 や Scout の The Bug のようなモータ2個で自由に動く足回りのロボットを4台独立して動かすことを想定し、サンプルの RCX CODE も用意してみたので試してもらいたい。また nqc を使ったサンプルプログラムと Scout 用の LASM サンプルプログラムも用意してみた。nqc を使ったものは添付の BAT ファイルを使うことでプログラム1〜4番にロボット1〜4に対応するプログラムを転送出来る。プログラム番号の変更でロボットの番号を変えることが出来るので、RCX を取り替える必要のあるイベント等では非常に役に立つ。
動かしてみると、ちょっとレスポンスが悪いかなとは思うが、ちゃんと4台独立して制御出来る。実際に4台がばらばらに動いているのを見るのは本当に面白い。RCX を4台そろえるのが難しいが....。
このシステムを使用したサッカー競技エキシビジョンの様子(MPEG1 圧縮 9.7MB)
ソフトウェア
Message Router V3.10(LZH 圧縮 45KB)
*注意* V3.10 を使う際には、以前のロボット4用プログラムでは不具合が出ます。
新しいファイルをダウンロードし直して下さい。
DirectX7 ダウンロードページ
ロボット1用 RCX CODE サンプル(LZH 圧縮 1KB)
ロボット2用 RCX CODE サンプル(LZH 圧縮 1KB)
ロボット3用 RCX CODE サンプル(LZH 圧縮 1KB)
ロボット4用 RCX CODE サンプル(LZH 圧縮 1KB)(V3.10対応版)
ロボット1〜4用 nqc サンプル(LZH 圧縮 3KB)(V3.10対応版)
ロボット1用 Scout LASM サンプル(LZH 圧縮 1KB)
ロボット2用 Scout LASM サンプル(LZH 圧縮 1KB)
Message Router V3.10 VisualBasic Ver5 ソース(LZH 圧縮 7KB)
参考資料
更新情報