ros / kdl_parser

kdl_parser and kdl_parser_py provide tools to construct a KDL tree from an XML robot representation in URDF.
67 stars 62 forks source link

Add support for inertia in the root link #27

Open traversaro opened 5 years ago

traversaro commented 5 years ago

Original issue: https://github.com/ros/robot_model/issues/6 .

Both the C++ and the Python of the parser throw a warning when a URDF with an non-empty inertial element in its root link is parsed.

For example, the simple one link model:

<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>
</robot>

creates a warning when parsed, and this is the reason why most URDFs files existing actually use a "fake" massless root link, for example:

<robot name="oneLink">
    <link name="base_link" />
    <joint name="base_fixed_joint" type="fixed">
        <parent link="base_link" />
        <child link="link1" />
    </joint>
    <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>
</robot>
traversaro commented 5 years ago

Related KDL issue/comment: https://github.com/orocos/orocos_kinematics_dynamics/issues/130#issuecomment-366614268 .

jackie-wayland commented 2 years ago

what about adding the fake link in the code and not modifying the origin URDF file/parameter?

traversaro commented 2 months ago

what about adding the fake link in the code and not modifying the origin URDF file/parameter?

That could be a solution, but as KDL::Tree supports inertia in the root segment, kdl_parser could simply parse it and stop producing a warning.

traversaro commented 2 months ago

but as KDL::Tree supports inertia in the root segment, kdl_parser could simply parse it and stop producing a warning.

Actually this is not completely correct. The existing KDL's API does not support setting the inertia of the RootSegment, https://github.com/rock-control/control-kdl_parser/commit/d1d25079daea51ab51f9301afd8c2235f13303d9 does it, but kind of hacking around API limitations via the use of const_cast.