Skip to content

Commit e44555e

Browse files
authored
Merge pull request #155 from jonzamora/main
Add ARX L5 arm
2 parents c4ea7d4 + 4b18dae commit e44555e

File tree

16 files changed

+347871
-0
lines changed

16 files changed

+347871
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ Menagerie, see [CONTRIBUTING](CONTRIBUTING.md).
172172

173173
| Name | Maker | DoFs | License | MJX |
174174
|------|-------|---------|---------|-----|
175+
| ARX L5 | ARX Robotics | 7 | [BSD-3-Clause](arx_l5/LICENSE) |✖️|
175176
| PiPER | AgileX | 7 | [MIT](agilex_piper/LICENSE) |✖️|
176177
| FR3 | Franka Robotics | 7 | [Apache-2.0](franka_fr3/LICENSE) |✖️|
177178
| iiwa14 | KUKA | 7 | [BSD-3-Clause](kuka_iiwa_14/LICENSE) |✖️|

arx_l5/LICENSE

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

arx_l5/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## ARX L5 Description (MJCF)
2+
3+
> Requires MuJoCo 3.1.3 or later.
4+
5+
### Overview
6+
7+
This package contains a simplified robot description (MJCF) of the [ARX L5](https://arx-x.com/). It is derived from [ARX's official model repository](https://github.com/ARXroboticsX/ARX_Model). The initial URDF can be found at the following [commit SHA](https://github.com/ARXroboticsX/ARX_Model/tree/af6fe43c873008a85bce6195c0f2160f1a1c14ce/X5/X5A).
8+
9+
<p float="left">
10+
<img src="arx_l5.png" width="400">
11+
</p>
12+
13+
### Derivation steps
14+
15+
1. Added `<mujoco> <compiler balanceinertia="true" discardvisual="false"/> </mujoco>` to the URDF's
16+
`<robot>` clause in order to preserve visual geometries.
17+
2. Loaded the URDF into MuJoCo and saved a corresponding MJCF.
18+
3. Converted the .stls to .objs and replaced the original .stls with them (since each .obj in MuJoCo can have 1 color).
19+
4. Merged similar materials between the .objs.
20+
5. Created a `<default>` section to define common properties for joints, actuators, and geoms.
21+
6. Added an equality constraint so that the right finger mimics the position of the left finger.
22+
7. Manually designed box collision geoms for the gripper.
23+
8. Added `exclude` clause to prevent collisions between `base_link` and `link1`.
24+
9. Added position controlled actuators.
25+
10. Added `impratio=10` and `cone=elliptic` for better noslip.
26+
11. Added `scene.xml` which includes the robot with a textured groundplane, skybox, and haze.
27+
28+
## License
29+
30+
This model is released under a [BSD-3-Clause License](LICENSE).
31+
32+
## Acknowledgement
33+
34+
This model was graciously contributed by [Jonathan Zamora](https://jonzamora.dev/).

arx_l5/arx_l5.png

1.26 MB
Loading

arx_l5/arx_l5.xml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
<mujoco model="ARX L5">
2+
<compiler angle="radian" meshdir="assets"/>
3+
4+
<option integrator="implicitfast" cone="elliptic" impratio="10"/>
5+
6+
<default>
7+
<default class="arx_l5">
8+
<joint frictionloss="0.3" armature="0.005"/>
9+
<position inheritrange="1" forcerange="-100 100"/>
10+
<default class="finger">
11+
<joint frictionloss="0" type="slide"/>
12+
<position forcerange="-10 10"/>
13+
</default>
14+
<default class="visual">
15+
<geom group="2" type="mesh" contype="0" conaffinity="0" density="0"/>
16+
</default>
17+
<default class="collision">
18+
<geom group="3" type="capsule"/>
19+
</default>
20+
</default>
21+
</default>
22+
23+
<asset>
24+
<material name="black_mat" rgba="0.1 0.1 0.1 1"/>
25+
26+
<mesh name="base_link" file="base_link.obj"/>
27+
<mesh name="link1" file="link1.obj"/>
28+
<mesh name="link2" file="link2.obj"/>
29+
<mesh name="link3" file="link3.obj"/>
30+
<mesh name="link4" file="link4.obj"/>
31+
<mesh name="link5" file="link5.obj"/>
32+
<mesh name="link6" file="link6.obj"/>
33+
<mesh name="link7" file="link7.obj"/>
34+
<mesh name="link8" file="link8.obj"/>
35+
<mesh name="camera" file="camera.obj"/>
36+
</asset>
37+
38+
<worldbody>
39+
<light mode="targetbodycom" target="link8" pos="1 0 1"/>
40+
<body name="base_link">
41+
<geom mesh="base_link" material="black_mat" class="visual"/>
42+
<geom mesh="base_link" class="collision"/>
43+
<body name="link1" pos="0 0 0.0565">
44+
<inertial pos="0.0050395 -0.0077407 0.020897" quat="0.632157 0.714526 -0.263733 0.142391" mass="0.096804"
45+
diaginertia="0.000118945 9.40205e-05 4.70346e-05"/>
46+
<joint name="joint1" axis="0 0 1" range="-3.14 3.14"/>
47+
<geom mesh="link1" material="black_mat" class="visual"/>
48+
<geom mesh="link1" class="collision"/>
49+
<body name="link2" pos="0.02 0 0.047">
50+
<inertial pos="-0.12992 -0.0011822 -2.6366e-05" quat="0.501263 0.501263 0.498734 0.498734" mass="1.1988"
51+
diaginertia="0.0164704 0.01646 0.000649595"/>
52+
<joint name="joint2" axis="0 1 0" range="0 3.14"/>
53+
<geom mesh="link2" material="black_mat" class="visual"/>
54+
<geom mesh="link2" class="collision"/>
55+
<body name="link3" pos="-0.264 0 0" quat="-3.67321e-06 -1 0 0">
56+
<inertial pos="0.16181 0.0011723 -0.05455" quat="0.518857 0.484372 0.465704 0.52848" mass="0.84082"
57+
diaginertia="0.0084909 0.00841207 0.000747034"/>
58+
<joint name="joint3" axis="0 1 0" range="0 3.14"/>
59+
<geom mesh="link3" material="black_mat" class="visual"/>
60+
<geom mesh="link3" class="collision"/>
61+
<geom type="box" size="0.062 0.001 0.01" pos="0.112 -0.025 -0.06" rgba="1 0 0 1" class="visual"/>
62+
<geom type="box" size="0.062 0.001 0.01" pos="0.112 0.023 -0.06" rgba="1 0 0 1" class="visual"/>
63+
<body name="link4" pos="0.245 -5e-05 -0.06">
64+
<inertial pos="0.041751 0.0054236 -0.03337" quat="0.919386 -0.0641253 0.311071 -0.23206" mass="0.12432"
65+
diaginertia="0.000303193 0.000235316 0.000101491"/>
66+
<joint name="joint4" axis="0 1 0" range="-1.7 1.7"/>
67+
<geom mesh="link4" material="black_mat" class="visual"/>
68+
<geom mesh="link4" class="collision"/>
69+
<body name="link5" pos="0.073914 5e-05 -0.083391">
70+
<inertial pos="-8.3435e-05 -1.5428e-05 0.052216" quat="0.998247 0 -0.0591776 0" mass="0.63601"
71+
diaginertia="0.000848329 0.00082 0.000251671"/>
72+
<joint name="joint5" axis="0 0 1" range="-1.7 1.7"/>
73+
<geom mesh="link5" material="black_mat" class="visual"/>
74+
<geom mesh="link5" class="collision"/>
75+
<body name="link6" pos="0.025286 0 0.083391" quat="-3.67321e-06 1 0 0">
76+
<inertial pos="0.041697 2.4368e-05 0.00014464" quat="0.5 0.5 -0.5 0.5" mass="0.44089"
77+
diaginertia="0.0005 0.00038 0.00028"/>
78+
<joint name="joint6" axis="1 0 0" range="-3.14 3.14"/>
79+
<geom mesh="link6" material="black_mat" class="visual"/>
80+
<geom mesh="link6" class="collision"/>
81+
<geom mesh="camera" pos="0.06 0 -0.01" quat="-1 0 0 1" material="black_mat" class="visual"/>
82+
<geom mesh="camera" pos="0.06 0 -0.01" quat="-1 0 0 1" class="collision"/>
83+
<camera name="wrist_cam" pos="0.0475 0 0.075" mode="fixed" euler="0 -1.1 -1.5708"
84+
focal="1.93e-3 1.93e-3" resolution="1280 720" sensorsize="3896e-6 2140e-6"/>
85+
<body name="link7" pos="0.08657 0.024896 -0.0002436" gravcomp="1">
86+
<inertial pos="-0.00035522 -0.007827 -0.0029883" quat="0.5 0.5 0.5 0.5" mass="0.064798"
87+
diaginertia="3e-05 3e-05 2e-05"/>
88+
<joint name="joint7" axis="0 1 0" class="finger" range="0 0.044"/>
89+
<geom mesh="link7" material="black_mat" class="visual"/>
90+
<geom type="box" size=".02 .002 .00525" pos="0.05 -0.023 0" rgba="1 0 0 1" class="collision"/>
91+
<geom type="box" size=".015 .002 .018" pos="0.015 -0.023 0" rgba="0 0 1 1" class="collision"/>
92+
</body>
93+
<body name="link8" pos="0.08657 -0.0249 -0.00024366" gravcomp="1">
94+
<inertial pos="-0.000355223 0.00782769 0.00242006" quat="0.5 0.5 0.5 0.5" mass="0.0647982"
95+
diaginertia="3e-05 3e-05 2e-05"/>
96+
<joint name="joint8" axis="0 1 0" class="finger" range="-0.044 0"/>
97+
<geom mesh="link8" material="black_mat" class="visual"/>
98+
<geom type="box" size=".02 .002 .00525" pos="0.05 0.023 0" rgba="1 0 0 1" class="collision"/>
99+
<geom type="box" size=".015 .002 .018" pos="0.015 0.023 0" rgba="0 0 1 1" class="collision"/>
100+
</body>
101+
</body>
102+
</body>
103+
</body>
104+
</body>
105+
</body>
106+
</body>
107+
</body>
108+
</worldbody>
109+
110+
<contact>
111+
<exclude body1="base_link" body2="link1"/>
112+
</contact>
113+
114+
<equality>
115+
<joint joint1="joint7" joint2="joint8" polycoef="0 -1 0 0 0"/>
116+
</equality>
117+
118+
<actuator>
119+
<position name="joint1" joint="joint1" class="arx_l5" kp="80" kv="5"/>
120+
<position name="joint2" joint="joint2" class="arx_l5" kp="80" kv="5"/>
121+
<position name="joint3" joint="joint3" class="arx_l5" kp="80" kv="5"/>
122+
<position name="joint4" joint="joint4" class="arx_l5" kp="40" kv="5"/>
123+
<position name="joint5" joint="joint5" class="arx_l5" kp="10" kv="1.5"/>
124+
<position name="joint6" joint="joint6" class="arx_l5" kp="10" kv="1.5"/>
125+
<position name="gripper" joint="joint7" class="finger" kp="40" kv="5"/>
126+
</actuator>
127+
128+
<keyframe>
129+
<key name="home" qpos="0 0.251 0.314 0 0 0 0.044 -0.044" ctrl="0 0.251 0.314 0 0 0 0.044"/>
130+
</keyframe>
131+
</mujoco>

0 commit comments

Comments
 (0)