Blenderで作成したモデルの取り込み方法

初めてメールを差し上げるご無礼をお許しください。
以前よりchoreonoidに興味を持ち、ホームページのマニュアルに従ってビルドにも成功してきました。
しかし自作のロボットモデルの取り込み方法が今ひとつわからないでおりました。
バージョンが1.6になり、Blenderで作成したモデルの取り込み方法が紹介されていて狂喜しました。
普段からCGに興味を持ち、Blenderは一応使い慣れていますので、Tankの作成も30分もかからずに出来ました。
「Bodyファイルチュートリアル」により、YAMLによるSimpleTankモデルもとりあえず作ることに成功しました。
ところが「外部メッシュファイルの利用方法」でつまづいております。
このようなファイルが示されてますが、最後の type: Collision elements:以下のtranslationやgeometryの数値はどうやって出てきたのでしょうか?
私イラストレーターで、ロボットに関してはほとんど素人です。
ですから、もしかしたらおかしな質問なのかもしれません。
拝見したところ、皆さんかなりのレベルの方々なのでここら辺は自明の理になっているように感じました。
Colladaファイルを何らかの方法で自動的に読み取ってくれたのかとも思いましたが、実際どうなのでしょうか?
実際のTankのBodyファイルもテキストにして調べましたが、私には解明出来ませんでした。
お教え頂けましたら幸いです。
何卒よろしくお願い致します。

青山 邦彦

links:

name: CHASSIS
translation: [ 0, 0, 0.1 ]
jointType: free
centerOfMass: [ 0, 0, 0 ]
mass: 8.0
inertia: [
  0.1, 0,   0,
  0,   0.1, 0,
  0,   0,   0.5 ]
elements:
  -
    type: Visual
    resource:
      uri: "resource/tank3.dae"
      node: CHASSIS
  -
    type: Collision
    elements:
      -
        type: Shape
        translation: [ 0.0, 0.0, 0.0 ]
        geometry: { type: Box, size: [ 0.375, 0.3, 0.1 ] }
      -
        type: Shape
        translation: [ 0.20625, 0.0, 0.0 ]
        geometry: { type: Box, size: [ 0.0375, 0.3, 0.08 ] }
      -
        type: Shape
        translation: [ 0.205, 0.0, 0.04 ]
        rotation: [ 0, 1, 0, 15 ]
        geometry: { type: Box, size: [ 0.03881, 0.3, 0.01 ] }
      -
        type: Shape
        translation: [ 0.205, 0.0, -0.04 ]
        rotation: [ 0, 1, 0, -15 ]
       geometry: { type: Box, size: [ 0.03881, 0.3, 0.01 ] }
     -
       type: Shape
       translation: [ -0.20625, 0.0, 0.0 ]
       geometry: { type: Box, size: [ 0.0375, 0.3, 0.08 ] }
     -
       type: Shape
       translation: [ -0.205, 0.0, 0.04 ]
       rotation: [ 0, 1, 0, -15 ]
       geometry: { type: Box, size: [ 0.03881, 0.3, 0.01 ] }
     -
       type: Shape
       translation: [ -0.205, 0.0, -0.04 ]
       rotation: [ 0, 1, 0, 15 ]
       geometry: { type: Box, size: [ 0.03881, 0.3, 0.01 ] }

この部分は「干渉チェック用モデル」と呼ばれる部分の情報になります。

「干渉チェック用モデル」については確かにマニュアルでまだちゃんと説明できていませんでしたので、他のシステムなどでこの概念に慣れていない方には分かりづらかったと思います。

Blenderなどで作成したメッシュモデルがあれば、大抵の場合はシミュレーションも可能です。ただしその場合は物体同士が接触(衝突、干渉)しているかどうかのチェックを、ポリゴンメッシュ(通常は三角形メッシュ)のデータに対して行うことになります。この処理は一般的には処理時間的に重たい処理となります。モデル(メッシュ)が複雑になってくるとその分処理時間も増えます。

