「mindsensors.com」という会社が作っているレゴマインドストームNXT用センサとオプションパーツが日本国内でも買えるようになりました。
http://www.technologia.co.jp/70.html
そこで、mindsensors.comの製品を紹介したいと思うのですが、一杯ありすぎるので、とりあえず一つだけ紹介します。
▲こちらが「NXTCam-v2」というNXT用のカメラです。176x144ピクセルのカラー画像を取り込むことができます。AVRCamというオープンソースの技術を使って作られているそうです。
ただし、カメラといっても写真を撮るために使うわけではなく、画像解析によって物体を検出するために使います。
▲NXTCamはパソコンで調整を行う必要があります。
そこで、USBケーブル(形状はmini)でNXTCamとパソコンを接続します。バスパワーで動くのでバッテリは不要です。
この時点では、NXTCamをインテリジェントブロックNXTに接続する必要はありません。
▲パソコン側でNXTCamを認識しました。
▲NXTCam専用のデバイスドライバをインストールします。
事前に「nxtcamV1p1.zip」というドライバファイルをダウンロードして解凍しておいてください。
▲デバイスドライバはUSB用とポート用で2種類インストールします。
デバイスマネージャには「COMxx」と表示されています。NXTCamはUSBシリアルを使って、通信を行っているようです。
▲「NXTCamView」というパソコン用ソフトを入手します。
なぜかmindsensors.comのサイトには無かったので、sourceforgeからダウンロードしました。
▲NXTCamを接続した状態で、「NXTCamView」を実行します。
ポートの設定→接続(Connect)→取り込み(Capture)をメニュー選択した様子です。
カメラから映像が取り込まれました。
▲画像を取り込み、オブジェクトを追跡することをトラッキングといいます。
トラッキング(Tracking)をメニュー選択して、「Start」ボタンを押すとトラッキングが行われます。
ただし、設定を行っていないと写真のようにめちゃくちゃな結果が出てしまいます。
▲先の取り込み(Capture)画面で、色を抽出して設定します。
ここでは赤色をカラーパレットの1番に登録しました。
最後に「Upload」ボタンを押して、カメラにカラーパレットを登録してください。
▲正常にトラッキングできた場合です。
これは、カメラの赤色に反応している様子です。
「X」「Y」が赤色を検出したXY座標を表してます。
▲いよいよNXTCamをインテリジェントブロックNXTに接続します。入力ポート1に接続しました。
▲それからNXTソフトウェアを起動して、ブロックのインポートを最初に行います。
事前に「NXTcam.zip」をダウンロード、解凍しておいてください。
インポートに成功すると、NXTCam用のブロックが扱えるようになります。
▲mindsensors.comで公開されているサンプルプログラムの「nxtcam-test.rbt」を実行させてみたいと思います。
このプログラムはトラッキングを行って、その結果をインテリジェントブロックのLCDに表示するというものです。
▲NXTCamのブロックのハブには次のような意味があります。上から順番に(1)~(11)と番号をつけて紹介します。
(1)port:入力ポートの番号(1~4)です。
(2)NXTCam address:インテリジェントブロックを通信を行うさいのスレーブアドレス。デフォルトの2のまま使います。
(3)Mode:動作モードを数値で返します。
動作モードを「Enable Tracking」とすると、トラッキングを許可します。
そして、「Get n th object」とすると、トラッキングの結果を返します。
(4)Total track object:検出したオブジェクトの数(0~8)。検出できなかった場合には0を返します。
(5)Color:検出したオブジェクトのカラーパレットの番号を返します。
(6)X Upper Left:検出したオブジェクトの左上のX座標(0~175)。
(7)Y Upper Left:検出したオブジェクトの左上のY座標(0~143)。
(8)X Lower Righ:検出したオブジェクトの右下のX座標(0~175)。
(9)Y Lower Right:検出したオブジェクトの右下のY座標(0~143)。
(10)Yes/No:トラッキングに成功するとTRUEを返します。
(11)Object no to track:検出したオブジェクトの番号(1~8)。1番から始まります。
▲サンプルプログラムを実行しました。赤い色を検出できるかどうかテストしてみます。
▲プログラム実行結果です。
オブジェクトが2つ見つかり(objs found)、そのうちの最初の1つがXY座標の(128,44)-(167,64)の範囲に存在すると表示されました。
カメラの中心のXY座標が、(88,72)なので、「右上にオブジェクトが存在する」ということになります。
これらの技術を応用すれば、色の付いたボールを追跡するロボットなどを作ることができるはずです。