Add dof="2d" option to flexcomp for in-plane deformations.

PiperOrigin-RevId: 902620719
Change-Id: Ib06d3f7b9439e1d90a8373a4289ade0c327e72e4
This commit is contained in:
Alessio Quaglino
2026-04-20 07:13:17 -07:00
committed by Copybara-Service
parent cad734ae70
commit 2d12dee025
6 changed files with 513 additions and 2 deletions
+429
View File
@@ -0,0 +1,429 @@
<!-- Copyright 2026 DeepMind Technologies Limited
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<mujoco model="Gripper 2D Fin Ray">
<include file="scene.xml"/>
<option cone="elliptic" impratio="10" integrator="implicitfast"/>
<worldbody>
<body name="hand" pos="0 0 .37">
<joint name="lift" type="slide" range="-.13 .05"/>
<geom type="box" size=".12 .06 .03" rgba=".2 .2 .2 1"/>
<body name="right_arm">
<joint name="right" type="slide" axis="-1 0 0"/>
<geom type="box" size=".015 .06 .06" pos=".10 0 -.09"
rgba=".2 .2 .2 1"/>
<body name="right_finger" pos=".1 0 -.15" euler="90 0 0">
<!--
Fin Ray skeleton mesh (right finger).
The mesh is the OUTLINE of the fin ray structure:
two tapered vertical walls connected by horizontal ribs.
Each strut is a thin strip of 2 triangles; the interior
between ribs is empty. The radius property inflates the
visual geometry to give the skeleton thickness.
Vertex layout (XY plane, 7 rib levels, 4 verts per level):
Level i: L_front, L_back, R_front, R_back
Each pair offset by h=0.0015 along Y to create in-plane thickness.
Out-of-plane thickness set with radius parameter.
Side view of skeleton:
|===================| level 0 (base, pinned)
| |
|=================| level 1
| |
|===============| level 2
| |
|============| level 3
| |
|==========| level 4
| |
|========| level 5
| |
|=====| level 6
-->
<flexcomp name="right_fin" type="direct" dim="2"
radius=".004" rgba="0 .7 .7 1" mass=".3" dof="2d"
point="
-0.0210 0.0015 0.0000
-0.0170 0.0015 0.0000
-0.020538 -0.0015 0.0000
-0.016538 -0.0015 0.0000
0.0170 0.0015 0.0000
0.0210 0.0015 0.0000
0.016538 -0.0015 0.0000
0.020538 -0.0015 0.0000
-0.0190 -0.0115 0.0000
-0.0150 -0.0115 0.0000
-0.018538 -0.0145 0.0000
-0.014538 -0.0145 0.0000
0.0150 -0.0115 0.0000
0.0190 -0.0115 0.0000
0.014538 -0.0145 0.0000
0.018538 -0.0145 0.0000
-0.0170 -0.0245 0.0000
-0.0130 -0.0245 0.0000
-0.016308 -0.0275 0.0000
-0.012308 -0.0275 0.0000
0.0130 -0.0245 0.0000
0.0170 -0.0245 0.0000
0.012308 -0.0275 0.0000
0.016308 -0.0275 0.0000
-0.0140 -0.0375 0.0000
-0.0100 -0.0375 0.0000
-0.013308 -0.0405 0.0000
-0.009308 -0.0405 0.0000
0.0100 -0.0375 0.0000
0.0140 -0.0375 0.0000
0.009308 -0.0405 0.0000
0.013308 -0.0405 0.0000
-0.0110 -0.0505 0.0000
-0.0070 -0.0505 0.0000
-0.010308 -0.0535 0.0000
-0.006308 -0.0535 0.0000
0.0070 -0.0505 0.0000
0.0110 -0.0505 0.0000
0.006308 -0.0535 0.0000
0.010308 -0.0535 0.0000
-0.0080 -0.0635 0.0000
-0.0040 -0.0635 0.0000
-0.007200 -0.0665 0.0000
-0.003200 -0.0665 0.0000
0.0040 -0.0635 0.0000
0.0080 -0.0635 0.0000
0.003200 -0.0665 0.0000
0.007200 -0.0665 0.0000
-0.0040 -0.0785 0.0000
-0.0001 -0.0785 0.0000
-0.003200 -0.0815 0.0000
0.000700 -0.0815 0.0000
0.0001 -0.0785 0.0000
0.0040 -0.0785 0.0000
-0.000700 -0.0815 0.0000
0.003200 -0.0815 0.0000
"
element="
0 2 3
0 3 1
4 6 7
4 7 5
1 3 6
1 6 4
8 10 11
8 11 9
12 14 15
12 15 13
9 11 14
9 14 12
16 18 19
16 19 17
20 22 23
20 23 21
17 19 22
17 22 20
24 26 27
24 27 25
28 30 31
28 31 29
25 27 30
25 30 28
32 34 35
32 35 33
36 38 39
36 39 37
33 35 38
33 38 36
40 42 43
40 43 41
44 46 47
44 47 45
41 43 46
41 46 44
48 50 51
48 51 49
52 54 55
52 55 53
49 51 54
49 54 52
2 8 9
2 9 3
6 12 13
6 13 7
10 16 17
10 17 11
14 20 21
14 21 15
18 24 25
18 25 19
22 28 29
22 29 23
26 32 33
26 33 27
30 36 37
30 37 31
34 40 41
34 41 35
38 44 45
38 45 39
42 48 49
42 49 43
46 52 53
46 53 47
">
<edge equality="true" damping="0.02"
solimp="0.99 0.999 0.0001 0.5 2" solref="0.001 1"/>
<contact selfcollide="none" internal="false"
contype="2" conaffinity="2"/>
<pin id="0 1 2 3 4 5 6 7"/>
</flexcomp>
</body>
</body>
<body name="left_arm">
<joint name="left" type="slide" axis="1 0 0"/>
<geom type="box" size=".015 .06 .06" pos="-.10 0 -.09"
rgba=".2 .2 .2 1"/>
<body name="left_finger" pos="-.1 0 -.15" euler="90 0 0">
<flexcomp name="left_fin" type="direct" dim="2"
radius=".004" rgba="0 .7 .7 1" mass=".3" dof="2d"
point="
-0.0210 0.0015 0.0000
-0.0170 0.0015 0.0000
-0.020538 -0.0015 0.0000
-0.016538 -0.0015 0.0000
0.0170 0.0015 0.0000
0.0210 0.0015 0.0000
0.016538 -0.0015 0.0000
0.020538 -0.0015 0.0000
-0.0190 -0.0115 0.0000
-0.0150 -0.0115 0.0000
-0.018538 -0.0145 0.0000
-0.014538 -0.0145 0.0000
0.0150 -0.0115 0.0000
0.0190 -0.0115 0.0000
0.014538 -0.0145 0.0000
0.018538 -0.0145 0.0000
-0.0170 -0.0245 0.0000
-0.0130 -0.0245 0.0000
-0.016308 -0.0275 0.0000
-0.012308 -0.0275 0.0000
0.0130 -0.0245 0.0000
0.0170 -0.0245 0.0000
0.012308 -0.0275 0.0000
0.016308 -0.0275 0.0000
-0.0140 -0.0375 0.0000
-0.0100 -0.0375 0.0000
-0.013308 -0.0405 0.0000
-0.009308 -0.0405 0.0000
0.0100 -0.0375 0.0000
0.0140 -0.0375 0.0000
0.009308 -0.0405 0.0000
0.013308 -0.0405 0.0000
-0.0110 -0.0505 0.0000
-0.0070 -0.0505 0.0000
-0.010308 -0.0535 0.0000
-0.006308 -0.0535 0.0000
0.0070 -0.0505 0.0000
0.0110 -0.0505 0.0000
0.006308 -0.0535 0.0000
0.010308 -0.0535 0.0000
-0.0080 -0.0635 0.0000
-0.0040 -0.0635 0.0000
-0.007200 -0.0665 0.0000
-0.003200 -0.0665 0.0000
0.0040 -0.0635 0.0000
0.0080 -0.0635 0.0000
0.003200 -0.0665 0.0000
0.007200 -0.0665 0.0000
-0.0040 -0.0785 0.0000
-0.0001 -0.0785 0.0000
-0.003200 -0.0815 0.0000
0.000700 -0.0815 0.0000
0.0001 -0.0785 0.0000
0.0040 -0.0785 0.0000
-0.000700 -0.0815 0.0000
0.003200 -0.0815 0.0000
"
element="
0 2 3
0 3 1
4 6 7
4 7 5
1 3 6
1 6 4
8 10 11
8 11 9
12 14 15
12 15 13
9 11 14
9 14 12
16 18 19
16 19 17
20 22 23
20 23 21
17 19 22
17 22 20
24 26 27
24 27 25
28 30 31
28 31 29
25 27 30
25 30 28
32 34 35
32 35 33
36 38 39
36 39 37
33 35 38
33 38 36
40 42 43
40 43 41
44 46 47
44 47 45
41 43 46
41 46 44
48 50 51
48 51 49
52 54 55
52 55 53
49 51 54
49 54 52
2 8 9
2 9 3
6 12 13
6 13 7
10 16 17
10 17 11
14 20 21
14 21 15
18 24 25
18 25 19
22 28 29
22 29 23
26 32 33
26 33 27
30 36 37
30 37 31
34 40 41
34 41 35
38 44 45
38 45 39
42 48 49
42 49 43
46 52 53
46 53 47
">
<edge equality="true" damping="0.02"
solimp="0.99 0.999 0.0001 0.5 2" solref="0.001 1"/>
<contact selfcollide="none" internal="false"
contype="2" conaffinity="2"/>
<pin id="0 1 2 3 4 5 6 7"/>
</flexcomp>
</body>
</body>
</body>
<body>
<freejoint/>
<geom type="cylinder" size=".025 .05" pos="0 0 .1" rgba=".5 .5 0 1" euler="90 0 0" mass=".01"
priority="1" contype="2" condim="6" friction="2" solref="0.001 1" solimp="0.99 0.999 0.0001 0.5 2"/>
</body>
</worldbody>
<equality>
<joint joint1="right" joint2="left"/>
</equality>
<tendon>
<fixed name="grasp">
<joint joint="right" coef="1"/>
<joint joint="left" coef="1"/>
</fixed>
</tendon>
<actuator>
<position name="lift" joint="lift" kp="600" dampratio="1"
ctrlrange="-1 1"/>
<position name="grasp" tendon="grasp" kp="200" dampratio="1"
ctrlrange="0 1"/>
</actuator>
</mujoco>