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

[collada2eus_urdfmodel.cpp] print links in the order of link names #252

Closed Naoki-Hiraoka closed 1 year ago

Naoki-Hiraoka commented 1 year ago

https://github.com/jsk-ros-pkg/jsk_model_tools/pull/250#issuecomment-1510515482 に対応したPull Requestです。

これまで、collada2eusのソースコードに変更を加える度に、生成されるeusモデルのリンクの宣言順が変わってしまって、生成されるeusモデルに大きなdiffが発生してしまい、collada2eusに加えた変更が妥当かどうかの検証がしづらい、という問題が有りました。

考えられる原因は、次のとおりです。

collada2eusは、https://github.com/jsk-ros-pkg/jsk_model_tools/blob/6749740bdb803cdaeb4d453e086b805f05b6c030/euscollada/src/collada2eus_urdfmodel.cpp#L777-L781 やhttps://github.com/jsk-ros-pkg/jsk_model_tools/blob/6749740bdb803cdaeb4d453e086b805f05b6c030/euscollada/src/collada2eus_urdfmodel.cpp#L1862-L1866 で、linkのshared_ptrをキーとするmapにlinkが格納されていて、mapのイテレータを回したときにどのような順番になっているかによって、linkの宣言順番が決まっています。mapのイテレータの順番は、デフォルトだと恐らくlinkのアドレス順になるので、linkのメモリを確保するときにどのアドレスに確保されたかに依存すると思われます。そのため、collada2eusのソースコードに変更を加えると、変更した部分で行うメモリ確保・開放がlinkのアドレスに何らかの影響を与えて、linkの宣言順番が変化してしまっているのではないかと思います。

このPull Reqeustは、mapのイテレータを回したときに、リンク名のアルファベット順で回るように変更することで、この問題を解決するものです。