ボディ同期カメラ

ボディ同期カメラは、ロボットをはじめとするボディモデルの動きに同期して動くカメラです。シーンビューの描画にこのカメラを選択しておくと、ボディモデルが移動する際に、ボディとの相対位置関係が保たれるようにカメラも移動します。これは カメラアイテム を拡張したもので、カメラアイテムの機能に加えて、ボディモデルと同期する機能を備えたものとなっています。

この仕組みにより、ボディ同期カメラは主に以下の2通りの使い方ができます。

  • ロボットを追跡するカメラ

ロボットの後方や斜め上等、ロボットを外から見る位置に視点を置くと、移動するロボットを追いかけながら撮影するカメラとなります。ロボットが移動しても、シーンビュー上で見失うことなくその動作を観察し続けることができます。

  • ロボットに搭載されたカメラ

ロボット本体のある箇所に視点を配置すると、そこにカメラが装着されているかのような、ロボットから外を見る視点を得るカメラとなります。

どちらの使い方においてもカメラの動作原理は同じで、視点の配置や設定の仕方が異なるだけです。(ただし、後述する「平行トラッキング」を有効にした場合は、カメラの姿勢(向き)は同期しなくなるので、その場合はどちらかというと追跡用のカメラとなります。)

このカメラが特に活躍するのは、後の シミュレーション機能 の章で解説するシミュレーション機能と組み合わせて使う場面です。シミュレーションでロボットが移動していく際に、このカメラを使うことで、ロボットを見失うことなくその動作を観察したり、ロボット視点の画像を見たりすることができます。ただし同期の対象となるのはボディモデルの位置の変化そのものですので、シミュレーションに限らず、本章で説明した姿勢・位置の編集操作や、タイムバーによる動作の再生等でボディの位置が変化する場合にも、同じように利用できます。

本節ではこのカメラの使い方を説明します。シミュレーション機能についてまだご存知でなくても、読み進められる内容となっています。

ボディ同期カメラアイテムの作成

ボディ同期カメラは「ボディ同期カメラアイテム」としてプロジェクトに導入します。メインメニューの「ファイル」-「新規」-「ボディ同期カメラ」を選択してアイテムを生成し、同期させたいボディアイテムの子アイテムとして配置します。アイテムには他のカメラと区別できるように名前をつけておくとよいでしょう。また、アイテムにはチェックを入れておきます。

以下に、サンプルプロジェクト "SR1Walk.cnoid" にボディ同期カメラを導入する際の、アイテムツリービューの状態を示します。このプロジェクトは サンプルプロジェクト のひとつで、シミュレーションを開始すると二足歩行ロボットSR1が歩行するものです。(シミュレーションの実行方法については シミュレーション機能 の章で解説します。)

../_images/body_sync_camera_item_tree_view.png

ここではSR1ロボットの動きに同期させようとしているので、SR1のボディアイテムの子アイテムとしてカメラアイテムを配置しています。対象となるボディアイテムの子アイテムになっていないとボディの動きに同期しませんので、ご注意ください。

ボディ同期カメラの選択

ボディ同期カメラアイテムにチェックを入れると、シーンバーの「描画用カメラ選択コンボ」にアイテムに対応するカメラが表示されるようになりますので、これを選択します。シーンビューで使用するカメラの選択については、 描画用カメラの変更 を参照してください。

以下はSR1Walkプロジェクトでのカメラ選択の例です。

../_images/body_sync_camera_selection.png

この状態でもマウス操作による視点の変更は可能ですので、見やすい視点に調整しておきます。

カメラの同期

対象となるボディが動くと、カメラもそれに連動して動きます。正確には、ボディのルートリンクとカメラとの相対位置関係が保たれるように、カメラの位置・姿勢が更新されます。

同期の対象となるのはボディモデルの位置の変化であり、位置が変化する原因は問いません。ですので、シミュレーション機能をまだ利用していない段階でも、このカメラの動作を確認することは可能です。例えば 位置・姿勢の変更 で説明した操作で、シーンビュー上でSR1のモデルの位置を動かしてみてください。ボディの移動に合わせてカメラも動き、シーンビュー上でのロボットの見え方が保たれることが確認できるかと思います。タイムバーによる動作の再生等でボディの位置が変化する場合も同様です。

