2013年6月27日木曜日

NXT.NET で LEGO Mindstorms をコントロールしてみる

 今回は「Kinect×Mindstorms NXT ロボット プログラミング」という書籍に掲載されていた NXT.NET for Windows というのを使って Mindstorms NXT を動かしてみようと思います。
 書籍ではKinectと連携して、NUIでMindstorms NXTを操作していますが、まずは、NXT.NETを試してみようと思います。

 操作対象として、アームを組み立てます。


 土台にNXTモータを2つ設置して、


 アームを左右に旋回するためのターンテーブルルギアを設置。



 アームの先端にハンドを開閉するためにNXTサーボモータを取り付けます。先端にはタッチセンサとカラーセンサも付けます。


 とりあえず、アームの組立は終了。



 まずは、センサやモータポジションは使わず、PCから単純にモータ速度を制御するようなお試しをやってみようと思ったんですが、ここからが大変でした。といっても、プログラムが・・・とかじゃないです。Bluetoothがいうことを聞いてくれません。今回、NXTのBluetoothを初めて使ったのですが、一見、PCからデバイスが検出されて簡単に接続したように見えるんですが、実際には使えない状態でした。ネットで検索すると、Mindstorms付属のGUIプログラムツールを使うときはプログラムが直接通信するのでSPPを設定してはいけないとか、SPPで使う場合に東芝Bluetoothスタックを使うとNXTではうまくいかない、みたいな情報はあるんですが、今回はどちらにも該当しません。Win7標準のスタックでSPPで接続をして送信ポートと受信ポートが2つ構成されたような状況となっていて、これは、今回の場合は正しい構成のはず。結局、原因が分からず、ドライバを削除して入れなおしたり、ポートを手動で設定してみたり、色々と無意味そうなことを二時間近くやって、(その間には単純にドライバを入れなおしているにもかかわらずポートが構成されたり、されなかったり、明らかに間違ったデバイスとして認識されたり、一体、何なんだろう・・)、よくわからないけど、どうにかつながる状態に。しかし、プログラムから一旦接続して、再度接続しようとすると繋がらず、NXT側の電源を何度もOn/Offすると、また、つながって、また切断すると・・・・。

 使えねぇ・・・。

 まあ、遊びでやってるだけなんで、いいけど。おそらくは、自分のPCの環境だけでの問題だとは思うんだけど、これが、NXTのスタンダードなんだったら、EV3のBluetoothはもう少しまともにして貰いたいもんです。それとも、EV3はWLANもオプションで対応するみたいだから、Socketなり上位のプロトコルでネット接続してねってかんじなのかな?

 お試しで、NXT.NETを使って動かしてみたところ。NXT.NETでプログラムすること自体は、特に問題もなく、使いやすいです。


 お試しに使ったコードはこちらに置きます。

 自分はまだMindstorms にわかユーザなので、NXTをちゃんと使えていないわけですが、どうも、一癖ある感じです。世の中には、普通のモータ+LEGOとかNXTの代わりにArduinoとかでNXTのサーボを動かしている人もいるみたいだけど、もしかすると、自分もそっちの路線に走ってしまうかも・・・。