robosuite创建夹具体

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


目的:

实现自有夹具体的创建

案例一:

成果展示

左侧第一张图是模型展示图,第二张和第三张是安装完夹具的不同角度展示图。

添加步骤

主要涉及3 个文件:

  1. demo_gripper.py
  2. demo_gripper.xml
  3. demo_gripper.stl

其中,py 文件是定义夹具的名字,可以继承类 GripperModel ,只需要修改下 init 时的 xml 文件路径即可;xml 文件详细定义了夹具的形状,位置,姿态等关键信息,这是最重要的文件,里面涉及 mujoco 的一些语法;stl 是指夹具体的模型,可有可无,如果没有 stl 模型,也可以通过 cube,sphere进行搭建,如果是用 stl 模型,需要注意:
a. 模型必须是Binary的,ASCII 不显示;
b. 必须关注模型的坐标系问题,需要与 xml 中的添加方法保持一致;

1. py

这个文件相对简单:

class ScrewGripperWithNeedle(GripperModel):
    def __init__(self, idn=0):
        super().__init__('../models/grippers/needle_gripper.xml', idn=idn)
    
    def format_action(self, action):
        return action

    @property
    def init_qpos(self):
        return None

2. xml

<mujoco model="screw_gun">
    <asset>
        <mesh name="gun" file="./needle.stl" scale="1 1 1"/>
        <mesh name="base" file="./needle_base.stl" scale="1 1 1"/>
    </asset>
    <worldbody>
        <body name="right_gripper" pos="0 0 0" quat="0.707107 0 0 -0.707107">
            <site name="ft_frame" pos="0 0 0" size="0.01 0.01 0.01" rgba="1 0 0 1" type="sphere" group="1"/>
            <geom pos="0.01094 0.136629 0.4814" quat="0. 0. 1. 0." type="mesh" contype="0" conaffinity="1" group="1" mesh="gun" name="gun_col" rgba="1 1 1 1"/>
            <geom pos="0.01094 -0.136629 -0.4724" quat="0. 0. 0. 1." type="mesh" contype="0" conaffinity="1" group="1" mesh="base" name="base_col" rgba="1 1 1 1"/>
            <body name="eef" pos="0 0 0.00" quat="1 0 0 0">
                <site name="grip_site" pos="0 0 0" size="0.01 0.01 0.01" rgba="1 0 0 0.5" type="sphere" group="1"/>
                <site name="ee_x" pos="0.1 0 0" size="0.005 .1"  quat="0.707105  0 0.707108 0 " rgba="1 0 0 0" type="cylinder" group="1"/>
                <site name="ee_y" pos="0 0.1 0" size="0.005 .1" quat="0.707105 0.707108 0 0" rgba="0 1 0 0" type="cylinder" group="1"/>
                <site name="ee_z" pos="0 0 0.1" size="0.005 .1" quat="1 0 0 0" rgba="0 0 1 0" type="cylinder" group="1"/>
                <!-- This site was added for visualization. -->
                <site name="grip_site_cylinder" pos="0 0 0" size="0.005 10" rgba="0 1 0 0.3" type="cylinder" group="1"/>
            </body>
        </body>
    </worldbody>
    <sensor>
        <force name="force_ee" site="ft_frame"/>
        <torque name="torque_ee" site="ft_frame"/>
    </sensor>
</mujoco>

需要重点修改的是 geom pos 这两句,其中 posquat 的值是与 stl 模型相关的;下面说一下,0.01094 0.136629 0.4814这种无规律的数字是怎么来的。
两个模型的三维文件及主要几何属性如下所示:

利用 CC 查阅数据,可以看到 Properties 中有一项 Box center ,就是将这个值作为pos 的值,可以理解为将模型的中点移动到 0,0,0 的坐标原点,但是,针对这两个物体,还需要考虑长度及厚度的影响,需要 +/- 长度/厚度,这样,就能移动到正确位置,这种操作方法对标准体是有效的,对于非标设计的夹具是不适用的,还是需要在绘制模型的时候定义好坐标原点和坐标系。

3. register

init 文件里添加代码:

from .screw_gripper import ScrewGripper, ScrewGripperWithNeedle
from robosuite.models.grippers import GRIPPER_MAPPING, ALL_GRIPPERS
GRIPPER_MAPPING.update({"ScrewGripper": ScrewGripper})
GRIPPER_MAPPING.update({"ScrewGripperWithNeedle": ScrewGripperWithNeedle})
ALL_GRIPPERS = GRIPPER_MAPPING.keys()

完成以上步骤,就可以使用自己的静态夹具了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值