そしてこのカメラが最も活躍するのは、冒頭でも述べたようにシミュレーションと組み合わせたときです。SR1Walkのプロジェクトでは、シミュレーションを開始するとSR1ロボットが歩行しますが、その際にボディ同期カメラを選択しておくと、歩いていくロボットにカメラが追従し、ロボットを見失うことなく動作を観察し続けることができます。 シミュレーション機能 の章を読んでシミュレーションの実行方法を確認した後に、ぜひ試してみてください。

コンテキストメニュー

アイテムツリービュー上でボディ同期カメラアイテムを右クリックすると表示されるコンテキストメニューでは、以下の3つの項目が先頭に表示されます。

  • このカメラを使用

  • 組み込みカメラに適用

  • カメラの設定

これらは カメラアイテム と共通の機能で、各項目の内容についてはそちらの説明を参照してください。ただし「カメラの設定」で表示されるダイアログには、ボディ同期カメラ用の項目が追加されています。これについては次節で説明します。

カメラの設定

コンテキストメニューの「カメラの設定」を選択すると、以下に示すカメラ設定用のダイアログが表示されます。

../_images/body_sync_camera_conf_dialog.png

このダイアログの基本的な設定項目(名前、組み込みカメラに合わせる、カメラタイプ、位置、視線方向、上方向、視野角、近方クリップ、遠方クリップ、インタラクティブな視点変更、シーンビューで有効化)は、 カメラアイテム の設定ダイアログと共通です。ボディ同期カメラでは、これらに加えて以下の項目が追加されています。

設定項目

意味

ターゲット原点に設定

このボタンを押すと、カメラの位置をターゲット(対象ボディ/リンク)の原点位置に設定します。

座標系

このダイアログで設定するカメラ位置・姿勢の座標系を、グローバル座標とするか、ターゲットからのローカル座標とするか選択します。

平行トラッキング

このチェックを入れると、カメラの姿勢(向き)は変化させずに、カメラの位置だけをターゲットに同期させるようにします。

ボディ同期カメラアイテムのプロパティ

ボディ同期カメラアイテムを選択状態にすると、プロパティビューでも設定を行うことができます。カメラタイプや視野角等の基本的なプロパティは カメラアイテム と共通で、ボディ同期カメラでは以下のプロパティが追加されています。

プロパティ

意味

対象リンク

同期の対象とするリンクの名前です。リンク名を指定することで、対象ボディのルートリンク以外のリンクを同期の対象とすることができます。

平行トラッキング

trueにすると、カメラの姿勢(向き)は変化させずに、カメラの位置だけをターゲットに同期させるようにします。

ロボット搭載カメラとしての利用

冒頭で述べたように、ボディ同期カメラは、あたかもロボットにカメラが装着されているかのような「ロボット搭載カメラ」としても利用できます。カメラの動作原理は追跡用のカメラの場合と同じで、カメラとボディの相対位置関係を、「ロボットの外からロボットを見る」配置ではなく、「ロボット本体に装着したカメラから外を見る」配置に設定するだけです。

具体的には、これまでに説明した使い方に加えて、以下のような設定を行います。

  • 「対象リンク」プロパティに、カメラを装着したいリンクの名前を指定します。何も指定しない場合はルートリンクが対象となります。例えばSR1モデルであれば、胸部のリンク "CHEST" を指定すると、上体の動きに同期するカメラとなります。

  • カメラの設定ダイアログで「座標系」を「ローカル」にし、対象リンクから見たカメラの位置・視線方向・上方向を設定します。まず「ターゲット原点に設定」ボタンでカメラを対象リンクの原点に移動させ、そこから位置等を調整していくと設定しやすいです。

  • 「平行トラッキング」はオフ(デフォルト)にしておきます。オンにするとカメラの姿勢が同期しなくなるため、ロボットの向きが変わってもカメラが回転せず、搭載カメラらしい動きになりません。

  • 搭載位置からの視点を固定しておきたい場合は、「インタラクティブな視点変更」をオフにしておきます。これによって、シーンビュー上のマウス操作で視点がずれてしまうことを防げます。

この状態でボディ同期カメラをシーンビューの描画用カメラとして選択すると、ロボットの動きに合わせて動く、ロボット視点の画像が得られます。

注釈

ここで実現されるのはあくまでシーンビューの描画用の視点であり、ロボットのモデルにデバイスとして定義するカメラ(視覚センサ)とは別のものです。センサとしてのカメラをシミュレートして画像データを取得する方法については、 視覚センサのシミュレーション の章で解説します。