Closed k-okada closed 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/232 はrobot-model
クラスからrarm,larm,rleg,lleg,torso,head
の仮定を無くすというアプローチで、https://github.com/jsk-ros-pkg/jsk_model_tools/pull/249 はrarm,larm,rleg,lleg,torso,head
以外のlimbは子クラスで定義するというアプローチです。どちらのアプローチでもcustom limbが使えるようになるという要求機能は満たされるため、JAXONでもhttps://github.com/jsk-ros-pkg/jsk_model_tools/pull/249 を使う方針にしようと思います。
@k-okada
@pazeshun と一緒に、次の2通りの目的と5通りの選択肢に整理してみたのですが、どうしましょうか。
目的1だけを手早く対応させるなら選択肢1、目的1と2を手早く対応させるなら選択肢1+5、目的1と2を丁寧に対応させるなら選択肢3+5、目的1と2を中間くらいで対応させるなら4かと思います。どの選択肢がよろしいでしょうか。
-coords、-vector、sensors、 replace_xmls、links以外のキーを見たらlimbとして扱う方法 (このPRを微修正したもの)
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
が与えられなければ、今と同じ挙動をするようにして後方互換性を保つ.
: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
が与えられなければ、今と同じ挙動をするようにして後方互換性を保つ.
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つしか与えられていない場合は、後方互換性を考えて従来の方法でパースする
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と組み合わせる
よく見るとエラーはminmax table のところで出ているので,そこで(sensor_type_jt )のエラーチェック&&ワーニング出すというのは出来ないかな.これで,選択肢1,2でもなくて目的1が達成できないかな.
選択肢4と5の違いがわからないんだけど,というか選択肢5は,それ自体は特に何の副作用もなくて,設定ファイル全部変えてください,というと影響は大きいけど,,,と思うんだけど,,,なのでこっち一択だと思ったんだけど.
よく見るとエラーは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 がよさそうですね。
選択肢4と5の違いがわからないんだけど,というか選択肢5は,それ自体は特に何の副作用もなくて,設定ファイル全部変えてください,というと影響は大きいけど,,,と思うんだけど,,,なのでこっち一択だと思ったんだけど.
選択肢4は1つめのyamlにはcollada2eusに関係するキーしか入っていないという仮定がありますが、選択肢5にはその仮定が無い、という違いがあります。replace_xmlsが同じファイルに書いてある古いyamlが与えられた場合に、選択肢4はエラーになりますが、選択肢5はなりません。
@k-okada , @pazeshun とオフラインで話しました。 結論として以下のようになりました。
euscolladaは、選択肢5+6. 選択肢6がどのくらい簡単か?を様子をみたい
controller_config_convreter.pyでは、選択肢1でやる.
eusに必要
eus変換にいらない
euscolladaは、eusに必要なやつしか考えないようにしたい。他のキーはあってもいいが、無視。変な仮定はなし
hrpsysの世界では、ignoreのリストがあろうが、キーの仮定があろうが、変な仮定があってもよい
を追加したものをhttps://github.com/jsk-ros-pkg/jsk_model_tools/pull/250 に作成しました。
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.