(2015.2.18 追記;
バージョンアップに合わせて、記述を改めました。)

Rubyで動かす MONOXITの無線ロボットMI100 でライントレース大会をしてみました。
(「U-18プログラミングくらぶ(Ruby三鷹教室)」(2015.1.18、2.15)

その際の設定が結構大変だったので、まとめておきます。

参考)
→・「MI100ロボットでライントレース大会」のスライドを公開しました
→・「MI100ロボットでライントレース大会(第2回)」のスライドを公開しました )

● ハードウェアの改造
MI100 をライントレースできるように、光センサーのついた基盤を下向きに両面テープで付け直します。

以下の写真を参考にしてください。
IMG_5007
(バランスを取るために、後ろに重しをつけた形)

IMG_5095
(15cm定規を使って部品を貼り付けた形)



● MI100本体のファームウェアを書き換える(Windows、Mac 共通)
ライントレース用に拡張した独自ファームウェアに書き換えます。

https://github.com/noanoa07/MI100firmware/tree/driveSpike
のページ(driveSpike ブランチ)から「Download ZIP」をクリックするとファームウェアがダウンロードできます。

書き換え手順は以下を参照;
(ファームウェアを書き込む AVRライタ AVRISP mkII が必要です。)
→・無線ロボット MI100 のファームウェアを書き換えてみた 



● ソフトウェアの設定(Windows の場合)
0.RubyGems の修正
 RubyInstaller for Windows でインストールした Ruby は、2015.1.19 現在 rubygems.org から gem をインストールしようとすると以下のようなエラーが出ます。

RemoteFetcher::FetchError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

そのため、下記ページの「Installing using update packages (NEW)」の手順通りに修正を行います。

> gem --version
でRubyGems のバージョンを確認。

2.2.x だとすると、 最新の 2.2.3 にします。
のページより、rubygems-2.2.3.zip と、rubygems-update-2.2.3.gem の2つをダウンロード。

ダウンロードした rubygems-2.2.3.zip ファイルは、右クリックで「すべて展開」。
できた rubygems-2.2.3フォルダと、rubygems-update-2.2.3.gem を c:\ フォルダにコピー。

コマンドプロンプトで、c:\ に移動して以下を実行。
> cd c:\
> gem install --local C:\rubygems-update-2.2.3.gem
> update_rubygems --no-ri --no-rdoc

> gem --version
で 2.2.3 になっているか確認。

> gem uninstall rubygems-update -x
で rubygems-update をアンインストール。



1.シリアルポートライブラリのインストール
1-0.DevKit のインストール
シリアルポートライブラリのインストールには、RubyInstaller for Windows では Development Kit が必要です。「ダウンロードページ」から、自分の環境に合った DevKit をダウンロードします。

ダウンロードしたファイルをダブルクリックすると、解凍先を聞いてくるので、ディレクトリを指定します。(以下は、C:\rubydev にした場合。)

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

うまくいかない場合は、先に、
> devkitvars
と入力してからやり直します。


1-1.monoxit-serialport のインストール
> gem install monoxit-serialport

> gem list
で、他のシリアルポートライブラリ serialport、hybridgroup-serialport などが入っているようなら、
> gem uninstall hybridgroup-serialport
のようにしてアンインストールします。


2.独自に拡張した MI100用のgem mi100 のインストール
2-0.Git for Windowsのインストール
(次の specific_installを使う時に必要)
> git --version
でバージョン名が表示されなかったら、Git をインストールする必要があります。

Git for Windows」からダウンロードします。
ダウンロードしたファイルをダブルクリックしてインストール。
設定は;
・「Select Component」はデフォルトのまま
・「Adjusting your PATH environment」は、2番目の「Run Git from the Windows Command Prompt」に変更
・「Configureing the line ending conversions.」はデフォルトの一番上のまま

コマンドプロンプトを一度閉じて、再び開いたら、
> git --version
でバージョン表示されたら、インストールされています。

参考)
→・WindowsにおけるGit利用環境は整った: Git for Windows と SourceTree for Windows - 檜山正幸のキマイラ飼育記


2-1.ライントレースに対応した独自の mi100 のインストール
> gem install specific_install
> gem specific_install https://github.com/noanoa07/mi100.git drive_spike

参考)
→・https://github.com/noanoa07/mi100/tree/drive_spike(drive_spike ブランチ)