CGに興味をお持ちとのことなのでご存知だとは思いますが、形状を表現する手法としては、メッシュの他に「プリミティブ」と呼ばれるものがあります。球や直方体、シリンダ、三角錐(コーン)、カプセル形状(シリンダ+球2つ)などの単純な形状で表現する方法です。プリミティブだと単純な形状しか表現できませんが、組み合わせることである程度複雑な形状も表現(近似)できます。

プリミティブは形状が比較的単純な数式で表現できますので、干渉検出の処理もメッシュと比べると大幅に軽くすることができます。また、メッシュと比べて衝突の方向や深さなどについても算出しやすく、正確な干渉情報を出力しやすいというメリットもあります。そのような特徴から、シミュレーションの速度や安定性について、メッシュをそのまま用いる場合と比べて、向上させることができます。ただし複雑な形状を全て表現できるわけではないので、形状によっては多数のプリミティブを組み合わせた上である程度の誤差には目をつぶるということにもなります。またこのようなプリミティブの組み合わせをマニュアルでモデリングするというのも大変手間のかかる作業になります。現状では任意の形状に対してそれにマッチした複数のプリミティブを自動的に組み合わせるようなことは技術的に難しいところがあります。

サンプルのTankモデルでは、参考になるように、プリミティブによる干渉チェック用モデルも含めています。長くなってしまいましが、type: Collision 以下の記述はそれに対応する部分です。

そしてご質問の「数値はどうやって出てきたのでしょうか?」については、「このモデルの作成者が、元のメッシュ形状にあうように、自分で(プリミティブの組み合わせとそのサイズや配置の)数値を決めていった」ということになります。

このようなことは一般的にはGUI上でモデルを直接マウスで動かしたりしながらできるとよいのですが、現状のChoreonoidにはそのような機能はありません。実際のところ、このモデルはテキストエディタ上でテキストを編集するかたちでこのような数値についても決定しています。ただし編集時にChoreonoidも起動してそこにモデルを読み込んでおき、Ctrl + Rによる「モデルの再読込」の機能を併用することで、テキストエディタ上で少し数値を入れてはそれの実際の位置をグラフィックで確認する、といった作業を行っています。

この再読込の活用については、マニュアルの以下の節で説明してます。

https://choreonoid.org/ja/manuals/latest/handling-models/modelfile/modelfile-newformat.html#id9

実際のところ、モデリングにおいて最終的には(マウスによるドラッグではなく)数値入力によって位置を確定することが多く、その入力箇所がモデラではなくテキストエディタになったと考えていただければOKです。テキストエディタで入力して保存し、その後Choreonoid上で再読込を行うと、その数値の位置がすぐにグラフィックでも反映されるので、なれるとこれでも案外モデリングを進めることが可能です。Choreonoidには他にも干渉用モデルの入ったサンプルモデルがいくつも入っていますが、全てこの方法でモデルを作成しました。

ただもちろんこのような方法でしかモデリングできないのはあまり褒められたものではなく、GUI上で干渉チェック用のモデルなども直接編集できる機能も備えているべきだとは思います。そのあたりは今後株式会社コレオノイドで開発するかもしれません。

中岡様

丁寧なご返信を頂きましてありがとうございました
干渉チェック用モデルについてはまだ未勉強でした。
改めて確認させて頂きます。
やはりテキストエディタと「Ctrl + R」で画面での確認の繰り返しに慣れるのが近道だったんですね。
Tankをテキストエディタで作る方法は試しましたが、確かにそれをやっている最中はその方法に馴染んできました。
とりあえずそれで自分の思うような形を作れるように練習してみます。
プリミティブによるモデリングはBlenderでは経験したことはありませんが、Fusion360ではやったことがあります。
Fusion360によるモデリング例もぜひ取り上げて頂きたいと思います。
ありがとうございました。

青山