BluetoothでMindstorms NXTをコントロール(下調べ)

 BluetoothでNXTをコントロールしたい。センサー経由だと、周囲の環境に依存しすぎて思ったとおりの動きをさせづらいので、Bluetoothから明示的に動作命令を出せるとうれしい。が、Bluetoothとかさっぱりわからない。というわけで、まずはざっくりと関連しそうな情報を集めてみた。

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がスレーブになる
マスタとスレーブは同時になることはできないようなので、NXTがマスタになってBluetoothデバイスに接続する場合、PCとの接続は切っておかなければいけないのかもしれない。

接続方法案
■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)

コメント

匿名 さんのコメント…
Wiiリモコンから、NXTの操作はできなくはありません。
リモコンとPCをつないで、リモコンの十字キーをキーボードの十字キーに割り当てて、NXTソフトウェアのRemote Contorolでリモコンのボタンを押します。
・・・ですが、ステアリングはできません。