そうだ、休日はロボットを作ろう――「Robotics Developer Studio」でロボット製作を体験無料で始める“自作ロボット”(2/4 ページ)

» 2008年12月15日 10時00分 公開
[PR/ITmedia]
PR

RDSと「Tribot」でリモコンロボットを作ってみる

マイクロソフトが提供するRDSのダウンロードサイト

 NXTは組み方次第でどんなロボットにも変化する。今回はチュートリアルに出てくる最もシンプルな「Tribot」(トライボット)と呼ばれる三点支持型ロボットを例として取り上げる。Tribotはモーターに直接接続された駆動輪を2つ備えており、車輪自体の向きは変えられないものの、モーター出力を左右別々に制御することで方向転換することができる。これをPCに接続したXbox 360コントローラで操作するプログラムを作ってみよう。

 開発環境のRDSはマイクロソフトのサイトからダウンロードできる。現在のところ英語版のみの提供だ。

 プログラムを作成するには「Microsoft Visual Programming Language 2008」(以下、VPL)を実行する。VPLの起動画面はVisual Studioなどの開発環境に慣れている人にはなんとなく馴染みのあるレイアウトだが、中央の広い空間がVPLのキャンバスとなるDiagramになる。VPLはその名のとおり、ビジュアルプログラミング言語であり、ドラッグ・アンド・ドロップによるパーツの配置と連結が中心だ。

 RDSでのプログラミングはSOA(サービス指向アーキテクト)を採用しており、VPLのDiagramに配置するパーツがサービスに対応する。各サービスは左側に入力、右側に出力の口を持つブロックとして表現されている。

VPLの起動画面。真ん中のDiagramにサービスやアクティビティを配置、連結していく(写真=左)。サービスの例。左のマークは入力、右のマークは出力を表す。丸いマークは繰り返し出力を行う通知出力、三角のマークは1回のみ出力を行う結果出力だ(写真=右)

 サービスの種類は、サウンドや光などの各種センサ、ゲームコントローラのような入力装置からモーターやスピーカー、ディスプレイなどの出力装置、さらにはタイマーや算術演算などのユーティリティまでさまざまだ。また、条件分岐、データのマージを行うアクティビティと呼ばれるブロックも利用できる。今回はXbox 360コントローラを表す「XInputController」と、左右別々に制御できる車輪「GenericDifferentialDrive」の2つのサービスを使用する。

 コントローラで操作する、と言ってもその実装はさまざまだ。特にXbox 360のコントローラにはアナログスティックが2つ、デジタルパッドが1つ、トリガーが2つ、ボタンが10個(アナログスティックの押し込みを含む)も搭載されている。ぱっと思い浮かぶのはコントローラの上下ボタンで前後進、左右ボタンで左右旋回するというものだろう。そのほかにも右スティック、左スティックそれぞれに左右モーターの出力を割り当てる操作系もあるだろうし、L/Rボタンで前進(アクセル)、ストップ(ブレーキ)とすることもできる。

 まずは最も簡単な例として、左右トリガーをそれぞれ左右のモーターに割り当て、トリガーの値をそのまま出力パワーとして制御してみよう。起点となるXbox 360のコントローラ(XInputController)を右下のServicesからドラッグ・アンド・ドロップしてDiagramに配置する。同じようにその右隣にGenericDifferentialDriveを置く。

 XInputControllerには2つの出力マークがある。三角形のものは結果出力と呼ばれる、1回限りの出力だ。丸のほうは通知出力と呼ばれ、複数回出力される。今回はコントローラのトリガーの状態を都度処理するため、通知出力のマークからドラッグ・アンド・ドロップしてGeneric Differential Driveと連結する。

 次にConnectionsダイアログのFromからTriggersChangedを、ToからSetDrivePowerを選ぶ。これでXbox 360コントローラのトリガーの状態が変更されたときに、GenericDifferentialDriveの出力パワーを設定することを表す。

 Data ConnectionsダイアログではSetDrivePowerの設定データを設定する。LeftWheelPowerに左トリガーの値を表すLeftを、RightWheelPowerにRightを指定すればプログラムの完成だ。

サービスを配置して連結するとConnectionダイアログが表示される。FromにTriggersChangedを、ToにSetDrivePowerを選択する(写真=左)。続けてData Connectionダイアログが表示される。Target LeftWheelPowerにValue Leftを、RightWheelPowerにRightを割り当てれば完成だ(写真=中央/右)

Physxを利用したシミュレータ

 今回のプログラムはGenericDifferentialDriveを使っており、ロボットの種類を特定していない。いわば、共通シナリオのようなものになっている。それを各ロボットごとに固有の操作プロトコルに変換するのが“マニフェスト”と呼ばれる一種の設定ファイルだ。

 マニフェストを変更すれば同じプログラムを使ってさまざまなロボットを操作できる。さらにマニフェストはVPL上の各サービスごとに設定するため、複数のロボットを1つのプログラムで操作することも可能だ。つまり、ロボットAの光センササービスの出力をロボットBのモーターサービスの入力につなげる、といったように、ロボットどうしの協調処理を簡単に実現できる。

 プログラムが正常に動作するかどうかを確認するため、最初はシミュレータで試してみることにしよう。VPLのDiagram上のGeneric Differential Driveをダブルクリックし、設定画面を開いて「Use a manifest」を選択する。「Import Manifest...」ボタンをクリックすると利用可能なマニフェストの一覧が表示される。「LEGO.NXT.Tribot.Simulation.Manifest.xml」がRDSに付属するシミュレータ「Visual Simulation Environment」(以下、VSE)用のTribotマニフェストだ。

enericDifferentialDriveサービスをダブルクリックして設定画面を開く(写真=左)。Use a manifestを選択し、Import Manifest...ボタンをクリック(写真=中央)。LEGO.NXT.Tribot.Simulation.manifest.xmlを選択(写真=右)

 F5キーを押すとDSSのログ画面が表示される。ローカルPC上ではあるが、通信を行うためセキュリティソフトのファイアウォールで遮断される場合がある。一時的にファイアウォールを無効にしたり、例外ルールを作成して通信を許可すれば、しばらく後にシミュレーション画面が開き、Tribotが表示されるはずだ。PCに接続したXbox 360コントローラで実際に操作してみてほしい。

DSSがデフォルトで使用するポートは50000と50001。ファイアウォールで遮断される場合は例外ルールを設定すればよい(写真=左)。シミュレータでTribotを動かしてみると、実にリアルな挙動が再現されていることに気付くだろう。急制動を行えばつんのめるし、急回転すれば倒れてしまう(写真=中央)。Generic Differential Driveはモーター2つで駆動する車輪全般のサービスで、ロボットに依存しない。マニフェストを「iRobot.Create.Simulation.Manifest.xml」に切り替えればそのままiRobotが動作する。iRobotはお掃除ロボットRumbaから掃除機機能を外したものだ(写真=右)

Copyright © ITmedia, Inc. All Rights Reserved.


提供:マイクロソフト株式会社
企画:アイティメディア営業本部/制作:ITmedia +D 編集部/掲載内容有効期限:2009年1月19日