シミュレーションの実行と再生¶
シミュレーションの開始¶
シミュレーションを開始するには、 シミュレーションプロジェクトの作成 を行った上で、以下の操作を行います。
対象となるシミュレータアイテムをアイテムツリービュー上で選択する
シミュレーション開始ボタンを押す
1の操作は、シミュレータアイテムがひとつしか存在しない場合は必要ありません。この場合、実行すべきシミュレーションはひとつしかないので、それを特定する操作は必要ないからです。
一方で、プロジェクトは複数のシミュレータアイテムを含むこともできます。これは、シミュレーションアイテムやそのパラメータを複数用意して各々シミュレーションを行い、結果を比較するといった場合に有用です。その場合は、実行するシミュレーションを特定するために、シミュレータアイテムを選択しておく必要があります。
注釈
対象となるシミュレータアイテムの特定については、以下で説明する一時停止や終了の操作についても同様ですので、覚えておいて下さい。いずれにしても、シミュレータアイテムがひとつしか存在しない場合は、気にしなくてOKです。
2の操作については、シミュレーションバーのボタンを用いて行います。通常は以下の「シミュレーション開始ボタン」を用いてシミュレーションを開始します。
このボタンでシミュレーションを開始すると、 初期状態の設定 で登録しておいた初期状態の位置・姿勢からシミュレーションを開始します。
シミュレーションの開始には、以下の「シミュレーション再始動ボタン」を用いることもできます。
この場合、開始ボタンとは異なり、登録されている初期状態ではなく、現在のモデルの状態からシミュレーションが開始されます。
シミュレーションの一時停止¶
以下の一時停止ボタンを押すことにより、実行中のシミュレーションを一時停止することができます。
もう一度このボタンを押すか、前述の「シミュレーション再始動ボタン」を押すと、一時停止していたシミュレーションが再開されます。
シミュレーションの終了¶
以下の「シミュレーション終了ボタン」を押すと、シミュレーションが終了します。
この場合、一時停止とは異なり、シミュレーションに関わる全ての要素(コントローラ等も含む)の終了処理が(可能な限り)行われます。このため、終了した時と完全に同じ状態からの再開はできません。(「シミュレーション再始動ボタン」によって、終了時の位置・姿勢からシミュレーションを開始することはできますが、これは初期位置・姿勢がそうなるというだけで、それ以外の要素は初期化された状態でシミュレーションがやり直されることになります。)
一方で、終了処理によってシミュレーションの実行のために使われていたリソースも解放されますし、初期化された状態からシミュレーションをやり直すことも可能となります。従って、シミュレーションを再開する必要がない場合は、終了の操作を行うようにしてください。
時間範囲の設定¶
シミュレーションを終了するタイミングについて、シミュレータアイテムの「時間範囲」プロパティで設定することができます。以下の項目から選択します。
無制限
終了時間を指定しません。明示的な終了操作が行われるまでシミュレーションを続けます。デフォルトではこの設定になっています。
指定時間
「時間長」プロパティで指定した時間だけシミュレーションを行います。
タイムバー範囲
タイムバーの範囲だけシミュレーションを行います。
※ ここで指定する時間は、シミュレータ内の仮想世界における時間です。
時間範囲の設定が「無制限」以外のときは、対応するタイミングでシミュレーションが自動的に終了します。この場合、明示的な終了操作は必要ありません。もちろん、明示的な終了操作によって、シミュレーションを途中で終了させることも可能です。
時間範囲の設定が「無制限」のときは、明示的な終了操作を行うまでシミュレーションが継続します。
また、これらとは別に「能動制御期間のみ」プロパティも用意されています。これをtrueにすると、コントローラが能動的に制御を行っている期間のみシミュレーションが実行されるようになり、全てのコントローラが制御を終えた時点でシミュレーションが終了します。
実時間との同期¶
一般的に、シミュレーションを行っている仮想世界の時間の進み方は、実世界での進み方とは異なります。仮想世界の時間の進みはシミュレーションの計算時間に依存するもので、実世界より速くなることも遅くなることもあるからです。
そうは言っても、仮想世界の時間の進みを実時間の進みに合わせたい場合があります。その方がシミュレーションの進行状況を把握しやすいというのがひとつの理由です。また、シミュレーションと実世界との間でインタラクションを行う場合にも、その方が適しています。例えば、シミュレーション中のロボットを実世界のオペレータが操作する場合、時間の進みがあっている方が、実際のロボットを操作しているのに近い感覚が得られます。
Choreonoidでは、仮想世界と実世界の時間の進み合わせることを「実時間同期」と呼んでいます。これはシミュレータアイテムの「実時間同期」プロパティで設定することが可能で、以下の項目から選択します。
オフ
実時間との同期を行いません。シミュレーションは計算可能な最大の速度で進行します。
オン(補償型)
実時間との同期を行います。計算の遅れによってシミュレーションの進行が実時間より遅れた場合は、その後の計算を実時間より速く進めることで、遅れをある程度取り戻そうとします。デフォルトではこの設定になっています。
オン(保守的)
実時間との同期を行います。こちらはシミュレーションの進行が実時間より先行しないことを重視した設定で、遅れが生じた場合もそれを取り戻そうとはせず、遅れた時点を基準に改めて同期を行います。
通常はデフォルトの「オン(補償型)」でシミュレーションを行うのが分かりやすくてよいでしょう。
ただし、実時間同期は、計算時間が実時間より早い場合にのみ有効な設定であることに注意して下さい。計算時間が実時間よりも遅い場合は、同期の設定をどちらにしても、シミュレーション時間の進み方は変わりません。遅い計算時間を早くすることは不可能だからです。
逆に計算時間が実時間よりも早い場合には、実時間同期をオフにすることで、シミュレーションの進行を実時間より速くすることも可能となります。シミュレーションにかける時間を短縮したい場合には、そちらの設定を試してみて下さい。
シミュレーション結果の記録と再生¶
シミュレーション結果は、物理計算の1ステップごとの時系列データとして記録することができ、これを結果の再生や解析に用いることができます。記録を行うかどうかは、シミュレータアイテムの「記録モード」プロパティで設定します。デフォルトでは直近の一定期間を記録する「末尾」モードとなっています。
記録した結果は、以下の操作によりアニメーションとして再生することができます。
対象となるシミュレータアイテムをアイテムツリービュー上で選択する
タイムバーを操作する
タイムバーの操作については、再生ボタンを押せば一定の速度でのアニメーション表示ができますし、タイムスライダ等を操作することで、任意の箇所を再生することも可能です。詳しくは 時間軸の操作 を参照してください。
記録モードの詳細や記録される内容、記録結果のファイルへの保存、外部ファイルへ逐次記録するワールドログファイルなど、ログの記録と再生の全体については ログの記録と再生 で解説していますので、そちらを参照してください。
進行中のシミュレーションの表示¶
シミュレーション結果の記録を有効にしている場合、進行中のシミュレーションの表示についても、上記の再生機能を用いて、「記録中のデータの再生」というかたちで行われます。ただし、進行中のシミュレーションと、終了済みのシミュレーション結果とでは、再生に関する挙動で多少異なる点があります。具体的には以下のようになります。
シミュレーション開始時には、再生に関する追加の操作は必要ありません。シミュレータアイテムの選択をあらためて行ったり、タイムバーを操作しなくても、結果表示のアニメーションが開始します。
シミュレーション中は、シミュレータアイテムの選択が外れた場合でも、アニメーションが継続します。これは他のシミュレータアイテムを選択するか、アニメーション停止の操作を行うまで続きます。
シミュレーションバーの「シミュレーション開始ボタン」や「シミュレーション再始動ボタン」を押すことで、進行中のシミュレーションの再生を再開できます。
タイムバーの設定で「進行中の更新に同期」がオンの場合、シミュレーション中は常にその最新の状態を再生します。
なお、アニメーションを停止させても、シミュレーション自体は継続する点に注意してください。4の操作をすることで、継続中のシミュレーションの表示を復活させることができます。通常の操作で再生を復活させる場合、4の設定が関わってきますので、ご注意ください。
注釈
タイムバーの「進行中の更新に同期」がオフの場合、シミュレータ内部のシミュレーションの進行と、その結果を表示するアニメーションの進行は、必ずしも一致しません。その場合、進行中のシミュレーションに対してインタラクティブな操作を行っても、反応がすぐに返ってこない場合がありますので、注意が必要です。これについては、「進行中の更新に同期」をオンにしておけば問題ありません。デフォルトではオンになっています。