Add replicate element to MJCF. Fixes #553

PiperOrigin-RevId: 629393578
Change-Id: Ia1db1b9e47eba8868117b0f7b85edcd0cc1b6d79
This commit is contained in:
Alessio Quaglino
2024-04-30 06:28:09 -07:00
committed by Copybara-Service
parent 6a5bbb5157
commit 26f23066d1
30 changed files with 8756 additions and 2807 deletions
+27
View File
@@ -0,0 +1,27 @@
# Replicate
Models in this directory provide usage examples of the `<replicate>` meta-element, see
[documentation](https://mujoco.readthedocs.io/en/stable/XMLreference.html#replicate-r).
The models contain several categories:
1. Constructing static geometries:
- cylinder.xml
- bowl.xml
- helix.xml
- container.xml
2. Replicating moving bodies:
- particle.xml
- bunnies.xml
- leaves.xml
- stonehenge.xml
3. Replicas that include tendons:
- newton_cradle.xml
- tendon.xml
4. Replicas with multiple referencing elements:
- references.xml
[![Replicate showcase](https://img.youtube.com/vi/5k0_wsIRAFc/0.jpg)](https://www.youtube.com/watch?v=5k0_wsIRAFc)
+46
View File
@@ -0,0 +1,46 @@
<mujoco model="Bowl">
<statistic meansize=".05"/>
<worldbody>
<light pos=".1 0 .6"/>
<light pos="-.1 0 .6"/>
<geom type="plane" size="1 1 .01"/>
<body pos="-.1 0 .04" euler="20 10 0">
<freejoint/>
<geom type="cylinder" size="0.03 0.002" rgba=".8 0 0 1"/>
<replicate count="20" euler="0 0 18">
<frame pos="-.025 0 .03" euler="0 15 0">
<replicate count="6" euler="0 15 0">
<geom type="box" size=".0044 .009 .002" pos="0 0 -.03" rgba=".8 0 0 1"/>
</replicate>
</frame>
</replicate>
</body>
<body pos="0 0 .02" euler="20 20 0">
<freejoint/>
<geom type="cylinder" size="0.01 0.0015" rgba="0 .8 0 1"/>
<replicate count="20" euler="0 0 18">
<frame pos="-.005 0 .03" euler="0 15 0">
<replicate count="6" euler="0 15 0">
<geom type="box" size=".0044 .006 .0015" pos="0 0 -.03" rgba="0 .8 0 1"/>
</replicate>
</frame>
</replicate>
</body>
<body pos=".09 0 .04" euler="30 30 0">
<freejoint/>
<geom type="cylinder" size="0.03 0.002" rgba="0 0 .8 1"/>
<replicate count="20" euler="0 0 18">
<frame pos="-.025 0 .03" euler="0 15 0">
<replicate count="4" euler="0 15 0">
<geom type="box" size=".0044 .009 .002" pos="0 0 -.03" rgba="0 0 .8 1"/>
</replicate>
</frame>
</replicate>
</body>
</worldbody>
</mujoco>
+25
View File
@@ -0,0 +1,25 @@
<mujoco model="Bunnies">
<include file="container.xml"/>
<size memory="1G"/>
<option solver="CG" tolerance="1e-6" timestep=".01"/>
<asset>
<mesh file="bunny.obj"/>
</asset>
<worldbody>
<replicate count="5" offset=".17 0 0">
<replicate count="5" offset="0 .17 0">
<replicate count="5" offset="0 0 .17">
<body pos="-0.35 -0.35 0.65">
<freejoint/>
<geom type="mesh" mesh="bunny" rgba="0.8 0.2 0.1 1"/>
</body>
</replicate>
</replicate>
</replicate>
</worldbody>
</mujoco>
File diff suppressed because it is too large Load Diff
+31
View File
@@ -0,0 +1,31 @@
<mujoco model="Container">
<statistic extent="1.5" meansize=".05"/>
<visual>
<rgba haze="0.15 0.25 0.35 1"/>
<map shadowscale="0.5" zfar="40"/>
</visual>
<asset>
<texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="64" height="64"/>
<texture name="texplane" type="2d" builtin="checker" rgb1=".2 .3 .4" rgb2=".1 0.15 0.2" width="512" height="512" mark="cross" markrgb=".8 .8 .8"/>
<material name="matplane" reflectance="0.3" texture="texplane" texrepeat="1 1" texuniform="true"/>
</asset>
<worldbody>
<light directional="true" diffuse=".4 .4 .4" specular="0.1 0.1 0.1" pos="0 0 5" castshadow="false"/>
<light diffuse=".6 .6 .6" specular="0.2 0.2 0.2" pos="0 0 4"/>
<geom name="ground" type="plane" size="0 0 1" pos="0 0 0" quat="1 0 0 0" material="matplane" condim="1"/>
<body mocap="true" pos="-.1 .05 0" zaxis=".5 0 1">
<geom type="capsule" size=".1 .1" group="1" condim="1"/>
</body>
</worldbody>
<worldbody>
<replicate count="4" euler="0 0 90">
<geom type="plane" size=".5 .5 .05" zaxis="1 0 0" pos="-.5 0 -.25"/>
</replicate>
</worldbody>
</mujoco>
+31
View File
@@ -0,0 +1,31 @@
<mujoco model="Cylinder">
<statistic meansize=".05"/>
<worldbody>
<light pos=".5 0 3"/>
<light pos="-.5 0 3"/>
<geom type="plane" size="2 2 .01"/>
<body pos="-.3 0 .3" euler="80 10 0">
<freejoint/>
<replicate count="30" euler="0 0 12">
<geom type="box" pos="0 -.12 0" size=".01315 .005 .1" rgba=".8 0 0 1"/>
</replicate>
</body>
<body pos="0 0 .4" euler="20 20 0">
<freejoint/>
<replicate count="10" euler="0 0 36">
<geom type="box" pos="0 -0.067 0" size=".025 .01 .1" rgba="0 .8 0 1"/>
</replicate>
</body>
<body pos=".3 0 .3" euler="30 30 0">
<freejoint/>
<replicate count="4" euler="0 0 90">
<geom type="box" pos="0.005 -0.05 0" size=".05 .005 .08" rgba="0 0 .8 1"/>
</replicate>
</body>
</worldbody>
</mujoco>
+25
View File
@@ -0,0 +1,25 @@
<mujoco model="Helix">
<statistic meansize=".05"/>
<worldbody>
<light pos=".5 0 3"/>
<light pos="-.5 0 3"/>
<geom type="plane" size="2 2 .01"/>
<body pos="0 0 .3">
<freejoint/>
<replicate count="50" offset="0 0 0.01" euler="0 0 25">
<geom type="capsule" size=".01 .05" pos="0 -.23 -.2" euler="0 84.5 0" rgba="0 0 1 1"/>
</replicate>
</body>
<body pos=".6 0 .3" euler="0 0 90">
<freejoint/>
<replicate count="50" offset="0 0 0.01" euler="0 0 15">
<geom type="box" pos=".025 -.2 -.2" size=".032 .04 .005" euler="-24 -12 2" rgba=".8 0 0 1"/>
</replicate>
</body>
</worldbody>
</mujoco>
+50
View File
@@ -0,0 +1,50 @@
<mujoco model="Leaves">
<statistic extent="1.5"/>
<visual>
<rgba haze="0.15 0.25 0.35 1"/>
<map shadowscale="0.5" zfar="40"/>
</visual>
<asset>
<texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="64" height="64"/>
<texture name="texplane" type="2d" builtin="checker" rgb1=".2 .3 .4" rgb2=".1 0.15 0.2" width="512" height="512" mark="cross" markrgb=".8 .8 .8"/>
<material name="matplane" reflectance="0.3" texture="texplane" texrepeat="1 1" texuniform="true"/>
</asset>
<size memory="1G"/>
<option solver="CG" tolerance="1e-6" timestep=".003" density="1.225" viscosity="1.8e-5" integrator="implicitfast"/>
<visual>
<global realtime="0.2"/>
</visual>
<default>
<default class="leaf">
<geom type="ellipsoid" size=".025 .01 0.001" mass="1e-4" fluidshape="ellipsoid" rgba="0 .4 0 1"/>
</default>
</default>
<worldbody>
<camera name="Cinematic" pos="0 -1.6 4.5" xyaxes="1 0 0 0 0.6 0.8" mode="trackcom"/>
<light diffuse="1 1 1" attenuation=".4 .2 0" pos="-1 -1 6" mode="trackcom" dir="1 1 -3"/>
<light diffuse="1 1 1" attenuation=".4 .2 0" pos="-.98 -1.02 6" mode="trackcom" dir="1 1 -3"/>
<geom name="ground" type="plane" size="5 5 .01" pos="0 0 0" quat="1 0 0 0" material="matplane" condim="1"/>
<replicate count="10" offset="0 0 0.07" euler="0 0 30">
<replicate count="6" euler="-3 0 0">
<frame pos="-.3 -.3 3">
<replicate count="5" offset=".05 0 0" euler="50 0 0">
<body euler="50 50 0">
<freejoint/>
<geom class="leaf" pos=".025 0 0" euler="10 0 0"/>
<geom class="leaf" pos="-.025 0 0" euler="-14 0 0" mass="1.2e-4"/>
</body>
</replicate>
</frame>
</replicate>
</replicate>
</worldbody>
</mujoco>
+69
View File
@@ -0,0 +1,69 @@
<mujoco model="Newton's Cradle">
<option timestep="1e-4"/>
<visual>
<global realtime="0.2"/>
</visual>
<asset>
<texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="64" height="64"/>
<texture name="texplane" type="2d" builtin="checker" rgb1=".2 .3 .4" rgb2=".1 0.15 0.2" width="512" height="512" mark="cross" markrgb=".8 .8 .8"/>
<material name="matplane" reflectance="0.5" texture="texplane" texrepeat="3 3" texuniform="true"/>
</asset>
<default>
<geom friction=".5" solref="-1e8 -0" solimp="0 .01 1e-3"/>
<tendon limited="true" range="0 0.146" width="0.001" solreflimit="1e-3 1" rgba="0 0 .7 1"/>
<default class="steel ball">
<geom size=".02" rgba=".7 .7 0 1" density="8000" friction=".4" solref="-1e8 -0" solimp="0 .01 1e-3"/>
</default>
</default>
<worldbody>
<light pos=".5 0 1" dir="-1 0 -2"/>
<light pos="-.5 0 1" dir="1 0 -2"/>
<geom type="plane" size="4 4 .1" material="matplane"/>
<replicate count="5" offset="-.04 0 0">
<site name="a" pos="0 -.04 .2"/>
<site name="c" pos="0 .04 .2"/>
<body name="equilibrium" pos="0 0 .04">
<freejoint/>
<geom class="steel ball"/>
<site name="b" pos="0 -.008 .018"/>
<site name="d" pos="0 .008 .018"/>
</body>
</replicate>
<replicate count="2" offset=".04 0 0">
<site name="e" pos=".04 -.04 .2"/>
<site name="g" pos=".04 .04 .2"/>
<body name="perturbed" pos=".12 0 .061" euler="0 -34 0">
<freejoint/>
<geom class="steel ball"/>
<site name="f" pos="0 -.008 .018"/>
<site name="h" pos="0 .008 .018"/>
</body>
</replicate>
</worldbody>
<tendon>
<spatial>
<site site="a"/>
<site site="b"/>
</spatial>
<spatial>
<site site="c"/>
<site site="d"/>
</spatial>
<spatial>
<site site="e"/>
<site site="f"/>
</spatial>
<spatial>
<site site="g"/>
<site site="h"/>
</spatial>
</tendon>
</mujoco>
+23
View File
@@ -0,0 +1,23 @@
<mujoco model="Particle">
<include file="container.xml"/>
<size memory="1G"/>
<option solver="CG" tolerance="1e-6" timestep=".01"/>
<worldbody>
<replicate count="10" offset=".07 0 0">
<replicate count="10" offset="0 .07 0">
<replicate count="10" offset="0 0 .07">
<body pos="-0.35 -0.35 0.65">
<joint type="slide" axis="1 0 0" group="3"/>
<joint type="slide" axis="0 1 0" group="3"/>
<joint type="slide" axis="0 0 1" group="3"/>
<geom size="0.025" condim="1" priority="1" rgba="0.8 0.2 0.1 1"/>
</body>
</replicate>
</replicate>
</replicate>
</worldbody>
</mujoco>
+40
View File
@@ -0,0 +1,40 @@
<mujoco model="Stonehenge">
<statistic meansize="1"/>
<worldbody>
<light directional="true" pos="-50 -20 10" dir="5 2 -1" diffuse="1 1 1"/>
<geom type="plane" size="30 30 .1" rgba="0 1 0 1"/>
<geom type="plane" pos="38 0 5" size="10 30 .1" euler="0 -30 0" rgba="0 .8 0 1"/>
<body name="wrecking ball" pos="45 0 16">
<freejoint/>
<geom size="5.5"/>
</body>
<replicate count="30" euler="0 0 12">
<body pos="0 -15 2">
<freejoint/>
<geom type="box" size="1 .5 2"/>
</body>
<body pos="1.5 -15 4.4" euler="0 0 6">
<freejoint/>
<geom type="box" size="1.5 .5 .4"/>
</body>
</replicate>
<replicate count="5" euler="0 0 45">
<body pos="-1.2 -10 3">
<freejoint/>
<geom type="box" size=".9 .5 3"/>
</body>
<body pos="1.2 -10 3">
<freejoint/>
<geom type="box" size=".9 .5 3"/>
</body>
<body pos="0 -10 6.4">
<freejoint/>
<geom type="box" size="2.4 .5 .4"/>
</body>
</replicate>
</worldbody>
</mujoco>
+47
View File
@@ -0,0 +1,47 @@
<mujoco model="Tendon">
<option solver="PGS"/>
<default>
<site size=".02" rgba="0 .8 0 1"/>
<geom condim="1"/>
</default>
<worldbody>
<light pos="1 0 4" dir="-1 0 -4"/>
<light pos="-1 0 4" dir="1 0 -4"/>
<geom type="plane" size="2 2 .01"/>
<site name="ceiling" pos="0.01 0.02 2.4"/>
<body pos="0 0 1.5">
<freejoint/>
<site name="hook" pos="0 0 .3"/>
<site name="bulb"/>
<geom name="bulb" size=".3" rgba="0 0 .8 1" density="100" contype="0" conaffinity="0"/>
</body>
<replicate count="18" euler="0 0 20">
<body pos=".2 0 1.5">
<freejoint/>
<site name="a"/>
<geom rgba=".8 0 .4 1" size=".03"/>
</body>
<body pos="1.2 0 1.5">
<freejoint/>
<site name="b"/>
<geom rgba=".8 .4 0 1" size=".1"/>
</body>
</replicate>
</worldbody>
<tendon>
<spatial springlength="0 0.5" stiffness="10000">
<site site="ceiling"/>
<site site="hook"/>
</spatial>
<spatial range="0 0.5">
<site site="a"/>
<geom geom="bulb" sidesite="bulb"/>
<site site="b"/>
</spatial>
</tendon>
</mujoco>