jsk-ros-pkg / jsk_model_tools

JSK model utilities
https://github.com/jsk-ros-pkg/jsk_model_tools
BSD 3-Clause "New" or "Revised" License
5 stars 27 forks source link

enable to read custom limb name from .yaml file #249

Closed k-okada closed 1 year ago

k-okada commented 1 year ago

this is another imlimentation for supporting non-default limbs, https://github.com/jsk-ros-pkg/jsk_model_tools/pull/232

if the limb name is other than head,torso,larm,rarm,lleg,rleg, we set limb name to robot models. So this does not require newer EusLisp/jskeus.

Naoki-Hiraoka commented 1 year ago

https://github.com/euslisp/jskeus/pull/598 https://github.com/jsk-ros-pkg/jsk_model_tools/pull/232 https://github.com/start-jsk/rtmros_common/pull/1105

の代わりに、

https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249 https://github.com/start-jsk/rtmros_common/pull/1105

を使うことによっても、同様にcustom limbが使えるようになることを確認しました。

https://github.com/jsk-ros-pkg/jsk_model_tools/pull/232robot-modelクラスからrarm,larm,rleg,lleg,torso,headの仮定を無くすというアプローチで、https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249rarm,larm,rleg,lleg,torso,head以外のlimbは子クラスで定義するというアプローチです。どちらのアプローチでもcustom limbが使えるようになるという要求機能は満たされるため、JAXONでもhttps://github.com/jsk-ros-pkg/jsk_model_tools/pull/249 を使う方針にしようと思います。

Naoki-Hiraoka commented 1 year ago

@k-okada

@pazeshun と一緒に、次の2通りの目的と5通りの選択肢に整理してみたのですが、どうしましょうか。

目的1だけを手早く対応させるなら選択肢1、目的1と2を手早く対応させるなら選択肢1+5、目的1と2を丁寧に対応させるなら選択肢3+5、目的1と2を中間くらいで対応させるなら4かと思います。どの選択肢がよろしいでしょうか。

  1. 選択肢1は、目的1を達成するためのものです. yamlの書式の変更が無く、プログラムの変更が小さいので、一番楽ですが、今後キーが追加される度に変更が必要になります。
  2. 選択肢2は、目的1を達成するためのものです. yamlの書式やプログラムの変更が小さくて済みますが、limbsに書くことという冗長なルールが増えます
  3. 選択肢3は、目的1を達成するためのものです. yamlの書式の変更が一番大きいですが、一番きれいになります。しかし、どのような書式が最もキレイなのかを、関係者一同で議論し、今後使うロボットのyamlを書き換えておく必要になります。
  4. 選択肢4は、目的1と目的2を達成するためのものです. yamlの書式やプログラムの変更が小さくて済みますが、replace_xmlを使っていたロボットは既存のファイルを分割する必要が有ります。今replace_xmlを使っているロボットはそんなに多くないです。
  5. 選択肢5は、目的2を達成するためのもので、選択肢1~3を取った場合に目的2を達成するためのものです。

選択肢1

-coords、-vector、sensors、 replace_xmls、links以外のキーを見たらlimbとして扱う方法 (このPRを微修正したもの)

選択肢2

limbs: [rleg, lleg, torso, head, rarm, larm, right_hand, left_hand]

