robotology/simmechanics-to-urdf

Check if everything is still working after urdf_parser_py modification of collision and visual tags

traversaro opened this issue · 8 comments

We need to fix the regression in visual and collision elements introduced in ros/urdf_parser_py#26 and discussed in #38 .

@traversaro actually it is not ok: with the latest urdf_parser_py the urdf::Link class does not work properly anymore, and both Visual and Collision tags are missing in the link definition inside the urdf.

It seems the developers of the parser also noted the lack of backward compatibility of the Link class, in fact I fixed the problem by moving my urdf_parser_py to the fork implementing this PR: see also the issue I've opened #38 (comment).

Note that in my specific case there was another installation of the library that was hiding my modifications. In fact, the urdf_parser_py comes along with ros-desktop-full installation and therefore there was another (bugged) copy of the library in my path. I had to rename the installation that comes along with ROS, so that it was possible to see the correct files.

Now it seems to me that everything is working fine.

If I remember correctly the changes in ros/urdf_parser_py#26, we can simply strictly require the latest version of urdf_parser_py and switch to use visuals and collisions instead of visual and collision.

I updated the title of the issue to reflect the current focus, after the evidence of the regression introduced in ros/urdf_parser_py#26 .

A fix for the regression was proposed in ros/urdf_parser_py#47 by @k-okada, but unfortunately upstream seems not to be interested in the PR.

A fix for the regression was proposed in ros/urdf_parser_py#47 by @k-okada, but unfortunately upstream seems not to be interested in the PR.

The fix has been merged in the melodic-branch and is available in release 0.4.3, while it is not available in the ros2 branch and in particular in release 1.0.0 . @gabrielenava @FabioBergonti can you test if everything works ok when using urdf_parser_py v0.4.3 ?

@gabrielenava @FabioBergonti can you test if everything works ok when using urdf_parser_py v0.4.3 ?

@traversaro
I tested it but it didn't compile and I got this error:

Traceback (most recent call last):
  File "/usr/local/bin/simmechanics_to_urdf", line 11, in <module>
    load_entry_point('simmechanics-to-urdf==0.2', 'console_scripts', 'simmechanics_to_urdf')()
  File "build/bdist.linux-x86_64/egg/simmechanics_to_urdf/firstgen.py", line 1871, in main
  File "build/bdist.linux-x86_64/egg/simmechanics_to_urdf/firstgen.py", line 175, in convert
  File "build/bdist.linux-x86_64/egg/simmechanics_to_urdf/firstgen.py", line 202, in generateXML
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 588, in to_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 581, in write_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 554, in add_to_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 336, in add_to_xml
AttributeError: 'Robot' object has no attribute 'version'

The error is the same as the issue https://github.com/dic-iit/component_ironcub/issues/138

That is another urdf_parser_py bug: the default Robot class is generated without the version attribute (see https://github.com/ros/urdf_parser_py/blob/melodic-devel/src/urdf_parser_py/urdf.py#L488), but then the version attribute is required in the serialization. It is necessary to report upstream the bug (let me know if you want me to handle that, even if I do not know when I will be able to do so).

An easy way to reproduce the bug is:

import urdf_parser_py
import xml
xml.etree.ElementTree.tostring(urdf_parser_py.urdf.URDF("robot_name").to_xml())

that gives the error:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 588, in to_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 581, in write_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 554, in add_to_xml
  File "build/bdist.linux-x86_64/egg/urdf_parser_py/xml_reflection/core.py", line 336, in add_to_xml
AttributeError: 'Robot' object has no attribute 'version'

while the following call works fine:

import urdf_parser_py
import xml
xml.etree.ElementTree.tostring(urdf_parser_py.urdf.URDF("robot_name", 1.0).to_xml())

that prints:

<robot name="robot_name" version="1.0" />

I have tried running the URDF toolchain and noticed that with the most recent versions of urdf_parser_py (namely, master and 1.1.0) the simmechanics-to-urdf is not generating a correct URDF file.

The generated file has no links to any of the meshes, which results in the model not being successfully loaded when launching it in gazebo.

This should be reproducible by following the installation procedure and using the most recent versions for urdf_parser_py, and trying to create a URDF file with it (I used the icub3 files present here https://github.com/robotology/icub-models-generator/tree/921c4cbd5eefd94e95437ad3bb01793aff3ace68/simmechanics/data/icub3)

cc @traversaro