ホーム > ブログ > Bear's Droppings > LEGO Mindstorm NXT を Ruby でコントロールする方法(Windows 編) このエントリーを含む はてなブックマーク 0 users

LEGO Mindstorm NXT を Ruby でコントロールする方法(Windows 編)

Posted by bear.mini at 2007/11/25 14:29:09 (Last updated: 2007/12/23 16:27:11)
タグ: LEGORuby

前回の記事では Mac に ruby-nxt をインストールして NXT をコントロールすることに成功したわけですが、今度は Windows マシンに ruby-nxt をインストールしてみたいと思います。

 

Windows 上で Ruby を使う方法はいくつかあると思いますが、今回は Cygwin の Ruby を使ってみたいと思います。

 

それから、Bluetooth 接続を前提にしていますので、Bluetooth 対応の PC を使用するか、Bluetooth のドングルを購入しておいてください。(ただ、NXT との相性問題がけっこうあるようです。私は PLANEX の BT-MiniEDR で一応は動作を確認しました。が、ちょっと調子が悪いのでこのあたりの詳しい話は後ほど。)

 

 

Ruby のバージョンチェック

まずは Cygwin の setup.exe を使って、Ruby を最新版にアップデートしておきましょう。

今回は Ruby のパッケージは 1.8.6-1 になりました。

 

$ ruby --version 
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin]

 

 

ruby-serialport のインストール

それでは、Mac の時と同様、まずは ruby-serialport をインストールしましょう。

ruby-serialport プロジェクトのページから、ruby-serialport-0.6.tar.gz をダウンロードします。

 

ダウンロードしたら展開し、以下の順にコマンドを実行します。(Mac 編と同様ですね)

 

$ ruby extconf.rb
$ make
$ make install

 

 

RubyGems のインストール

ruby-nxt は RubyGems を使ってインストールしようと思いますので、Cygwin の Ruby 環境にまだ RubyGems をインストールしていない場合、以下のような手順でインストールします。すでに RubyGems がインストール済みならこのステップを飛ばしてください。

 

RubyGems プロジェクトのページから最新版をダウンロードして展開します。

今回は rubygems-0.9.5.zip をダウンロードして展開しました。

 

展開したディレクトリに移動して、

 

$ ruby setup.rb

 

を実行します。

 

 

ruby-nxt のインストール

いよいよ ruby-nxt をインストールします。

 

ruby-nxt プロジェクトのページから最新版の gem をダウンロードしてきます。

今回は ruby-nxt-0.8.1.gem をダウンロードしてきました。

(例によって、リモートから直接インストールがうまくいかなかったので・・・コマンドの入力の仕方が間違ってるだけのような気もしますが。うまくいった方がいらっしゃったらご教授ください)

 

gem をダウンロードしたら、インストールを行います。

 

$ gem install ruby-nxt-0.8.1.gem 
Successfully installed ruby-nxt-0.8.1 
1 gem installed 
Installing ri documentation for ruby-nxt-0.8.1... 
Installing RDoc documentation for ruby-nxt-0.8.1...

 

 

NXT と Bluetooth で接続

今回一番苦労したのはここです。

正確には Bluetooth 接続自体はあっけなく完了したのですが、テストプログラムによる COM ポート経由のアクセスがまったくうまくいきませんでした。

 

当初、VAIO に標準搭載の Bluetooth を使っていたのですが、何度やっても COM ポートへのアクセスが Permission Denied となってしまいました。

 

NXT 用には COM40 というちょっと大きな数字の COM ポートが割り当てられていたので、

Cygwin で /dev/com40 に対して /dev/tty.NXT-DevB-1 というシンボリックリンクを作成しました。

 

その状態でテストプログラムを実行すると、どうしても Permission Denied となってしまいます。

もちろん、dev ファイルの permission は何度も確認しました。

 

ネット上で情報を捜し求めると、どうやら Toshiba 製の Bluetooth スタック(ドライバ)と NXT は相性が悪いようです。ドライバを Microsoft 製にするとよいという情報も見つけました。

 

確かに VAIO に搭載されている Bluetooth のドライバは東芝製でした。しかしながら、その標準のドライバをアンインストールして MS 製に変更するのはなんとなく危険な感じがしてイヤだったので、以前デスクトップマシン用に購入した BT-miniEDR を VAIO に装着してみました。

 

すると、Microsoft 製のドライバがインストールされ、仮想 COM ポート 5 が NXT に割り当てられました。

(ちなみに、この VAIO の OS は Windows XP です。Windows Vista だとまた別のドライバがインストールされるかもしれません)

 

この状態でテストプログラムを動かしてみたところ、Permission Denied からは一歩前進して、コマンドの送信は行われているようなのですが、結果の受信でエラーが起きている様子です。

 

うーん、と悩んでしまったのですが、デバイスマネージャ等でよく見てみると、

 

COM5  MS 製ドライバ

COM6  Toshiba 製ドライバ

COM7  MS 製ドライバ

 

という順に並んでいて、なんだかこの COM6 が悪さをしているような気がしましたので、COM6 と COM7 をデバイスマネージャで削除してから「ハードウェア変更のスキャン」をしてみたところ、ドライバが再度インストールしなおされて

 

COM5  MS 製ドライバ

