検索
連載

ついに始動! Robotics Studioでロボット制御解説! ロボット開発環境Robotics Studio(3)(1/2 ページ)

タッチセンサーに反応して、『痛っ!』と音声出力するプログラムを「Visual Programming Language」で作成する

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 第2回目では、ロボットの選定から組み立て、ファームウェアの更新を行い、LEGOのMindstorms NXT(以下、NXT)とマイクロソフトのRobotics Studio(以下、MSRS)を接続しました。

 今回は、実際にMyロボットを制御してみましょう。「Visual Programming Language(以下、VPL)」を使用して、サンプルプログラム(サービス)を作成します。



Robotics StudioでNXTを制御する際のポイント

 まず、MSRSとNXTによるロボット開発環境について、おさらいします。

 本連載のハードウェア構成は、MSRSおよびLEGOのSDKをインストールしたPCとNXT(ロボット)の2つです。NXTのファームウェアは、ブリック内のROMに書き込まれています。さらに、書き込み可能なRAMも存在します(図1)。

ロボットの制御イメージ
図1 ロボットの制御イメージ

 LEGOのSDKで制作したプログラムは、通信回線を介してブリックのRAMへダウンロードされ、ブリックのCPUで処理されます。また、MSRSで作成したプログラムはPC内で稼働します。

 例えば、「ロボットが障害物にぶつかったら、モーターを停止する」というプログラムをLEGOのSDKで作ったとします。このプログラムは、ロボットのバンパーで感知したオン/オフ信号を基に、bitがハイになったらモーターのアンプの電圧を0Vにクリアします。このような制御プログラムの場合はブリックのRAMで実行されます。

 一方、MSRSで作成したプログラムはPC上で処理されます。ロボットが障害物にぶつかると、NXTのバンパーの情報はBluetoothを経由して、PCに通知されます。この通知を受けてMSRSのサービスは、NXTのモーターの回転速度をゼロにする指令を再度、Bluetoothを介してNXTに伝えます。MSRSのプログラムの場合、NXTとの通信にBluetoothを使用しているため、PC上での操作とNXTの動作にタイムラグが生じます。そのため、系が不安定になるタイプのフィードバック制御は実行できません。応答のスピードが問題になるようなプログラムは、ブリック内で実行するようにします。

 逆に「ロボットが障害物にぶつかったならその場所を記憶して、二度と同じ障害物にぶつからない」という知的行動を伴うロボットを作る場合は、MSRSで実現します。なぜなら、ブリック内のコンピュータで実行しようとしても、CPUの処理能力やメモリ容量などの問題から実現が困難だからです。

 つまり、条件反射のような局所的応答は「ロボット内部(ブリック)」で行い、行動計画のような全体判断は「PC」で行う。これが使い分けのポイントです!

VPLでサンプル開発(1)

VPLの基本操作

 ロボット制御のイメージがつかめたところで、サンプルプログラム(サービス)を作成してみましょう。

 作成する内容は、NXTのタッチセンサー(画像1)が押されたら、「あ痛っ!(ouch)」とPC側で音声出力するプログラム(サービス)です。

NXTのタッチセンサー
画像1 NXTのタッチセンサー

 ロボットのタッチセンサーを押したときに通知が発生し、Bluetoothを経由してPCへ届き、PCのノードがその通知を拾って言葉を発します。

 ここでは、VPLを使用して開発します(注)。

※注:
MSRSをインストールすれば、VPLを利用できます。


 SOAの基本原則に従えば、サービスはC#やVisual Basicでプログラム、ビルドしてノードに配置、実行することになります。しかし、この方法を入門者が理解するとなると少し難しい気がします。SOAの原則に基づいた開発は、MSRSについてもう少し熟知してから挑戦した方がよいでしょう。

 VPLでは、ツールボックスの基本的なアクティビティ(Basic Activities)やサービス(Services)をドラッグ&ドロップして、Diagram(設計図)を作成していきます。Diagramが完成したら[実行]ボタンでロボットの制御を開始します(ノードやサービスは自動的に作成される)。

 それでは、VPLを使ってサンプル開発を進めましょう!

 PCの[start(スタート)]−[All Programs(プログラム)]−[Microsoft Robotics Studio(1.0)]−[Visual Programming Language]をクリックして、VPLを起動します。

VPLの画面
画面1 VPLの画面

 画面1中央の広いスペースは、Diagramと呼ばれるプログラムを組み上げる場所です。画面1左に[Basic Activities]と[Services]、2つのツールボックスがあります。基本はこれらのツールボックスからアイコンをDiagramへドラッグ&ドロップして作業を行います。

 ロボットのタッチセンサーから通知を受け取るサービスは[Services]ツールボックス内にあります。このサービスをDiagramへ取り込むのですが、サービスの数が多いため探すのが大変です。そこで、検索用のテキストボックス([Services]の記載のすぐ下)を利用します。

 テキストボックスに「contact」と入力してください。その結果が、画面2左のように抽出されます。

 検索結果の中にある[Generic Contact Sensors]をDiagramへドラッグ&ドロップします(画面2右)。

サービスの検索結果
画面2 サービスの検索結果

Genericサービスの設定

 VPLを使っていると、[Generic Contact Sensors]のように『Generic』という文字を冠したサービスに出合います。このGenericは、“ロボットに搭載したリミットスイッチからの信号に特化した”“その範囲において一般的に使用できる”というような限定した意味で使われます。

 この「Generic」を冠したサービスを使用する場合、プロパティを設定して対象を特定する必要があります。

 [GenericContactSensors]を右クリックして、ショートカットメニューから[Set Configuration]を選択します。

プロパティの選択
画面3 プロパティの選択

 [GenericContactSensors]タブの内容が画面中央に表示されます。

[Generic Contact Sensors]のタブ
画面4 [Generic Contact Sensors]のタブ

 [Set Configuration]ドロップダウンリストの内容は、初期状態で「None」です。これを「Use a manifest」に変更します。

 画面下部にドロップダウンリストとボタンが表示されます。そのまま[Import Manifest...]ボタンをクリックします。

[Import Manifest...]ボタン
画面5 [Import Manifest...]ボタン

 今度は[Import Manifest]ダイアログが開きます。一覧から「LEGO.NXT.MotorTouchSensor.manifest.xml」(画面6)を選択して、[OK]ボタンをクリックします。

マニフェストの選択
画面6 マニフェストの選択

 これで[GenericContactSensors]のプロパティ設定は完了です。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る