連載
» 2007年05月11日 00時00分 公開

シミュレータでロボットをグリグリ動かす!解説! ロボット開発環境Robotics Studio(4)(2/2 ページ)

[大川 善邦 工学博士 日本大学工学部非常勤講師/大阪大学名誉教授,@IT MONOist]
前のページへ 1|2       

ロボットの制御

 続いて、Dashboardを使って、シミュレーション画面上のロボットを動かしてみましょう!ちなみに、画面4に示すように、2つの画面を横並びに配置すると操作しやすいと思います。


ウィンドウの配置 画面4 ウィンドウの配置

 Dashboardの画面を見てみましょう。画面左上、Direct Input Deviceの「Device:」に

Controller (XBOX 360 For Windows) 

と記述してあります。デフォルトでは、「Device:」のテキストボックス以外は空欄になっています(Xboxのコントローラーを使用していない場合は、「Device:」も空欄です)。

 それでは、DashboardとSimulationTutorial2を接続(メッセージを交換できるように)します。

 Dashboard画面の右側にRemote Nodeの囲みがあります。その最上部、「Machine:」にノードのURL、“localhost”と記入して、[Connect]ボタンをクリックします。

 Dashboardが、画面5のように変化します。

接続後のDashboardの画面 画面5 接続後のDashboardの画面

 「Machine:」のテキストボックスが「fineday」と書き換えられています。ここには、ユーザーが使用しているPCの「コンピュータ名」が入ります。

 さらに、画面右中段には3行テキストが書き込まれています。これは、シミュレーションで使用するEntityの名称です。画面5の例で説明すると、一番上の行は、シミュレーション画面上の「テーブル」を指します。下の2行は、2機の「移動ロボット」を指しますが、文字列だけではどちらの行がどちらのロボットを指すのか分かりません。

 下の2行のいずれか一方をダブルクリックしてください。

 Dashboardの画面左中央部、「Differential Drive」の表示が

Motor: Off

 ↓

Motor: On

に変われば、Xboxのコントローラー(マウス)とロボットのモーターが接続されたことになります。画面5は、ダブルクリック前の画面なので、「Motor: Off」になっていますが、Entityの文字列をダブルクリックすると、これが「Motor: On」に変ります。

 次に、その上部にある[Drive]ボタンをクリックします。これで、Xboxのコントローラーとシミュレーションが接続されます。

 それでは、Xboxのコントローラーのメインボタンを押してみてください。シミュレータ上のどちらかのロボットが走行するはずです。

 ロボットを切り替える際は、画面右中段の別の文字列(下2行のどちらか)をダブルクリックします(画面5の場合)。「Motor: On」を確認して、コントローラーを操作すると別のロボットが動きます。終了する場合は、Dashboardの[Stop]ボタンをクリックします。

マウス操作用のアイコン マウス操作用のアイコン

 Xboxのコントローラーがない場合は、Dashboardの画面左上部にあるアイコンをマウスでドラッグすれば、ロボットを動かすことができます。


シミュレーションと時間の関係

 ここでは、アニメとゲームを例に“シミュレーションにおける「時間」の役割”について説明します。

 例えば、アニメの場合、1枚の画面を作るのに1時間かかったとしても見ている側にとっては何の問題もありません。なぜならアニメの放映時間には、決められた画像が映像となって放送されるからです(画面を編集して、1秒当たり20枚程度のスピードで画面を流せば、アニメが出来上がります)。アニメの場合、作業工程でどれだけ時間がかかったとしても問題がない(放送日までにできれば)、つまりアニメはリアルタイムである必要がないのです。

 次に、ゲームの場合はどうでしょう。アクション系のゲームの場合、ユーザーの操作によって画面の流れが変化します。アニメのようにあらかじめ画面を用意して、決まったシーケンスで流すことは不可能です(もし、1秒当たり20枚程度の画面を流すのであれば、1枚の画面は50ミリ秒以内に仕上げる必要があります)。つまり、ゲームにはリアルタイム性が必要といえます。

 それでは、VSEのシミュレーションはどうでしょう。先ほどは、VSE上のロボットをXboxのコントローラーで動かしました。スティックを前に倒せば「前進」、後ろへ倒せば「後退」します。そうです、先ほど例に挙げた“ゲームに近いイメージである”と考えることができます。つまり、VSEのシミュレーションの場合、ゲームと同様に(アニメとは異なり)“リアルタイム性”が必要だということが分かります。

なぜPhysXなのか?

 リアルタイム性が必要なVSEによるシミュレーションでは、とても重要な課題が2つあります。

 1つ目は、人間や動物のように複数の関節からなるEntity(ロボット)の運動計算です。これは、かなり専門的なテーマなので(物理学会などでは、マルチボディ問題という)、ここでの説明は省略します(注)。

※注:
興味がある方は、拙著「3Dゲームプログラマーのための数学」などを参考にしてください。ニュートン力学の計算が必要です。


 2つ目は、Entity間の衝突検知です。例えば、「2台のロボットがぶつかる」などの状況において、“ロボットの「どこ」と「どこ」がぶつかったのか”を計算して、その作用の結果を計算します。

 シミュレーションで、これらの計算をまともに行うことは不可能に近いでしょう。何らかの形で、近似計算を行うしかありません。そのため、MSRSでは、近似値計算が可能な物理演算処理プロセッサPhysXを推奨しているのです。

本当に物理計算しているの?

 「VSEってそんなにすごいの?」「本当に物理計算をしているの?」と疑問を持たれる方もいるでしょう。本連載で、VSEの処理内容を解析して説明できれば一番なのですが、さすがにそうもいきません。そこで、VSEの画面から「目」で確認できるポイントについていくつか紹介します。

 画面2のシミュレーション画面が開く瞬間に注意してください。「テーブル」のEntityが、空中の高いところから地面へ落下するのが分かります(テーブルの初期位置を空中に設定してあるので重力によって落下する)。そして、地面に落下した後もガタガタと左右に揺れていることも確認できます。

 また、VSEのSimulationTutorial2において、Xboxのコントローラーを操作して、Pioneer 3DX(大きいロボット)をNXT(小さいロボット)へぶつけ、さらに無理やり前進してみました。その結果が、画面6です。

NXTへ乗り上げたPioneer3DX 画面6 NXTへ乗り上げたPioneer3DX

 ご覧のとおり、NXTはPioneer 3DXの下敷きになってしまいました(注)。


※注:
VSEのEntityは、力学でいうところの「剛体」に当るので、下敷きになってもロボットがつぶれたり、変形することはありません。


NXTがPioneer 3DXにぶつかる様子動画2 NXTがPioneer 3DXにぶつかる様子

 これらの画面が「物理計算の証拠」とはいい切れませんが、物理計算がなければこのような状態(動き)は実現できない、と感じてもらえるのではないでしょうか?



 本連載は今回で最終回を迎えます。連載を通じて、マイクロソフトのRobotics Studioの概要について解説してきました。いかがでしたでしょうか? ロボット開発に興味を持っていただけましたでしょうか? 本連載が、ロボット業界の盛り上がりと市場拡大のきっかけになってくれたらと心から願います。また、執筆の機会があれば、もう少し掘り下げた技術を紹介していきたいと思います。(連載完)


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.