Skip to content

Commit 9318e92

Browse files
committed
Add Robotiq 2F-140 model assets and documentation
1 parent bf04290 commit 9318e92

File tree

12 files changed

+272
-0
lines changed

12 files changed

+272
-0
lines changed

robotiq_2f140/2f140.png

962 KB
Loading

robotiq_2f140/2f140.xml

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
<mujoco model="robotiq_2f140">
2+
<compiler angle="radian" meshdir="assets" autolimits="true"/>
3+
4+
<option cone="elliptic" impratio="10"/>
5+
6+
<asset>
7+
<material name="metal" rgba="0.58 0.58 0.58 1"/>
8+
<material name="silicone" rgba="0.1882 0.1882 0.1882 1"/>
9+
<material name="gray" rgba="0.4627 0.4627 0.4627 1"/>
10+
<material name="black" rgba="0.149 0.149 0.149 1"/>
11+
12+
<mesh class="2f140" scale="0.001 0.001 0.001" file="base_mount.stl"/>
13+
<mesh class="2f140" file="base.stl"/>
14+
<mesh class="2f140" file="driver.stl"/>
15+
<mesh class="2f140" file="follower.stl"/>
16+
<mesh class="2f140" file="coupler.stl"/>
17+
<mesh class="2f140" scale="0.001 0.001 0.001" file="pad.stl"/>
18+
<mesh class="2f140" file="spring_link.stl"/>
19+
</asset>
20+
21+
<default>
22+
<default class="2f140">
23+
<general biastype="affine"/>
24+
<joint axis="1 0 0"/>
25+
<default class="driver">
26+
<joint range="-0.8 0" armature="0.005" damping="0.1" solimplimit="0.95 0.99 0.001" solreflimit="0.005 1"/>
27+
</default>
28+
<default class="follower">
29+
<joint range="-0.8757 0.8757" armature="0.001" solimplimit="0.95 0.99 0.001" pos="0 0.005 -0.0175" solreflimit="0.005 1"/>
30+
</default>
31+
<default class="spring_link">
32+
<joint range="-0.8 0.29670597283" armature="0.001" stiffness="0.05" springref="-2.62" damping="0.00125"/>
33+
</default>
34+
<default class="coupler">
35+
<joint range="0 1.57" armature="0.001" solimplimit="0.95 0.99 0.001" solreflimit="0.005 1"/>
36+
</default>
37+
38+
<default class="visual">
39+
<geom type="mesh" contype="0" conaffinity="0" group="2"/>
40+
</default>
41+
<default class="collision">
42+
<geom type="mesh" group="3"/>
43+
<default class="pad_box1">
44+
<geom mass="0" type="box" pos="0 0.0457554 -0.0272203" size="0.0135 0.0325 0.00375" friction="0.7"
45+
solimp="0.95 0.99 0.001" solref="0.004 1" priority="1" rgba="0.55 0.55 0.55 1"/>
46+
</default>
47+
</default>
48+
</default>
49+
</default>
50+
<worldbody>
51+
<body name="base_mount" pos="0 0 0.007" childclass="2f140">
52+
<geom class="visual" mesh="base_mount" material="black"/>
53+
<geom class="collision" mesh="base_mount"/>
54+
<body name="base" pos="0 0 0.0038" quat="1 0 0 -1">
55+
<inertial mass="0.777441" pos="0 -2.70394e-05 0.0354675" quat="1 -0.00152849 0 0"
56+
diaginertia="0.000260285 0.000225381 0.000152708"/>
57+
<geom class="visual" mesh="base" material="black"/>
58+
<geom class="collision" mesh="base"/>
59+
<!-- Right-hand side 4-bar linkage -->
60+
<body name="right_driver" pos="0 0.030601 0.054905" quat="0 0 0.911903 0.410405">
61+
<inertial mass="0.0311462" pos="0.000163875 0.0458404 0.0117804" quat="0.881368 0.472423 -0.0024451 -0.000996122"
62+
diaginertia="2.96023e-05 2.79814e-05 4.39017e-06"/>
63+
<joint name="right_driver_joint" class="driver"/>
64+
<geom class="visual" mesh="driver" material="gray"/>
65+
<geom class="collision" mesh="driver"/>
66+
<body name="right_coupler" pos="0 0.01822 0.026001" quat="1 0 0 0">
67+
<inertial mass="0.0140974" pos="0 0.00301209 0.0232175" quat="0.705636 -0.0455904 0.0455904 0.705636"
68+
diaginertia="4.16206e-06 3.52216e-06 8.88131e-07"/>
69+
<joint name="right_coupler_joint" class="coupler"/>
70+
<geom class="visual" mesh="coupler" material="black"/>
71+
<geom class="collision" mesh="coupler"/>
72+
</body>
73+
</body>
74+
<body name="right_spring_link" pos="0 0.0127 0.06142" quat="0 0 -0.9135455 -0.406736">
75+
<inertial mass="0.0271177" pos="0.000123012 0.0507851 0.00103969" quat="0.497203 0.502496 -0.507943 0.492221"
76+
diaginertia="2.83809e-05 2.61936e-05 2.81319e-06"/>
77+
<joint name="right_spring_link_joint" class="spring_link"/>
78+
<geom class="visual" mesh="spring_link" material="black"/>
79+
<geom class="collision" mesh="spring_link"/>
80+
<body name="right_follower" pos="0 0.107454 0.01451853" quat="0.935013 -0.354613 0 0">
81+
<inertial mass="0.0261503" pos="0.000119314 0.0339244 -0.021841" quat="0.545437 0.430197 -0.442938 0.566776"
82+
diaginertia="1.62408e-05 1.59131e-05 2.38936e-06"/>
83+
<joint name="right_follower_joint" class="follower"/>
84+
<geom class="visual" mesh="follower" material="black"/>
85+
<geom class="collision" mesh="follower"/>
86+
<body name="right_pad" pos="0 0.012 -0.0276" quat="0.707107 -0.707107 0 0">
87+
<inertial mass="0.0035" pos="0 -0.0025 0.0185" quat="0.707107 0 0 0.707107"
88+
diaginertia="4.73958e-07 3.64583e-07 1.23958e-07"/>
89+
<geom class="visual" mesh="pad"/>
90+
</body>
91+
<geom class="pad_box1" name="right_pad1"/>
92+
</body>
93+
</body>
94+
<!-- Left-hand side 4-bar linkage -->
95+
<body name="left_driver" pos="0 -0.0306011 0.054904" quat="0.410405 0.911903 0 0">
96+
<inertial mass="0.0311462" pos="0.000163875 0.0458404 0.0117804" quat="0.881368 0.472423 -0.0024451 -0.000996122"
97+
diaginertia="2.96023e-05 2.79814e-05 4.39017e-06"/>
98+
<joint name="left_driver_joint" class="driver"/>
99+
<geom class="visual" mesh="driver" material="gray"/>
100+
<geom class="collision" mesh="driver"/>
101+
<body name="left_coupler" pos="0 0.01822 0.026001" quat="1 0 0 0">
102+
<inertial mass="0.0140974" pos="0 0.00301209 0.0232175" quat="0.705636 -0.0455904 0.0455904 0.705636"
103+
diaginertia="4.16206e-06 3.52216e-06 8.88131e-07"/>
104+
<joint name="left_coupler_joint" class="coupler"/>
105+
<geom class="visual" mesh="coupler" material="black"/>
106+
<geom class="collision" mesh="coupler"/>
107+
</body>
108+
</body>
109+
<body name="left_spring_link" pos="0 -0.0127 0.06142" quat="0.410405 0.911903 0 0">
110+
<inertial mass="0.0271177" pos="0.000123012 0.0507851 0.00103969" quat="0.497203 0.502496 -0.507943 0.492221"
111+
diaginertia="2.83809e-05 2.61936e-05 2.81319e-06"/>
112+
<joint name="left_spring_link_joint" class="spring_link"/>
113+
<geom class="visual" mesh="spring_link" material="black"/>
114+
<geom class="collision" mesh="spring_link"/>
115+
<body name="left_follower" pos="0 0.107454 0.01451853" quat="0.935013 -0.354613 0 0">
116+
<inertial mass="0.0261503" pos="0.000119314 0.0339244 -0.021841" quat="0.545437 0.430197 -0.442938 0.566776"
117+
diaginertia="1.62408e-05 1.59131e-05 2.38936e-06"/>
118+
<joint name="left_follower_joint" class="follower"/>
119+
<geom class="visual" mesh="follower" material="black"/>
120+
<geom class="collision" mesh="follower"/>
121+
<body name="left_pad" pos="0 0.012 -0.0276" quat="0.707107 -0.707107 0 0">
122+
<inertial mass="0.0035" pos="0 -0.0025 0.0185" quat="1 0 0 1"
123+
diaginertia="4.73958e-07 3.64583e-07 1.23958e-07"/>
124+
<geom class="visual" mesh="pad"/>
125+
</body>
126+
<geom class="pad_box1" name="left_pad1"/>
127+
</body>
128+
</body>
129+
</body>
130+
</body>
131+
</worldbody>
132+
133+
<contact>
134+
<exclude body1="base" body2="left_driver"/>
135+
<exclude body1="base" body2="right_driver"/>
136+
<exclude body1="base" body2="left_spring_link"/>
137+
<exclude body1="base" body2="right_spring_link"/>
138+
<exclude body1="left_driver" body2="left_spring_link"/>
139+
<exclude body1="right_driver" body2="right_spring_link"/>
140+
<exclude body1="right_coupler" body2="right_follower"/>
141+
<exclude body1="left_coupler" body2="left_follower"/>
142+
</contact>
143+
144+
<!--
145+
This adds stability to the model by having a tendon that distributes the forces between both
146+
joints, such that the equality constraint doesn't have to do that much work in order to equalize
147+
both joints. Since both joints share the same sign, we split the force between both equally by
148+
setting coef=0.5
149+
-->
150+
<tendon>
151+
<fixed name="split">
152+
<joint joint="right_driver_joint" coef="-0.5"/>
153+
<joint joint="left_driver_joint" coef="-0.5"/>
154+
</fixed>
155+
</tendon>
156+
157+
<equality>
158+
<connect anchor="0 0 0" body1="right_follower" body2="right_coupler" solimp="0.95 0.99 0.001" solref="0.005 1"/>
159+
<connect anchor="0 0 0" body1="left_follower" body2="left_coupler" solimp="0.95 0.99 0.001" solref="0.005 1"/>
160+
<joint joint1="right_driver_joint" joint2="left_driver_joint" polycoef="0 1 0 0 0" solimp="0.95 0.99 0.001"
161+
solref="0.005 1"/>
162+
</equality>
163+
164+
<!--
165+
The general actuator below is a customized position actuator (with some damping) where
166+
gainprm[0] != kp (see http://mujoco.org/book/modeling.html#position).
167+
The reason why gainprm[0] != kp is because the control input range has to be re-scaled to
168+
[0, 255]. The joint range is currently set at [0, 0.8], the control range is [0, 255] and
169+
kp = 100. Tau = Kp * scale * control_input - Kp * error, max(Kp * scale * control_input) = 0.8,
170+
hence scale = 0.8 * 100 / 255
171+
-->
172+
<actuator>
173+
<general class="2f140" name="fingers_actuator" tendon="split" forcerange="-5 5" ctrlrange="0 255"
174+
gainprm="0.3137255 0 0" biasprm="0 -100 -10"/>
175+
</actuator>
176+
</mujoco>

robotiq_2f140/LICENSE

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Copyright (c) 2013, ROS-Industrial
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without modification,
5+
are permitted provided that the following conditions are met:
6+
7+
Redistributions of source code must retain the above copyright notice, this
8+
list of conditions and the following disclaimer.
9+
10+
Redistributions in binary form must reproduce the above copyright notice, this
11+
list of conditions and the following disclaimer in the documentation and/or
12+
other materials provided with the distribution.
13+
14+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
18+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

robotiq_2f140/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Robotiq 2F-140 Description (MJCF)
2+
3+
Requires MuJoCo 2.2.2 or later.
4+
5+
## Overview
6+
7+
This package contains a simplified robot description (MJCF) of the [Robotiq 140mm
8+
2-Finger Adaptive
9+
Gripper](https://robotiq.com/products/2f85-140-adaptive-robot-gripper) developed
10+
by [Robotiq](https://robotiq.com/). It is derived from the [publicly available
11+
URDF
12+
description](https://github.com/ros-industrial/robotiq/tree/kinetic-devel/robotiq_2f_140_gripper_visualization).
13+
14+
<p float="left">
15+
<img src="2f140.png" width="400">
16+
</p>
17+
18+
## URDF → MJCF derivation steps
19+
20+
1. Added `<mujoco> <compiler discardvisual="false"/> </mujoco>` to the URDF's
21+
`<robot>` clause in order to preserve visual geometries.
22+
2. Loaded the URDF into MuJoCo and saved a corresponding MJCF.
23+
3. Manually edited the MJCF to extract common properties into the `<default>` section.
24+
4. Added `<exclude>` clauses to prevent collisions between the linkage bodies.
25+
5. Broke up collision pads into two pads for more contacts.
26+
6. Increased pad friction and priority.
27+
7. Added `impratio=10` for better noslip.
28+
8. Added `scene.xml` which includes the robot, with a textured groundplane, skybox, and haze.
29+
9. Added hanging box to `scene.xml`.
30+
31+
## License
32+
33+
This model is released under a [BSD-2-Clause License](LICENSE).

robotiq_2f140/assets/base.stl

1.01 MB
Binary file not shown.
157 KB
Binary file not shown.

robotiq_2f140/assets/coupler.stl

74.3 KB
Binary file not shown.

robotiq_2f140/assets/driver.stl

76.5 KB
Binary file not shown.

robotiq_2f140/assets/follower.stl

33.2 KB
Binary file not shown.

robotiq_2f140/assets/pad.stl

4.96 KB
Binary file not shown.

0 commit comments

Comments
 (0)