Pinocchio: Continuous joint in URDF adds 2 elements to the configuration space

Created on 7 May 2019  路  7Comments  路  Source: stack-of-tasks/pinocchio

Example:

auto const xml = R"urdf(
    <robot name="test">
        <link name="base">
        </link>
        <link name="link1">
            <inertial>
            <origin xyz="0. 0. 0."/>
            <mass value="1."/>
            <inertia ixx="1." ixy="0." ixz="0." iyy="1." iyz="0." izz="1."/>
            </inertial>
        </link>
        <joint name="joint0" type="continuous">
            <parent link="base"/>
            <child link="link1"/>
            <axis xyz="0. 0. 1."/>
            <origin rpy="0. 0. 0." xyz="0. 0. 0."/>
        </joint>
    </robot>
)urdf";

pinocchio::Model model;
pinocchio::urdf::buildModelFromXML(xml, model);

assert(model.nq == 1);

This code results in model.nq == 2 and the assert fails. Changing joint type to "revolute" results in model.nq == 1, as expected.

According to http://wiki.ros.org/urdf/XML/joint,

type (required)

Specifies the type of joint, where type can be one of the following:
...
continuous - a continuous hinge joint that rotates around the axis and has no upper and lower limits.

Therefore I expect a continuous joint to add 1 element to the configuration space, the same way as a revolute joint would do.

This issue seems also to be related to this question: https://github.com/stack-of-tasks/pinocchio/issues/735#issuecomment-472506592

documentation

Most helpful comment

Sorry. I was too fast. We will add it in the doc very soon.

All 7 comments

For continuous joints, Pinocchio uses the complex representation of SO(2). The 2 elements are thus cos(theta), sin(theta).

We use cos(theta), sin(theta) to represent the configuration vector of a Continuous joint while only theta for a revolute joint.
This expected because continuous means that there are no bounds on the configuration vectors.
But for both cases, we have \dot{theta}which corresponds to the velocity of the joint.

We also use cos(theta), sin(theta) for continuous joints in a similar way we use rely on quaternions to represent the configuration of a spherical joint.

@mkatliar I hope this answer will satisfy your curiosity.

This was already the subject of a previous issue. You can find more info here: #777

I will close this issue. @mkatliar Feel free to open it again if needed.

Thank you very much for your replies, now it is clear. Would it be possible to add this explanation somewhere in the docs?

Sorry. I was too fast. We will add it in the doc very soon.

@gabrielebndn Can you help me to structure the documentation of the Joint classes inside the Pinocchio doc?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jcarpent picture jcarpent  路  8Comments

cmastalli picture cmastalli  路  12Comments

CWEzio picture CWEzio  路  9Comments

markusgft picture markusgft  路  12Comments

alejandroastudillo picture alejandroastudillo  路  10Comments