IMG_4813

MONOXIT の無線ロボット MI100 を動かそうとして、情報が少なかったのでメモです。

→・子ども Rubyプログラミング講座「ロボット編」 - MONOXIT
→・mi100 ドキュメント - Ruby-Doc.org
この辺りが公式の情報のようです。

そこで、自分でいろいろいじってみて分かったことが 2つあります。

○ MI100 を動かすのに KidsRuby は必要ない
子ども Rubyプログラミング講座「ロボット編」第1回」によると、まずKidsRuby をインストールして、KidsRuby から MI100 を動かすことになっていますが、KidsRuby がなくても MI100 は動きます。

KidsRuby は Ruby 1.9.2 を一緒にインストールします。ふだん自分の使っているバージョンの Ruby を使いたいときは、KidsRuby をわざわざ入れる必要はありません。

自分の試した範囲だと、Mac(OS X 10.9 Mavericks)では Ruby 2.1.3、2.0.0p576、1.9.3p547、Windows (Windows 7)では Ruby 2.1.3 で MI100 が動きました。
 
ただし、当たり前ですが KidsRuby独自の機能は使えなくなります。
例えば、
ask "1 + 1 = ?"
alert "neko"
などでウィンドウパネルを出すとか。


○ 光センサーが使える
Ruby用の MI100 拡張ライブラリー0.3.1リリース
に「光センサーオプション対応」としか書かれていないのですが,光センサーが使えるようになっています。

bright = robo.light
のようにすると、光センサーからの照度のデータが取得できます。


------------------------------------------------------------------------------------------------
それでは、以下が自分の行った MI100 を使えるようにする設定法です;

● Mac の場合
1.シリアルポートライブラリをインストール
$ gem install monoxit-serialport
 
互換性があるので、代わりに hybridgroup-serialport でも、serialport でもかまいません。
Mac ではすべての gem が動作しました。(上記すべての ruby のバージョンで)
(ちなみに、serialport が一番最近更新されています。)

シリアルポートライブラリは 2つ以上入っているとまずいようなので、
$ gem list
で確認して、他のシリアルポートライブラリが入っているようなら、
$ gem uninstall hybridgroup-serialport
のようにしてアンインストールしておきます。 

gem install で以下のようなエラーが出た場合、そのバージョンの Ruby を削除してインストールし直すと良いようです。(open-ssl の脆弱性対策?)
Symbol not found: _SSLv2_client_method

参考;
→・MI100用のライブラリーをKidsRubyにインストールしよう - MONOXIT

2.mi100用ライブラリをインストール
$ gem install mi100


3.MI100 とパソコンを Bluetooth で接続
3-1.ペアリング
MacBook は Bluetooth が標準で使えるので、Bluetooth-USB アダプタを新たに買う必要はありません。

アップルメニュー>システム環境設定>Bluetooth で;
「Bluetooth を入にする」をクリック。

MI100の電源ボタンを入れると、デバイス欄に RNBT-XXYY と表示されます。
(XXYYは、自分の MI100 の Bluetoothモジュール RN-42 に書いてある MAC ID の12桁のうちの下4桁)

RNBT-XXYY 表示されているの横の「ペアリング」をクリックすると、「未接続」から「接続済み」に変わります。
(しばらく放置していると、未接続に戻ります。)


3-2.シリアルポート(COMポート)の確認
Mac の場合、シリアルポートの確認はターミナルで;
$ ls /dev/tty.*
と打つと、いくつか表示されるうち
/dev/tty.RNBT-BB24-RNI-SPP
のようなそれらしいものを見つけます。/dev/以下すべての文字がシリアルポートの指定には必要です。これは後で必要になるので控えておきます。


4.MI100用のプログラムを書く
エディタでいつものようにRubyプログラムを作ります。

例えば、robot1.rb という名前で以下のような内容で保存します。

require "mi100"
robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"

robo.sound
robo.movef
robo.spinr
robo.good
robo.blink

robo.close

2行目の
robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"
の /dev/tty.RNBT-BB24-RNI-SPP は先ほど確認した、自分の MI100のシリアルポートの名前にします。


5.MI100のプログラムを実行する
ターミナルを起動して、保存した robot1.rb のあるディレクトリに移動します。
例えば、デスクトップに保存したとすると;
$ cd desktop

robot1.rb ファイルが desktop ディレクトリにあるか確認してみる;
$ ls
(Windows の場合は、$ dir ) 
表示された中に robot1.rb があれば OK。

Mac の Bluetooth を入にして、MI100 の電源も ON にします。
(RNBT-XXYY の接続状態は「接続済み」にはならず、「未接続」のままでよい。) 

プログラムを実行する;
$ ruby robot1.rb

うまくいくと、
RNBT-XXYY が接続済みに変わって、MI100 が動きます。


