haosulab / ManiSkill

SAPIEN Manipulation Skill Framework, a GPU parallelized robotics simulator and benchmark
https://maniskill.ai/
Apache License 2.0
897 stars 159 forks source link

[bug] Config error of xmate3_robotiq, resulting in abnormal rotation of rx, ry, rz !!! #194

Closed swearos closed 5 months ago

swearos commented 9 months ago

https://github.com/haosulab/ManiSkill2/blob/d04c2dc5bfd826172b2f3193cbf232a4a33bdd9e/mani_skill2/agents/configs/xmate3/defaults.py#L43

self.ee_link_name = "grasp_convenient_link" should be changed to self.ee_link_name = "robotiq_arg2f_base_link",

I tried to rotate the end controller 90 degrees around the X-axis and noticed that the robotic arm was acting strangely, See the video below for a comparison of the effect before and after modification (also problematic is the rotation of rz).

https://github.com/haosulab/ManiSkill2/assets/10892059/d5523cc7-7f9c-469d-9e24-676c4d9385f9

https://github.com/haosulab/ManiSkill2/assets/10892059/f1149dea-18be-4632-8aac-94d1533bb159

StoneT2000 commented 9 months ago

thanks for raising the issue @swearos, could you provide a reproducible code snippet to do this?

swearos commented 9 months ago

@StoneT2000 Script has been attached, the default panda robot rotation results are normal, xmate3_robotiq rx and rz are abnormal, you can try it

swearos commented 9 months ago

@StoneT2000 I found that it is still wrong to change the ee_link_name node to robotiq_arg2f_base_link, but compared with the default panda result,, the origin of rx rotation is wrong. https://github.com/haosulab/ManiSkill2/assets/10892059/bfe539e3-472a-4f27-b0fa-605f93f95dce

Compared with the gripper node in panda_v2.urdf,

Whether to add child nodes to robotiq_arg2f_base_link and then add Z-axis bias,like https://github.com/haosulab/ManiSkill2/blob/d04c2dc5bfd826172b2f3193cbf232a4a33bdd9e/mani_skill2/assets/descriptions/panda_v2_gripper.urdf#L25C15-L25C29

StoneT2000 commented 8 months ago

sorry for the delay. You are correct you should use the convenient link, which basically is the location of the TCP for easier EE control. It seems like the xmate3 robot actually has a small bug/typo in its modelling where it changed the rotation frame. Panda gripper as you point out uses rpy="0 0 0" for the panda_tcp joint, but it is not 0 0 0 for xmate3. For a fix on your side you can edit the URDF file for the xmate3 like so

Original

  <link name="grasp_convenient_link"/>
  <joint name="grasp_convenient_joint" type="fixed">
    <origin rpy="0 -1.57079 0" xyz="0 0 0.225"/>
    <parent link="robotiq_arg2f_base_link"/>
    <child link="grasp_convenient_link"/>
  </joint>

Changed

  <link name="grasp_convenient_link"/>
  <joint name="grasp_convenient_joint" type="fixed">
    <origin rpy="0 0 0" xyz="0 0 0.225"/>
    <parent link="robotiq_arg2f_base_link"/>
    <child link="grasp_convenient_link"/>
  </joint>

You can probably find this file in data/robots/xmate3_robotiq/xmate3_robotiq.urdf where data is the path to your ms2 assets. data is the default location.

Because other people have potentially trained policies already with the action dimensions permuted wrong for xmate3, i will not update the URDF that is downloaded by default for now. I will update this for the next version of ManiSkill.