-
Notifications
You must be signed in to change notification settings - Fork 111
Description
Desired behavior
If I try to convert the following URDF model, saved in a file called oneLink.urdf
:
<?xml version='1.0' encoding='UTF-8'?>
<robot name="oneLink">
<link name="link1">
<inertial>
<mass value="1" />
<inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
</inertial>
</link>
<gazebo reference="lіnk1">
<sensor name="link1_imu" type="imu">
<always_on>1</always_on>
<update_rate>100</update_rate>
<pose>0.13525 0 -0.07019999999999993 0.0 -0.0 -2.0943952105869315</pose>
<plugin name="sensor_plugin" filename="example_plugin.so" />
</sensor>
</gazebo>
</robot>
to SDF with sdformat 14.0.0 (i.e. via gz sdf -p ./oneLink.urdf > oneLink.sdf
), I obtaine the following result, without any additional output:
(gzsdf) traversaro@IITBMP014LW012:~/test34$ gz sdf -p ./oneLink.urdf
<sdf version='1.11'>
<model name='oneLink'>
<link name='link1'>
<inertial>
<pose>0 0 0 0 0 0</pose>
<mass>1</mass>
<inertia>
<ixx>0.01</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.01</iyy>
<iyz>0</iyz>
<izz>0.01</izz>
</inertia>
</inertial>
</link>
</model>
</sdf>
Note how the imu
sensors is completely ignored, without any warning message or error. Why is this happening? Because, despite the apperance, the link1
string in <link name='link1'>
is not the same string as lіnk1
in <gazebo reference="lіnk1">
. The second letter of the string in the first case is i
, i.e. unicode character U+0069 (Latin Small Letter I), while in the second case is unicode character U+0456 (Cyrillic Small Letter Byelorussian-Ukrainian I).
Clearly I crafted this example to make it explicitly tricky to spot (see https://gist.github.com/StevenACoffman/a5f6f682d94e38ed804182dc2693ed4b if you want to have fun), but in general it would be convenient if the URDF --> SDF parser detected <gazebo reference="..">
that referenced to non-existing elements, and printed at least a warning, to help in case of typos.
Alternatives considered
Continue not to print any warning if a <gazebo>
tag refers to a non existing element.
Implementation suggestion
I checked the code, and indeed first the parser parsers all the <gazebo>
tags in
Line 3372 in f360776
this->ParseSDFExtension(urdfXml); |
Line 3182 in f360776
InsertSDFExtensionJoint(joint, _link->parent_joint->name); |
Probably we should add a boolean flag or similar to each SDF extension, that is set to true once a SDF extension is consumed. If an SDF extension is not used at the end of the parsing, a warning should be printed.
Additional context
We experienced this with @Gio-DS .
Metadata
Metadata
Assignees
Labels
Type
Projects
Status