COM6  MS 製ドライバ

COM7  Toshiba 製ドライバ

 

の順に並び変わりました。

ただ、この後もいつの間にか COM7 にしたはずの Toshiba のポートが COM6 に戻っていたりしたので、このポートだけは無効にしておいたほうがいいかもしれません。

[追記]

コントロールパネルの Bluetooth Local COM を開き、Toshiba に割り当てられている COM6 を削除したらうまくいくようになりました。

(COM6 の [説明] の欄が Toshiba BT Port だったのが空欄になり、COM5, COM6 がともに [所有者] の欄が "システム" になりました)

 

 

デバイスファイルの作成

Cygwin では、NXT と接続するための仮想 COM ポートのデバイスファイルへのシンボリックリンクを自分で作成する必要があります。(これは一度だけ実行すれば十分です。)

 

ln -s /dev/com5 /dev/tty.NXT-DevB-1

 

というコマンドを実行してください。

com5 のところは、各自の環境に合わせて適切な数字に変更してください。

 

 

テストプログラムを実行

ruby-nxt に付属のテストプログラムを実行します。

/usr/lib/ruby/gems/1.8/gems/ruby-nxt-0.8.1/ にインストールされているテストプログラムをホームディレクトリ等にコピーしてきて使いましょう。

 

実行する前に、Mac 編の時と同様、テストプログラムを修正する必要があります。

 

まずは test/test.rb を修正します。

 

require 'rubygems' 

 

という行を先頭のほうに追加しておいてください。

 

それでは Bluetooth で接続されていることを確認したら、test/test.rb を実行してみましょう。

 

$ ruby test.rb

 

NXT からピッと聞こえたら成功です。

 

一度成功した後に、もう一度実行しようとしたら Permission Denied になってしまうことがたまにありますが、そのときは NXT 側の Bluetooth を一度 OFF にして再度 ON にするとうまくつながることがあります。

 

 

もうひとつのテストプログラム実行

つぎは test/unit ディレクトリに含まれている nxt_comm_test.rb を実行しましょう。

 

これも先ほどと同様 require 'rubygems' を追加しておいてください。

 

$ ruby nxt_comm_test.rb 
Loaded suite nxt_comm_test 
Started 
............ERROR: Data contains out-of-range values 
F...ERROR: No active program 
F.ERROR: Data contains out-of-range values 
F 
Finished in 16.751 seconds.

 1) Failure: 
test_play_sound_file(NXTCommTest) [nxt_comm_test.rb:45]: 
<false> is not true.

 2) Failure: 
test_start_stop_program(NXTCommTest) [nxt_comm_test.rb:31]: 
<false> is not true.

 3) Failure: 
test_stop_sound_playback(NXTCommTest) [nxt_comm_test.rb:125]: 
<false> is not true.

19 tests, 40 assertions, 3 failures, 0 errors

 

こんどはなにやらエラーが3件ほど表示されてしまいました。

 

Bluetooth 接続に関していろいろと試行錯誤している間に、NXT のファームウェアのバージョンを 1.0.2 から 1.0.5 に上げたりしたのが原因でしょうか。

これについては追って原因を調査したいと思います。

 

 

レゴ マインドストーム NXT
レゴ マインドストーム NXT
レゴ 2006-10-15
売り上げランキング : 3239

おすすめ平均 star
starRISよりも遊びやすく多機能に
star楽しい!

Amazonで詳しく見る
by G-Tools
ナビゲーション:

このページに寄せられたコメント

bear.mini
2007/11/25
15:04:06 --06:00
エラーが起きていた箇所は、Good Job.rso というサウンドファイルを再生しようとしているところが2カ所(45行目と125行目)と、Try-Touch.rtm を停止させようとしているところ(31行目)でした。
NXT の標準ツール(NXT-G)を使って Good Job.rso ファイルをダウンロードしたらすべてのテストが通るようになりました。
bear.mini
2008/11/28
02:27:12 --06:00
ln でシンボリックリンクを作成するところでエラーになったら、Igor Pechtchanski 氏によるスクリプト http://cygwin.com/ml/cygwin/2004-03/txt00028.txt を実行して、/dev ディレクトリを作ってしまうとよいかもしれません。

コメントしてください:
お名前: (半角/全角問わず 16 文字まで)
コメント:
(no HTML)
確認:
このテキストボックスに "確認" の 2 文字を書くと投稿できるようになります。
投稿ボタンが自動的に有効にならない場合は、ここをクリックしてください
これは、自動的にスパムコメントを書き込もうとする悪意をもったプログラムと、 そうでないあなたを識別するためのものです。お手数をおかけしますがよろしくお願いします。 また、ブラウザによっては対応していない場合があるかも知れません。IE 7 と Firefox で動作確認を行いました。

このページに寄せられたトラックバック

LEGO Mindstorm NXT を買って久しいのですが、ずっと忙しかったこともあってあまり有効活用できていない気がします。(もったいない) &#160; そもそも NXT を購入した目的は NXT を自在にプログラミングしてコントロール
[Bear's Droppings] より
(2007/11/25 14:33:32 --06:00)

このページへのトラックバック Ping URL:
http://bearmini.net/trackback.aspx?~/blog/view.aspx?bid=1&aid=129

このサイトの上位人気記事