
サンプルシミュレーション
========================

Choreonoidでは、シミュレーション機能の概要を把握するにあたって有用な、いくつかのサンプルシミュレーションを用意しています。シミュレーション機能に興味のある方は、まずそちらを試してみてください。

サンプルシミュレーションを実行するためには、対応するプロジェクトファイルを読み込みます。プロジェクトファイルは、".cnoid" の拡張子をもつファイルで、Choreonoidのプロジェクトフォルダに入っています。プロジェクトフォルダの場所は以下のとおりです。

* ソースアーカイブの "share/project"
* インストール先の "share/choreonoid-x.x/project" (Linux, Mac OS Xの場合)
* インストール先の "share/project" (Windowsの場合)

プロジェクトファイルは、メインメニューの「ファイル」-「プロジェクトの読み込み」からダイアログを起動して読み込むことも出来ます。また、Choreonoid起動時にコマンドライン引数として指定して読み込むことも出来ます。後者の機能により、".cnoid"ファイルと choreonoid コマンドの関連付けを行なっておけば、ファイルエクスプローラ等でプロジェクトファイルをダブルクリックするなどして、プロジェクトを呼び出すことも可能です。Windows版インストーラでインストールした場合、この関連付けも自動で行われます。

プロジェクトを読み込んだら、ツールバー上のシミュレーション開始ボタンを押すことで、シミュレーションが始まります。

.. image:: images/simulation_start.png

もしうまく始まらない場合は、アイテムビュー上で "AISTSimulator" か "ODESimulator" のどちらかのアイテムが選択状態になっていることを確認してください。それらの選択状態によって、どのシミュレーションを実行するかを決定する仕組みとなっています。

.. image:: images/simulator_select.png

以下では各サンプルを簡単に紹介します。なお、これらのサンプルは基本的にOpenHRP3のサンプルを移植・改良したものになっています。

.. contents::
   :local:


基本サンプル
------------

モデルのみを扱う基本サンプルとして以下を用意しています。

* FallingBoxes.cnoid : 箱４つを同時に床に落とすシミュレーション
* ClosedLinkSample.cnoid : 閉リンクモデルのシミュレーション

SimpleControllerサンプル
------------------------

ロボットのシミュレーションを行う場合は、通常ロボットの制御プログラム（コントローラ）と接続してシミュレーションを行います。「SimpleControllerプラグイン」はこの接続手法のひとつを提供するプラグインで、これを用いることにより、共有ライブラリ（ダイナミックリンクライブラリ）として実装されたコントローラを、Choreonoidのプロセス上に読み込んで直接接続することが可能です。

このプラグインはChoreonoidのビルド時に **BUILD_SIMPLE_CONTROLLER** を ON にしておくとビルドされるのですが、これはデフォルトで ON になっています。これに加えて **BUILD_SIMPLE_CONTROLLER_SAMPLES** が ON になっていると、以下のサンプルが生成されます（そちらもデフォルトでONになっています）。

* SR1Walk.cnoid : サンプルロボットが歩行するシミュレーション
* SR1Walk2D.cnoid : 上記サンプルの２次元版
* SR1WalkHighGain.cnoid: 上記サンプルのハイゲインモード版
* SR1Liftup.cnoid : サンプルロボットが箱を持ち上げるシミュレーション
* PA10Pickup.cnoid : PA10マニピュレータが箱を移動させるシミュレーション
* SampleCrawler.cnoid: サンプルのクローラ機構モデルのシミュレーション
* SampleCrawlerJoystick.cnoid: サンプルのクローラ機構モデルをジョイスティック操作で動かすシミュレーション。USBのジョイスティック（ゲームパッド）を接続して本サンプルを実行すると、ジョイスティックの最初の２軸でモデルを操作することが出来ます。
* TankJoystick.cnoid: 上記サンプルの発展版。クローラに加えて、戦車の砲台をジョイスティックの3〜4番目の軸で操作することが出来ます。砲身にはカメラがついており、SceneViewのツールバーからこのカメラを選択することで、戦車の視点で操作を行うことが出来ます。また、ジョイスティックの最初のボタンでライトのON/OFFを切り替えることが出来ます。

これらのサンプルで使われているコントローラのソースは、ソースアーカイブの "ext/sample/SimpleControllers" 以下にあります。また、ビルドされたコントローラは、ビルド先（インストール先）の "lib/choreonoid-x.x/simplecontroller" 内に格納されており、そこのファイルをシミュレーション実行時に読み込むようになっています。

OpenRTMサンプル
---------------

OpenRTMプラグインによって、RTミドルウェアのコンポーネントであるRTコンポーネントを用いたシミュレーションが可能となります。これを行うためには、インストールページの解説に従って、OpenRTMプラグインをビルドするようにしてください。
また、 **BUILD_OPENRTM_SAMPLES** をONにしてビルドすることにより、以下のサンプルが生成されます。それぞれ対応するSimpleControllerサンプルのOpenRTM版になります。

* OpenRTM-SR1Walk.cnoid
* OpenRTM-SR1Liftup.cnoid
* OpenRTM-PA10Pickup.cnoid
* OpenRTM-SampleCrawlerJoystick.cnoid
* OpenRTM-TankJoystick.cnoid


OpenHRPサンプル
---------------

OpenHRPプラグインによって、OpenHRP3用に開発されたコントローラと接続してシミュレーションを行うことも可能です。
これを行うためには、インストールページの解説に従って、OpenHRPプラグインをビルドするようにしてください。
また、 **BUILD_OPENHRP_SAMPLES** をONにしてビルドすることにより、以下のサンプルが生成されます。
それぞれ対応するSimpleControllerサンプルのOpenHRP版となります。

* OpenHRP-SR1Walk.cnoid
* OpenHRP-SR1Liftup.cnoid
* OpenHRP-PA10Pickup.cnoid

これらのサンプルは、SimpleControllerのサンプルをOpenHRP3のインタフェースでラップすることにより生成しています。ソースコードは、ソースアーカイブの "ext/sample/OpenHRP" 以下にあります。また、コントローラの実体は、ビルド（インストール）先の bin 以下に生成される "openhrp3.1-sr1-ewalk-controller" といった実行ファイルになります。これがシミュレーション実行時に外部プロセスとして起動され、シミュレータとの間でCORBAによるプロセス間通信を行うようになっています。プロセス間通信のオーバーヘッドにより、SimpleControllerの同じサンプルと比べると、シミュレーションの実行速度は遅くなります。

なお、これらのサンプルは、OpenHRP3の素のIDLインタフェースに基づくものですが、OpenHRP3では実際にはRTコンポーネント形式のコントローラを使うことが想定されています。これは「コントローラブリッジ」と呼ばれるプログラムを用いてOpenHRP3の素のインタフェースとRTコンポーネントのインタフェースを接続することで実現されていました。Choreonoidでは上記のOpenRTMプラグインによりこのようなブリッジは必要なくなりました。RTコンポーネントを用いる場合はOpenRTMプラグインを有効にしてコンポーネントを直接接続するようにしてください。


スプリングモデルサンプル
------------------------

ChoreonoidのシミュレーションではOpenHRP3と同様に、BodyCustomizerという仕組みを用いることで、バネダンパ等の機構をシミュレーションすることも可能です。また、コントローラを用いて同様のシミュレーションを行うこともできます。 **BUILD_SPRING_MODEL_SAMPLE** をONにしてビルドすると、それらのサンプルとして以下が生成されます。

* CustomizedSpringModel.cnoid: BodyCustomizer によるスプリングのシミュレーション
* ControlledSpringModel.cnoid: コントローラを用いたスプリングのシミュレーション