ただし、最初は以下のようなエラーが出て動かない場合が多いです。
serialport.rb:22:in `create': Resource busy - /dev/tty.RNBT-BB24-RNI-SPP (Errno::EBUSY)

これは、Bluetooth が未接続から接続済みになる前に、プログラムが接続エラーと判断してしまっているようです。

そこで、あきらめずにすぐにもう一度実行します。
(↑矢印キーを押せば、ruby robot1.rb と履歴が表示されるので楽。)
$ ruby robot1.rb

何回かプログラムを実行させていると、RNBT-XXYY が接続済みに変わって、MI100 が動く(はず)。
その後、すぐに Bluetooth は未接続に戻ります。

Bluetooth がどうしても接続済みにならない場合は、MI100 の電源を一度切って入れ直してみます。それでも接続しないときは、Mac の Bluetooth を一度切ってから入れ直してみます。

どうしても、Bluetooth がつながらないようなら、先ほど設定した システム環境設定>Bluetooth のデバイス欄に登録されている RNBT-XXYY を一旦削除して、ペアリングをやり直します。そして、接続済みになっている内にすかさずプログラムを実行してみます。

Mac の Bluetooth のシリアル接続がすぐに切れてしまうのは、MI100 の省電力設定?のためなのかもとも思いますが、その他 Web で調べた限りでは、Mac の不具合のことももあるらしいです。

・Mac の Wi-Fi を一時的に切にする
・Mac の PRAM をリセットする
・Mac の SMC をリセットする
・Mac をセーフブートする

やり方は以下を参照;
→・Macに接続してるBluetooth機器でトラブルが起きた時の対処法 - Macとかの雑記帳 

ちなみに、自分でもすべて試してみましたが、あまり変わりませんでした。


6.自分のプログラムを作って MI100を動かす
子ども Rubyプログラミング講座「ロボット編」」などを参考に自分のプログラムを作っていきます。
 
require "mi100"
robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"

robo.good
loop do
  bright = robo.light
  puts bright
  if bright > 300
     robo.move_forward 500
  end
end

robo.close

上記の例では、音を鳴らしてから、ターミナルに光センサーの値を表示しつつ、光センサーが懐中電灯などで照らされると前進します。
参考)


------------------------------------------------------------------------------------------------
● Windows の場合

(2014.12.21 追記;
Windows版 Ruby で gem がインストールできない場合の対処法;
→・Windowsでgem installするとSSLエラーが出る場合の解決策 - Qiita
 
1.シリアルポートライブラリのインストール
1-1.DevKit のインストール
RubyInstaller で Ruby をインストールしている場合、シリアルポートライブラリをインストールする際に、DevKit がないとエラーになります。

そこで、RubyInstaller の ダウンロードページから、自分の環境に合った DevKit をダウンロードします。
インストール方法は以下のページが分かりやすかったです。
→・Ruby/DevKitのインストール方法 - サイト運営の私的メモ

ダウンロードしたファイルをダブルクリックすると、解凍先を聞いてくるので、ディレクトリを指定します。このディレクトリは一時的なものではなくずっと配置したままになるので、ちゃんとディレクトリの配置や名前を決める必要があります。
(例えば、C:\rubydev にしたものとします。)

コマンドプロンプトで;
$ cd C:\rubydev (展開先のディレクトリに移動)
$ ruby dk.rb init
$ ruby dk.rb install

うまくいかない場合は、ruby dk.rb init と入力する前に;
$ devkitvars
と入力してからやり直してみて下さい。


1-2.monoxit-serialport のインストール
$ gem install monoxit-serialport
 
Mac と違い、Windows では serialport、hybridgroup-serialport、
monoxit-serialport のうち、monoxit-serialport しか正常に動きませんでした。また、他のものが入っているとまずいようなので、
$ gem list
で確認して、他のシリアルポートライブラリが入っているようなら、
$ gem uninstall hybridgroup-serialport
のようにしてアンインストールしておきます。

参考;


2.mi100用ライブラリをインストール
$ gem install mi100

うまくインストールできない場合は、Ruby 自体を改めてインストールし直した方がよいようです。

(2014.12.21 追記;
Windows版 Ruby で gem がインストールできない場合の対処法;
 

3.MI100 とパソコンを Bluetooth で接続
Windows パソコンに Bluetooth が付いていない場合、Bluetooth-USB アダプタを購入します。
標準で付いていれば、それを使います。

公式に動作確認の取れている機種はこの2種類だそうです。
・プラネックス BT-Micro3E2X
・バッファロー BSHSBD04BK
今回は バッファロー BSHSBD04BK を使いました。
 
3-0.Bluetooth-USB アダプタのドライバのインストール
3-1.ペアリング
3-2.シリアルポート(COMポート)の確認

これらは、「MI100とパソコンをペアリングしよう」を参照してください(Windows 7 の場合)。


4.MI100用のプログラムを書く
5.MI100のプログラムを実行する
6.自分のプログラムを作って MI100を動かす

ここからは、上記の Mac の場合と同じです。
ただし、Buetooth の接続は Windows の方が安定しているようです。


⚪︎関連記事;
→・無線ロボット MI100改 でライントレースをやってみた(決定版?)