BluetoothでNXTをコントロールしたい。センサー経由だと、周囲の環境に依存しすぎて思ったとおりの動きをさせづらいので、Bluetoothから明示的に動作命令を出せるとうれしい。が、Bluetoothとかさっぱりわからない。というわけで、まずはざっくりと関連しそうな情報を集めてみた。
Bluetooth全般
・Bluetooth概要
http://ja.wikipedia.org/wiki/Bluetooth
Bluetoothにはいくつかのプロファイルがあって、対応したプロファイル同士でないとやり取りできない模様。
・NXTのBluetooth仕様
http://mindstorms.lego.com/Overview/NXTreme.aspx
ざっと読んでみると、こんなことがわかった。
接続方法案
■WiiリモコンからBluetoothで指示する
これができれば、ラジコンみたいに使えて楽しいなぁと思ったのだが、WiiリモコンのBluetooth関連仕様を見ていると、どうも無理っぽい。
・Wiiリモコンの仕様
http://www.wiili.org/index.php/Wiimote
Wiiリモコンでサポートされているプロファイルは、HID/SPD/HCIと書かれている。
SPDはService Discovery Protocol、HCIはHost Controller Interfaceで、プロファイルより下の階層っぽい。実際のプロファイルはHID(Human Interface Device)Profileのみということで、NXTとは通信できそうな気がしない(実際、つないでみてもうまくいかなかった)。
Wiiリモコン経由でNXTを操作するのであれば、WiiリモコンでPCを操作し、PCからSPP経由でNXTを操作するのが現実的な路線か。
■PCからBluetoothで指示する
PCからBluetoothでNXTを操作する場合、まず候補としてあがるのは、すでにBluetooth接続できており、接続インタフェースらしきものも備えているLabViewからのコントロールだ。
しかし、実際にLabViewをさわってみると、NXTとの接続できているものの、できる操作といえばプログラムの転送以外見当たらない。LabViewのBluetoothブロックでメッセージを送信できそうに見えるが、LabViewで作ったプログラムはPC上で動作させることはできず、あくまでNXTに転送してNXT上で動かすことができるのみ。よって、LabViewからのコントロールは不可能。
というわけで、結局はRobotics Studioを使うのが一番簡単なのかもしれない。
・Microsoft Robotics Studio
http://msdn2.microsoft.com/en-us/robotics/default.aspx
Bluetooth関連情報を調べていて、ついでにJavaでBluetoothデバイスを制御するAPIを発見。
・Java Bluetooth API(JSR-82)
http://today.java.net/pub/a/today/2004/07/27/bluetooth.html
こいつを使えば、JRuby on RailsからNXTをコントロールできるかも?WebのUIをWiiのインターネットチャンネルで表示すれば、Wiiリモコンでも操作できそう。
関連リンク
Mindstorms NXT購入
BluetoothでMindstorms NXTへ接続(BT-Mini2EDRW)
Bluetooth全般
・Bluetooth概要
http://ja.wikipedia.org/wiki/Bluetooth
Bluetoothにはいくつかのプロファイルがあって、対応したプロファイル同士でないとやり取りできない模様。
・NXTのBluetooth仕様
http://mindstorms.lego.com/Overview/NXTreme.aspx
ざっと読んでみると、こんなことがわかった。
- NXTは、Serial Port Profile(SPP)をサポートしている
- NXTは、Bluetoothチャネルを4本(0~3)持っている
- NXTは、他のBluetoothデバイスと接続する際に、マスタかスレーブかのどちらかになる
- 自身がスレーブとなる場合にはチャネル0が使われ、ここにマスタが接続される
- 自身がマスタとなる場合にはチャネル1~3が使われ、ここにスレーブが接続される
- PC(LabView)からNXTに接続する場合には、PCがマスタになり、NXTがスレーブになる
接続方法案
■WiiリモコンからBluetoothで指示する
これができれば、ラジコンみたいに使えて楽しいなぁと思ったのだが、WiiリモコンのBluetooth関連仕様を見ていると、どうも無理っぽい。
・Wiiリモコンの仕様
http://www.wiili.org/index.php/Wiimote
Wiiリモコンでサポートされているプロファイルは、HID/SPD/HCIと書かれている。
SPDはService Discovery Protocol、HCIはHost Controller Interfaceで、プロファイルより下の階層っぽい。実際のプロファイルはHID(Human Interface Device)Profileのみということで、NXTとは通信できそうな気がしない(実際、つないでみてもうまくいかなかった)。
Wiiリモコン経由でNXTを操作するのであれば、WiiリモコンでPCを操作し、PCからSPP経由でNXTを操作するのが現実的な路線か。
■PCからBluetoothで指示する
PCからBluetoothでNXTを操作する場合、まず候補としてあがるのは、すでにBluetooth接続できており、接続インタフェースらしきものも備えているLabViewからのコントロールだ。
しかし、実際にLabViewをさわってみると、NXTとの接続できているものの、できる操作といえばプログラムの転送以外見当たらない。LabViewのBluetoothブロックでメッセージを送信できそうに見えるが、LabViewで作ったプログラムはPC上で動作させることはできず、あくまでNXTに転送してNXT上で動かすことができるのみ。よって、LabViewからのコントロールは不可能。
というわけで、結局はRobotics Studioを使うのが一番簡単なのかもしれない。
・Microsoft Robotics Studio
http://msdn2.microsoft.com/en-us/robotics/default.aspx
Bluetooth関連情報を調べていて、ついでにJavaでBluetoothデバイスを制御するAPIを発見。
・Java Bluetooth API(JSR-82)
http://today.java.net/pub/a/today/2004/07/27/bluetooth.html
こいつを使えば、JRuby on RailsからNXTをコントロールできるかも?WebのUIをWiiのインターネットチャンネルで表示すれば、Wiiリモコンでも操作できそう。
関連リンク
Mindstorms NXT購入
BluetoothでMindstorms NXTへ接続(BT-Mini2EDRW)
コメント
リモコンとPCをつないで、リモコンの十字キーをキーボードの十字キーに割り当てて、NXTソフトウェアのRemote Contorolでリモコンのボタンを押します。
・・・ですが、ステアリングはできません。