jointPositionsとinitialJointPositionsの要素数

新しいプロジェクトにDoubleArmV7A.bodyを読み込んで,保存すると,jointPositionsとinitialJointPositionsの要素数は32個になります.しかし,配布されているcnoidファイルでは16個です.なぜでしょうか?

        - 
          id: 2
          name: "DoubleArmV7"
          plugin: Body
          class: BodyItem
          data: 
            modelFile: "${PROJECT_DIR}/share/model/DoubleArmV7/DoubleArmV7A.body"
            currentBaseLink: "TFRAME"
            rootPosition: [ 0, 0, 0.52 ]
            rootAttitude: [ 
              1, 0, 0, 
              0, 6.123234e-17, -1, 
              0, 1, 6.123234e-17 ]
            jointPositions: [ 
               0.000000,  0.000000, -1.221730,  2.617994,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000 ]
            initialRootPosition: [ 0, 0, 0.52 ]
            initialRootAttitude: [ 
              1, 0, 0, 
              0, 2.22044605e-16, -1, 
              0, 1, 2.22044605e-16 ]
            initialJointPositions: [ 
               0.000000,  0.000000, -1.221730,  2.617994,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000,  0.000000, 
               0.000000,  0.000000 ]
            zmp: [ 0, 0, 0 ]
            collisionDetection: true
            selfCollisionDetection: false
            isEditable: true

これについては、プロジェクトを作成した時のChoreonoidのバージョンでは、jointIdの割り振られていない関節(隠し関節)の値を保存していなかったようで、最近のバージョンでは保存するようになったので、そのようになっていると思われます。

DoubleArmV7Aについては、リンクツリービューで確認すると分かるように、全部で32個の関節があるのですが、そのうち16個のみにjointIdがつけられています。

jointIdはどのように付与してもよく、全ての関節に付与する必要もありません。基本的には明示的に動かす関節や、ロボットの姿勢に直接関わるような関節に付与しています。このモデルではエンドエフェクタの閉リンク構造においてアクチュエータはついておらず受動的にのみ動く関節があったり、クローラに附随するホイールがあったりしますが、それらにはjointIdを付与していないため、Choreonoidの旧バージョンではプロジェクトファイルに保存していなかったようです。

しかしそれらの関節も姿勢に関わってくることがあるため、新しいバージョンでは保存するようになりました。

ただしこのモデルに関してはjointIdのない関節は基本的に全て初期関節角を0としていますので、16個のみ書かれたプロジェクトファイルでも、読み込みに置いて特に支障はありません。

リンクツリービューには、35個項目があります。cnoidファイルの内容との対応はどのようになっていますか?

最初の16個はjointIdの順になります。残り(joindIdがついていない関節)は、リンクの定義順に並びます。