とする方法 (https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249#discussion_r988491478 の方法)

キー:limbsが与えられなければ、今と同じ挙動をするようにして後方互換性を保つ.

選択肢3

:limb
   :larm
     :links
        - LLEG_JOINT0
        -...
     :coords
        - end-coords:
            parent:
            translate:
        - elbow-coords:
            parent:
            translate:

とする方法. (https://github.com/k-okada/jsk_model_tools/pull/1#issuecomment-1277529941 の方法)

キー:limbが与えられなければ、今と同じ挙動をするようにして後方互換性を保つ.

選択肢4

add_sensor_to_collada.py -Cの引数を任意個とれるようにして,

rosrun euscollada add_sensor_to_collada.py ./HRP2JSKNTS_WH.urdf -O /tmp/HRP2JSKNTS_WH_SENSORS.urdf -C ./hrp2jsknts.yaml ./hrp2jsknts-replace-xml.yaml

とする方法. (https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249#discussion_r995707492 の方法)

一番目の引数のファイルはlimb, -vector, end-coords専用にする. ファイルが1つしか与えられていない場合は、後方互換性を考えて従来の方法でパースする

選択肢5

add_sensor_to_collada.py -Cの引数を任意個とれるようにして,

rosrun euscollada add_sensor_to_collada.py ./HRP2JSKNTS_WH.urdf -O /tmp/HRP2JSKNTS_WH_SENSORS.urdf -C ./hrp2jsknts.yaml ./hrp2jsknts-replace-xml.yaml

とする方法. (https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249#discussion_r995707492 の方法)

与えられたyamlをconcatenateして一つのyamlとして読んで、選択肢1か2か3と組み合わせる

k-okada commented 1 year ago

よく見るとエラーはminmax table のところで出ているので,そこで(sensor_type_jt )のエラーチェック&&ワーニング出すというのは出来ないかな.これで,選択肢1,2でもなくて目的1が達成できないかな.

選択肢4と5の違いがわからないんだけど,というか選択肢5は,それ自体は特に何の副作用もなくて,設定ファイル全部変えてください,というと影響は大きいけど,,,と思うんだけど,,,なのでこっち一択だと思ったんだけど.

Naoki-Hiraoka commented 1 year ago

よく見るとエラーはminmax table のところで出ているので,そこで(sensor_type_jt )のエラーチェック&&ワーニング出すというのは出来ないかな.これで,選択肢1,2でもなくて目的1が達成できないかな.

なるほど!

rarm:
  - RARM_JOINT0  : rarm-shoulder-p
  - RARM_JOINT1  : rarm-shoulder-r
  - RARM_JOINT2  : rarm-shoulder-y
  - RARM_JOINT3  : rarm-elbow-y
  - RARM_JOINT4  : rarm-elbow-p
  - RARM_JOINT5  : rarm-wrist-y
  - RARM_JOINT6  : rarm-wrist-r
  - RARM_JOINT7  : rarm-wrist-p

sensors:
  - {sensor_name: 'gsensor',   sensor_type: 'acceleration', parent_link: 'BODY', translate: '0 0 0'}
  - {sensor_name: 'gyrometer', sensor_type: 'gyro', parent_link: 'BODY', translate: '0 0 0'}
  - {sensor_name: 'rasensor', sensor_type: 'base_force6d', parent_link: 'RARM_LINK7', translate: '0 -0.05755 0', rotate: '0.57735 -0.57735 0.57735 120'}
  - {sensor_name: 'lasensor', sensor_type: 'base_force6d', parent_link: 'LARM_LINK7', translate: '0  0.05755 0', rotate: '1 0 0 -90'}
  - {sensor_name: 'rfsensor', sensor_type: 'base_force6d', parent_link: 'RLEG_LINK5', translate: '0 0 -0.069', rotate: '0 1 0 180'}
  - {sensor_name: 'lfsensor', sensor_type: 'base_force6d', parent_link: 'LLEG_LINK5', translate: '0 0 -0.069', rotate: '0 1 0 180'}

となっているときに、

rarmという名前のlimbにRARM_JOINT1という名前の関節を追加するのと同じように、

sensors という名前のlimbにsensor_type という名前の関節を追加してしまうのがエラーの原因になっています。

joint-listなどにsensor_typeという名前の関節が追加されてしまうので、minmax table 以外のあちこちでエラーが発生するので、minmax table の箇所だけをエラーチェックするだけでは厳しいと思われます。

そのため、collada2eusが変換するときに、sensor_type という名前の関節がcolladaモデルに含まれていないことに気づいて、sensorsという名前のlimbをスキップすればいけそうです。(以後、選択肢6と呼びます)

ただ、ロボットモデルを利用できる状況でないとこの方法は使えない点が欠点です。yamlファイルのlimb情報を呼んでいるプログラムとして、他にhttps://github.com/start-jsk/rtmros_common/blob/cb56193225f64c25b705a6d2f544e5a5f597e327/hrpsys_ros_bridge/scripts/controller_config_converter.py#L35 があるのですが、このプログラムはロボットモデルを持っていないので、選択肢6が使えないです。

この問題さえなければ、選択肢6 + 5 がよさそうですね。

Naoki-Hiraoka commented 1 year ago

選択肢4と5の違いがわからないんだけど,というか選択肢5は,それ自体は特に何の副作用もなくて,設定ファイル全部変えてください,というと影響は大きいけど,,,と思うんだけど,,,なのでこっち一択だと思ったんだけど.

選択肢4は1つめのyamlにはcollada2eusに関係するキーしか入っていないという仮定がありますが、選択肢5にはその仮定が無い、という違いがあります。replace_xmlsが同じファイルに書いてある古いyamlが与えられた場合に、選択肢4はエラーになりますが、選択肢5はなりません。

Naoki-Hiraoka commented 1 year ago

@k-okada , @pazeshun とオフラインで話しました。 結論として以下のようになりました。

euscolladaは、選択肢5+6. 選択肢6がどのくらい簡単か?を様子をみたい

controller_config_convreter.pyでは、選択肢1でやる.

euscolladaは、eusに必要なやつしか考えないようにしたい。他のキーはあってもいいが、無視。変な仮定はなし

hrpsysの世界では、ignoreのリストがあろうが、キーの仮定があろうが、変な仮定があってもよい

Naoki-Hiraoka commented 1 year ago

を追加したものをhttps://github.com/jsk-ros-pkg/jsk_model_tools/pull/250 に作成しました。