コレオノイドでは、シミュレーション機能の概要を把握するにあたって有用な、いくつかのサンプルシミュレーションを用意しています。シミュレーション機能に興味のある方は、まずそちらを試してみてください。
サンプルシミュレーションを実行するためには、対応するプロジェクトファイルを読み込みます。プロジェクトファイルは、”.cnoid” の拡張子をもつファイルで、コレオノイドのプロジェクトフォルダに入っています。プロジェクトフォルダの場所は以下のとおりです。
プロジェクトファイルは、メインメニューの「ファイル」-「プロジェクトの読み込み」からダイアログを起動して読み込むことも出来ます。また、コレオノイド起動時にコマンドライン引数として指定して読み込むことも出来ます。後者の機能により、”.cnoid”ファイルと choreonoid コマンドの関連付けを行なっておけば、ファイルエクスプローラ等でプロジェクトファイルをダブルクリックするなどして、プロジェクトを呼び出すことも可能です。Windows版インストーラでインストールした場合、この関連付けも自動で行われます。
プロジェクトを読み込んだら、ツールバー上のシミュレーション開始ボタンを押すことで、シミュレーションが始まります。もしうまく始まらない場合は、アイテムビュー上で “AISTSimulator” か “ODESimulator” のどちらかのアイテムが選択状態になっていることを確認してください。それらの選択状態によって、どのシミュレーションを実行するかを決定する仕組みとなっています。
以下では各サンプルを簡単に紹介します。なお、これらのサンプルは基本的にOpenHRP3のサンプルを移植・改良したものになっています。
モデルのみを扱う基本サンプルとして以下を用意しています。
ロボットのシミュレーションを行う場合は、通常ロボットの制御プログラム(コントローラ)と接続してシミュレーションを行います。「SimpleControllerプラグイン」はこの接続手法のひとつを提供するプラグインで、これを用いることにより、共有ライブラリ(ダイナミックリンクライブラリ)として実装されたコントローラを、コレオノイドのプロセス上に読み込んで直接接続することが可能です。
このプラグインはコレオノイドのビルド時に BUILD_SIMPLE_CONTROLLER を ON にしておくとビルドされるのですが、これはデフォルトで ON になっています。これに加えて BUILD_SIMPLE_CONTROLLER_SAMPLES が ON になっていると、以下のサンプルが生成されます(そちらもデフォルトでONになっています)。
これらのサンプルで使われているコントローラのソースは、ソースアーカイブの “ext/sample/SimpleControllers” 以下にあります。また、ビルドされたコントローラは、ビルド先(インストール先)の “lib/choreonoid-x.x/simplecontroller” 内に格納されており、そこのファイルをシミュレーション実行時に読み込むようになっています。
OpenHRPプラグインによって、OpenHRP3用に開発されたコントローラと接続してシミュレーションを行うことも可能です。 これを行うためには、インストールページの解説に従って、OpenHRPプラグインをビルドするようにしてください。 また、 BUILD_OPENHRP_SAMPLES をONにしてビルドすることにより、以下のサンプルが生成されます。
これらのサンプルは、SimpleControllerのサンプルをOpenHRP3のインタフェースでラップすることにより生成しています。ソースコードは、ソースアーカイブの “ext/sample/OpenHRP” 以下にあります。また、コントローラの実体は、ビルド(インストール)先の bin 以下に生成される “openhrp3.1-sr1-ewalk-controller” といった実行ファイルになります。これがシミュレーション実行時に外部プロセスとして起動され、シミュレータとの間でCORBAによるプロセス間通信を行うようになっています。プロセス間通信のオーバーヘッドにより、SimpleControllerの同じサンプルと比べると、シミュレーションの実行速度は遅くなります。
ノート
開発者のUbuntu 12.04環境では、OpenHRP版のシミュレーションサンプルがSimpleController版と比べて異様に遅くなる (SR1Walkで10倍以上) 現象が発生しています。LinuxカーネルやUbuntuのネットワーク関連機能、もしくはomniORBのどこかで、環境によって発生する不具合があるのではないかと疑っていますが、まだ解決出来ていません。他の環境ではそこまで遅くならない (SR1Walkで1.5〜2倍程度)ことも確認していますので、そのような症状が発生したら、コレオノイド以外の不具合である可能性が高いです。
なお、これらのサンプルは、OpenHRP3の素のIDLインタフェースに基づくものですが、OpenHRP3では実際にはRTコンポーネント形式のコントローラを使うことが想定されています。これは「コントローラブリッジ」と呼ばれるプログラムを用いてOpenHRP3の素のインタフェースとRTコンポーネントのインタフェースを接続することで実現されています。コレオノイドとOpenHRPプラグインの組み合わせにおいても、この「コントローラブリッジ」を用いることにより、RTコンポーネントによるコントローラを同様に用いることが可能です。
だたし、今のところはコントローラブリッジの機能はコレオノイドにはバンドルしていません。ですので、これを行うためには、OpenHRP3のインストールを行なって、そのコントローラブリッジを使う必要があります。
これについては、コントローラブリッジを提供するよりは、むしろ直接RTコンポーネントのインタフェースと接続可能なコントローラインタフェースを実現することが望ましいと考えています。今後OpenRTMプラグインにそのような機能を実装していければと考えています。
コレオノイドのシミュレーションではOpenHRP3と同様に、BodyCustomizerという仕組みを用いることで、バネダンパ等の機構をシミュレーションすることも可能です。 BUILD_SPRING_MODEL_SAMPLE をONにしてビルドすると、このサンプルが生成され、プロジェクトファイル “SpringModel.cnoid” で読み込むことができます。
本サンプルのソースは “ext/sample/SpirngModel” にあります。ソースの”SpringModelCustomizer.cpp” がBodyCustomizerとなっており、モデルの並進関節に関節位置に応じた適当なバネダンパ力を与えています。これをコンパイルしたバイナリが “lib/choreonoid-x.x/customizer” 以下に生成され、モデル読み込み時に組み込まれることになります。