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

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

Xboxコントローラーで実機を操作してみる

 シミュレータで動作を確認したらいよいよ実機を動かしてみよう。NXT実機との通信には有線のUSBか、無線のBluetoothを利用できる。リモートコントロールのしやすさを考慮するとBluetoothがよいが、Bluetoothに対応していないPCや、Bluetoothドングルを持っていない場合はUSBで始めてもいい。ここではBluetoothでの利用方法について説明する。

 NXTで利用するのはBluetoothのシリアルポートプロファイル、つまりCOMポートだ。まずはNXTとの接続確立と、その際に割り当てられるCOMポート番号の確認が必要になる。

Bluetoothシリアルポート接続の設定画面の例。使用したのはPCI製BT-MicroEDR2付属のIVT BlueSoleilだが、ほかの製品・ソフトウェアでも基本的な手順は同じ(写真=左)。PC側のCOMポート番号を確認しておく(写真=右)。NXTの場合、初期設定はマニュアルに記述されている通りに行う

GenericDifferentialDriveにほかのサービス、LegoNXTDrive(v2)を割り当てる

 次にVPLに戻り、Generic Differential DriveをNXTのドライブに割り当てる。Generic Differential DriveのConfigurationを“Use a manifest”から“Use another service”に変更し、下の“Use existing service or create a new one”エリアにNXTのドライブサービス「LegoNXTDrive(v2)」をドロップする。

 LegoNXTDrive(v2)のSet Configurationでは“Set initial configuration”を選択。Partnersに表示されているbrickの横の“Use services' partner definition”エリアにLegoNXTBrick(v2)サービスをドロップする。LegoNXT BrickはNXTブロックのサービスだ。LegoNXTBrick(v2)のSet Configurationで“Set initial configuration”を選択し、Initial StateでNxtBrickState > Configuration > SerialPort にBluetoothのCOMポート番号を指定すれば完了だ。

LegoNXTDrive(v2)のパートナーbrickにLegoNXTBrick(v2)を選択(写真=左)。LegoNXTBrick(v2)は“Set initial configuration”を選択してCOMポート番号を指定。ボーレートは0のままでかまわない(写真=中央)。実行するとDSSノードの状況がブラウザに表示される(写真=右)

 F5キーで実行し、コントローラーでNXTが自在に操作できることを確認してもらいたい。このプログラムをベースに異なる操作系を作ってみるのも面白いだろう。下に別の例も挙げておいたので参考にしてほしい。

今回作成した左右のモーターをそれぞれアナログ出力が可能なトリガーに割り当てた操作系。バックはできないが左右ボタンでバックに切り替え、というのも可能だ

こちらは、上下で前後進、左右で旋回する例だ。VPLは見やすくするために冗長なものになっている。Dataアクティビティの代わりに直接値をセットしてもいい

アクティビティとの接続ではさらに直感的な配置も可能だ。実際の作成手順を追ってみていこう。まず、左下のServicesからXInput ControllerをDiagramにドロップし、通知出力から右の方へドラッグしていく(写真=左)。マウスボタンを離すとアクティビティの選択メニューが表示されるので、そこから「If」を選ぶ(写真=右)

Ifブロックが配置されるとともにConnectionsダイアログが表示される。FromにDPadChanged、ToにConditionを選択(写真=左)。これでサービスとアクティビティが接続された(写真=右)

Ifブロックを選択するとPropertiesにConditions(分岐条件)が表示される。マウスでLeft/Right/Up/Downを選択する(写真=左)。条件はAddボタンをクリックして追加することができる(写真=右)

Ifブロックの結果出力からも同様にドラッグする。今度はDataアクティビティを選択(写真=左)。Dataブロックは即値を保持する。Ifブロックと同様にPropertiesで詳細を設定する。ここではTypeをintに、Data valueは-1/0/1のいずれかをそれぞれの状況にあわせて指定する。この値が各モーターの出力値となる(写真=右)

GenericDifferentialDriveには左右2つのモーターがあるが、受け付ける入力は1つのみ。そのため、2つの値を1つにまとめるJoinを使用する(写真=左)。Joinは入力値それぞれに名前を付けることができる。分かりやすいように左モーターの出力値にはLeft、右モーターにはRightと名付けた(写真=右)

ServicesからGenericDifferentialDriveをドロップしてJoinの出力と接続。最初の例と同様に、SetDrivePowerで左右のモーター出力に入力する。ほかの方向も同様に繰り返していけば完成だ

Copyright © ITmedia, Inc. All Rights Reserved.


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