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

» 2008年12月15日 10時00分 公開
[PR/ITmedia]
PR
前のページへ 1|2|3|4       

ロボット制御の強力な裏方、CCRとDSS

 ロボットの挙動は基本的に非同期処理、つまり、ある処理の終了を待たずにほかの処理を開始できることが前提となる。本来の予定された行動に加え、突発的なセンサからの入力にも対応しなくてはならない。例えば、自動車を考えてみよう。ウインカーの点滅、ワイパーの動作、アクセル操作・ブレーキ操作、これらはすべて即時に対応されなくてはならないうえに、継続して行われる処理でもある。

 これをプログラムで表現するのは大変そうに思えるが、VPLでは非常に簡単に表現できる。ウインカーレバーが操作されたらウインカーを点滅させる、ワイパーがオンになったらワイパーを動かす、というように、単純にサービスとサービスの繋がりだけを表現すればよい。

 下の画面はXbox 360コントローラのデジタルパッドでロボットを操作するプログラムの一例だが、Xbox 360コントローラを表すXInputController、車輪を表すGenericDifferentialDriveが5回ずつ使われている。しかし、これらはデバイスとしては同じものだ。冗長ではあるが、前進のときは前進のことだけ、右旋回のときは右旋回のことだけを考えてプログラミングすればいいということが分かるだろう。実際に各サービスを並列で協調させながらプログラムを実行させるのはCCR(Concurrent and Coordination Runtime:並列協調ランタイム)と呼ばれるランタイム環境が行うため、ユーザーは特に意識する必要はない。

 各サービスはCCRの上に構築されたDSS(Decentralized Software Service:分散ソフトウェアサービス)上で動作する。DSSはHTTPやTCPを使ってサービスと通信を行い、非常に粒度の大きい、緩い結合で分散ソフトウェアを実現している。そのため、各サービスがどこで実行されているかを意識することなくプログラミングできるのだ。

 NXTの場合、DSSノードはWindows側で実行されており、NXT側はBluetoothやUSB経由で各センサやデバイスの状態を送り、制御コマンドを受け取る。これこそが、RDSが汎用的であり、かつマニフェストの変更だけでさまざまなロボットに対応できる秘密でもある。

 このほか、ロボットの頭脳部分に高性能なPCを使用することができるというメリットもあるだろう。例えば、ロボットに取り付けたカメラでリアルタイムに画像解析を行い、状況を判断して自律的に動作する、といった動作が考えられる。この際、ロボットとカメラは直接は通信しないので、「カメラに接続することができるロボット」である必要はないわけだ。

完全に独立したフローが5つ(上下左右+何も押されていない)並んでいる。複数のサービスが1つのデバイスに割り当てられているが、その排他制御などはユーザーは意識しなくてもよい(写真=左)。XInputControllerサービスを1つにまとめた例。パッドの同時押しを除くとほぼ同じ動作になる。GenericDifferentialDriveが複数あるのは各サービスが入力を1つしか受け付けないため。JoinアクティビティやMergeアクティビティを利用すれば複数の入力をまとめることができるが、ここでは省略している(写真=中央)。サービス名横のiマークをクリックするとオンラインヘルプが参照できる。URLの中の「ja-jp」を「en-us」に変えると目次も利用できるようになる(写真=右)

C#を使ったプログラミング

 C#などのプログラム言語に慣れている人は「ビジュアルプログラミングなんて邪道だ。自分でガシガシ書きたい」と思う人もいるだろう。また、「VPLで実現できることには限界がある」と、お遊びの域を出ないのではないかと懸念している人もいるかもしれない。

 RDSではVPLを使わずに、無償のVisualStudio2008 ExpressEditionを使ってC#でプログラミングすることもできる。さらにオリジナルのサービスを作成することさえ可能だ。作成したサービスはVPLからも利用できるため、「ガシガシ書いて簡単に利用する」といった使い方も簡単にできる。有償のMicrosoft Robotics Studio 2008 Standard Editionを使えばVPLで作成したプログラムをC#で出力できるようになるのもポイントだ。



新たなる世界へ

 さて、ここまでRDSとNXTについて一通り見てきたわけだが、これはあくまで基本中の基本でしかない。楽しくなってくるのは知恵をこらし、いろんなものを組み合わせて、時には手抜きに頭をひねり、時には遠回りをしながら目的に到達する、その過程だ。

 例えば、C#でマウスの位置検出を行うサービスを追加してみる。そして、NXT自身にマウスを取り付けたらどうなるだろうか。NXTが前進するとマウスカーソルが移動することになるため、NXTの位置をマウスカーソルで知ることができるわけだ。

 もちろん、このアイデアをそのまま活用するためにはそれなりの準備が必要になる。NXTの方向に関わらず、マウスの前後が常に保持されなければ前後以外の方向検出ができない。それに対応するために、ハードウェアを改造するのもよし、ほかの活用方法を探す――NXTの前方にマウスを取り付け、NXTを前進させてもマウスカーソルが移動しない場合はテーブルから落ちそうになっていると判断して停止、あるいは反転させるといったこともできるだろう。

 こういったPCの周辺機器との連携ができるのもRDSならではの楽しみ方だ。特に最近はワイヤレス機器も増えているし、100円ショップに行けばなにやら使えそうなものもいろいろある。純正パーツとして、ほかに加速度センサやカラーセンサ、電子コンパスもあるが、工夫次第では基本パーツのセンサだけでも代替可能だ。ロボット製作の場合、同じ問題を解決するにしてもハードウェアとソフトウェアの両方からアプローチできる。ロボットに興味はあるものの、自分はハードが苦手だから、あるいはソフトが苦手だから、とこれまで敬遠していた人たちにとって、マイクロソフトの「Microsoft Robotics Developer Studio 2008」は福音となるはずだ。

前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.


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