3.MI100 とパソコンを Bluetooth で接続
3-0.Bluetooth-USBアダプタのドライバのインストール
Bluetooth が付いていない PC では、市販の Bluetooth-USBアダプタを購入して、PC に接続後、ドライバもインストールしてください。 (機種ごとの手順で。)


3-1.ペアリング
a)MI100のスイッチをON。
b)パソコンの画面の下にあるタスクトレイの Bluetoothアイコンをマウスの右ボタンでクリック。
c)「デバイスの追加(A)」をクリック。 
d)RNBT-XXXXという名前のデバイスが表示。
(XXXXは、自分のBluetoothモジュールに印刷されている、12けたの数字の下4けた。)
e)自分のMI100(RNBT-XXXX) をマウスでクリック。


3-2.COMポートの確認
a)Bluetoothのアイコンをマウスの右ボタンでクリック。
b)「Bluetooth デバイスの表示(D)」をクリック。
c)MI100(RNBT-XXXX)を、マウスの右ボタンでクリック。
d)「プロパティ」をクリック。
e)「ハードウェア」タブをクリック。
f)「Bluetoothリンク経由の標準シリアル (COM3) 」の COM3の部分が COMポート名なのでメモしておきます。
 
これで、設定完了です。

参考)
→・MI100とパソコンをペアリングしよう - MONOXIT



● ソフトウェアの設定(Mac の場合)
1.シリアルポートライブラリのインストール
1-1.monoxit-serialport のインストール
$ gem install monoxit-serialport
(monoxit-serialport、serialport、hybridgroup-serialport のどれでもよい。)

(Ruby 2.2.0 では、monoxit-serialport はインストールでエラーが出るので; 
$ gem install serialport)

$ gem list
で、monoxit-serialport、serialport、hybridgroup-serialport などが重なって入っているようなら、
$ gem uninstall hybridgroup-serialport
のようにアンインストールして一つだけにします。


2.独自に拡張した MI100用のgem mi100 のインストール
2-1.ライントレースに対応した独自の mi100 のインストール 
$ gem install specific_install
$ gem specific_install https://github.com/noanoa07/mi100.git drive_spike

参考)
→・https://github.com/noanoa07/mi100/tree/drive_spike(drive_spike ブランチ)


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/以下すべての文字がシリアルポートの指定には必要なので、メモしておきます。

これで、設定完了です。 



● ライントレースプログラムの実行(Windows、Mac 共通)
プログラムを robot1.rb という名前で desktop に保存したとすると、あとは普通の Rubyプログラムの実行方法と同じです。

$ cd desktop  (プログラムのあるディレクトリ desktop に移動)
$ ruby robo1.rb  (プログラムの実行)

サンプルプログラムとして、turn_right 命令を使った「サンプルプログラム1」と drive_right 命令を使った「サンプルプログラム2」を載せておきます。
------------------------------------------------------------------------------------------ 
# サンプルプログラム1 
require "mi100"

robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"  #Bluetooth の接続COM名は自分のものを
robo.good     #音を鳴らす
puts robo.power  #電池の電圧を表示する

robo.turn_led 100,100,100
robo.speed 200
dark = 10   #黒と白の閾値は実際に測って決める

loop do
  bright = robo.light #光センサーの値を取得
  puts bright
  if bright >= dark
    robo.turn_right! 30
  else
    robo.turn_left! 30
  end
end

turn_led 0,0,0 #LED消灯
robo.close   #無線を切断
------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------ 
# サンプルプログラム2 
require "mi100"

robo = Mi100.new "/dev/tty.RNBT-BB24-RNI-SPP"  #Bluetooth の接続COM名は自分のものを
robo.good     #音を鳴らす
puts robo.power  #電池の電圧を表示する

robo.turn_led 100,100,100
robo.speed 100
robo.drive_duration 50
dark  = 15   #黒と白の閾値は実際に測って決める

loop do
  bright = robo.light  #光センサーの値を取得
  puts bright
  if bright >= dark
     robo.drive_right! 80
  else
     robo.drive_left! 80
  end
end

robo.turn_led 0,0,0 #LED消灯
robo.close   #無線を切断
------------------------------------------------------------------------------------------
 


(turn_right 命令を使った例)


● 参考記事
Rubyで動かす無線ロボット MI100 の設定法(Mac編、Windows編)
無線ロボット MI100改 でライントレースをやってみた(決定版?)
Rubyで動かす無線ロボット MI100 の命令一覧とその追加


● 関連記事