fkanehiro / simtrans

12 stars 14 forks source link

urdfからwrlへの変換で関節軸がおかしい #51

Open fkanehiro opened 8 years ago

fkanehiro commented 8 years ago

下のようなurdfを変換すると、円柱の軸周りに関節が回転することを期待しますが、それとは90度異なる方向周りに回転します。 おそらくrpyがaxisに適用されているのではないかと思いますが、urdfもwrlも子リンクでの相対表現なので変換は不要と思います。

更にrootジョイントがfixedではなくfreeになります。

<?xml version="1.0" encoding="utf-8"?>
<robot name="robot">
        <link name="Root_joint_link">
                <inertial>
                        <mass value="1"/>
                        <origin xyz="0 0 0" rpy="0 -0 0"/>
                        <inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1\
"/>
                </inertial>
                <visual>
                        <origin xyz="0 0 0" rpy="0 -0 0"/>
                        <geometry>
                                <box size="0.4 0.2 0.3" />
                        </geometry>
                </visual>
        </link>
        <link name="Hip_joint_link">
                <inertial>
                        <mass value="1"/>
                        <origin xyz="0 0 0" rpy="0 -0 0"/>
                        <inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1\
"/>
                </inertial>
                <visual>
                        <origin xyz="0 0 0" rpy="0 -0 0"/>
                        <geometry>
                                <cylinder radius="0.1" length="0.4" />
                        </geometry>
                </visual>
        </link>
        <link name="root"/>
        <joint name="Hip_joint_joint" type="revolute">
                <origin xyz="0.1 0 -0.1" rpy="0 -1.5708 0"/>
                <axis xyz="0 0 1"/>
                <parent link="Root_joint_link"/>
                <child link="Hip_joint_link"/>
                <limit effort="-1" velocity="-1" lower="-1" upper="1"/>
        </joint>
        <joint name="Root_joint_joint" type="fixed">
                <origin xyz="0 0 0" rpy="0 -0 0"/>
                <axis xyz="0 0 0"/>
                <parent link="root"/>
                <child link="Root_joint_link"/>
        </joint>
</robot>
fkanehiro commented 8 years ago

http://wiki.ros.org/urdf/XML/joint を見ると、joint_frame=child_frameでjoint axisはchild_frameでの表現ということなのですが、 https://github.com/fkanehiro/simtrans/blob/master/simtrans/sdf.py#L198 のuse_parentが1となるために親リンクでの表現として処理されるようですね。 use_parentはなぜ1となっているのでしょう?

fkanehiro commented 8 years ago

gzでurdfからsdfに変換した時にuse_parent_model_frameが1になっている。

fkanehiro commented 8 years ago

use_parent_model_frameが1になっているが、axisもそれに合わせた値になっている。 またmodel.pyのAxisDataも親リンクでの表現ということになっているのでurdf->sdf->AxisDataまでの処理は現状のものでOKで問題はwrlに出力する際に子リンクでの表現に直していないことか。