SO-ARM100
The Robot Studio · licence Apache-2.0 · source: github.com/TheRobotStudio/SO-ARM100 @ 63eede5a6
What you are looking at is RobotDescription.from_urdf(original).to_urdf_string(): the reference implementation's re-serialisation of the original file, not the original file itself.
Loading the model…
drag to orbit · scroll to zoom · right-drag to pan
robot.urdf
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by bam_robot_descriptions (py backend), content 2ae31c9d97930141 -->
<robot name="so_arm100">
<material name="3d_printed">
<color rgba="1.0 0.82 0.12 1.0" />
</material>
<material name="sts3215">
<color rgba="0.1 0.1 0.1 1.0" />
</material>
<link name="base">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Base.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Base_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Base.stl" />
</geometry>
</collision>
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<mass value="1.0" />
<inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" />
</inertial>
</link>
<link name="shoulder">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Rotation_Pitch.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Rotation_Pitch_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Rotation_Pitch.stl" />
</geometry>
</collision>
<inertial>
<origin xyz="-9.07886e-05 0.0590972 0.031089" rpy="0.0 0.0 0.0" />
<mass value="0.119226" />
<inertia ixx="5.94278e-05" ixy="0.0" ixz="0.0" iyy="5.89975e-05" iyz="0.0" izz="3.13712e-05" />
</inertial>
</link>
<link name="upper_arm">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Upper_Arm.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Upper_Arm_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Upper_Arm.stl" />
</geometry>
</collision>
<inertial>
<origin xyz="-1.72052e-05 0.0701802 0.00310545" rpy="0.0 0.0 0.0" />
<mass value="0.162409" />
<inertia ixx="0.000213312" ixy="0.0" ixz="0.0" iyy="0.000167164" iyz="0.0" izz="7.01522e-05" />
</inertial>
</link>
<link name="lower_arm">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Lower_Arm.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Lower_Arm_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Lower_Arm.stl" />
</geometry>
</collision>
<inertial>
<origin xyz="-0.00339604 0.00137796 0.0768007" rpy="0.0 0.0 0.0" />
<mass value="0.147968" />
<inertia ixx="0.000138803" ixy="0.0" ixz="0.0" iyy="0.000107748" iyz="0.0" izz="4.84242e-05" />
</inertial>
</link>
<link name="wrist">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Wrist_Pitch_Roll.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Wrist_Pitch_Roll_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Wrist_Pitch_Roll.stl" />
</geometry>
</collision>
<inertial>
<origin xyz="-0.00852653 -0.0352279 -2.34622e-05" rpy="0.0 0.0 0.0" />
<mass value="0.0661321" />
<inertia ixx="3.45403e-05" ixy="0.0" ixz="0.0" iyy="2.39041e-05" iyz="0.0" izz="1.94704e-05" />
</inertial>
</link>
<link name="gripper">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Fixed_Jaw.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Fixed_Jaw_Motor.stl" />
</geometry>
<material name="sts3215" />
</visual>
<inertial>
<origin xyz="0.00552377 -0.0280167 0.000483583" rpy="0.0 0.0 0.0" />
<mass value="0.0929859" />
<inertia ixx="5.03136e-05" ixy="0.0" ixz="0.0" iyy="4.64098e-05" iyz="0.0" izz="2.72961e-05" />
</inertial>
</link>
<link name="jaw">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
<geometry>
<mesh filename="assets/Moving_Jaw.stl" />
</geometry>
<material name="3d_printed" />
</visual>
<inertial>
<origin xyz="-0.00161745 -0.0303473 0.000449646" rpy="0.0 0.0 0.0" />
<mass value="0.0202444" />
<inertia ixx="1.11265e-05" ixy="0.0" ixz="0.0" iyy="8.99651e-06" iyz="0.0" izz="2.99548e-06" />
</inertial>
</link>
<joint name="1" type="revolute">
<origin xyz="0.0 -0.0452 0.0165" rpy="1.57079 0.0 0.0" />
<parent link="base" />
<child link="shoulder" />
<axis xyz="0.0 1.0 0.0" />
<limit effort="35.0" velocity="1.0" lower="-2.0" upper="2.0" />
<dynamics damping="0.0" friction="0.0" />
</joint>
<joint name="2" type="revolute">
<origin xyz="0.0 0.1025 0.0306" rpy="-1.8 0.0 0.0" />
<parent link="shoulder" />
<child link="upper_arm" />
<axis xyz="1.0 0.0 0.0" />
<limit effort="35.0" velocity="1.0" lower="0.0" upper="3.5" />
<dynamics damping="0.0" friction="0.0" />
</joint>
<joint name="3" type="revolute">
<origin xyz="0.0 0.11257 0.028" rpy="1.57079 0.0 0.0" />
<parent link="upper_arm" />
<child link="lower_arm" />
<axis xyz="1.0 0.0 0.0" />
<limit effort="35.0" velocity="1.0" lower="-3.14158" upper="0.0" />
<dynamics damping="0.0" friction="0.0" />
</joint>
<joint name="4" type="revolute">
<origin xyz="0.0 0.0052 0.1349" rpy="-1.0 0.0 0.0" />
<parent link="lower_arm" />
<child link="wrist" />
<axis xyz="1.0 0.0 0.0" />
<limit effort="35.0" velocity="1.0" lower="-2.5" upper="1.2" />
<dynamics damping="0.0" friction="0.0" />
</joint>
<joint name="5" type="revolute">
<origin xyz="0.0 -0.0601 0.0" rpy="0.0 1.57079 0.0" />
<parent link="wrist" />
<child link="gripper" />
<axis xyz="0.0 1.0 0.0" />
<limit effort="35.0" velocity="1.0" lower="-3.14158" upper="3.14158" />
<dynamics damping="0.0" friction="0.0" />
</joint>
<joint name="6" type="revolute">
<origin xyz="-0.0202 -0.0244 0.0" rpy="0.0 3.14158 0.0" />
<parent link="gripper" />
<child link="jaw" />
<axis xyz="0.0 0.0 1.0" />
<limit effort="35.0" velocity="1.0" lower="-0.2" upper="2.0" />
<dynamics damping="0.0" friction="0.0" />
</joint>
</robot>
robot.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated by bam_robot_descriptions (mjcf backend), content 2ae31c9d97930141 -->
<mujoco model="so_arm100">
<compiler angle="radian" autolimits="true" meshdir="assets/" inertiafromgeom="false" balanceinertia="false" />
<asset>
<material name="3d_printed" rgba="1.0 0.82 0.12 1.0" />
<material name="sts3215" rgba="0.1 0.1 0.1 1.0" />
<mesh name="Base" file="assets/Base.stl" />
<mesh name="Base_Motor" file="assets/Base_Motor.stl" />
<mesh name="Rotation_Pitch" file="assets/Rotation_Pitch.stl" />
<mesh name="Rotation_Pitch_Motor" file="assets/Rotation_Pitch_Motor.stl" />
<mesh name="Upper_Arm" file="assets/Upper_Arm.stl" />
<mesh name="Upper_Arm_Motor" file="assets/Upper_Arm_Motor.stl" />
<mesh name="Lower_Arm" file="assets/Lower_Arm.stl" />
<mesh name="Lower_Arm_Motor" file="assets/Lower_Arm_Motor.stl" />
<mesh name="Wrist_Pitch_Roll" file="assets/Wrist_Pitch_Roll.stl" />
<mesh name="Wrist_Pitch_Roll_Motor" file="assets/Wrist_Pitch_Roll_Motor.stl" />
<mesh name="Fixed_Jaw" file="assets/Fixed_Jaw.stl" />
<mesh name="Fixed_Jaw_Motor" file="assets/Fixed_Jaw_Motor.stl" />
<mesh name="Moving_Jaw" file="assets/Moving_Jaw.stl" />
</asset>
<worldbody>
<body name="base">
<inertial pos="0.0 0.0 0.0" mass="1.0" fullinertia="0.01 0.01 0.01 0.0 0.0 0.0" />
<geom name="base_vis_0" type="mesh" mesh="Base" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="base_vis_1" type="mesh" mesh="Base_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<geom name="base_col_0" type="mesh" mesh="Base" group="3" />
<body name="shoulder" pos="0.0 -0.0452 0.0165" quat="0.7071090180427968 0.7071045443232221 0.0 0.0">
<joint name="1" type="hinge" axis="0.0 1.0 0.0" range="-2.0 2.0" />
<inertial pos="-9.07886e-05 0.0590972 0.031089" mass="0.119226" fullinertia="5.94278e-05 5.89975e-05 3.13712e-05 0.0 0.0 0.0" />
<geom name="shoulder_vis_0" type="mesh" mesh="Rotation_Pitch" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="shoulder_vis_1" type="mesh" mesh="Rotation_Pitch_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<geom name="shoulder_col_0" type="mesh" mesh="Rotation_Pitch" group="3" />
<body name="upper_arm" pos="0.0 0.1025 0.0306" quat="0.6216099682706644 -0.7833269096274834 0.0 0.0">
<joint name="2" type="hinge" axis="1.0 0.0 0.0" range="0.0 3.5" />
<inertial pos="-1.72052e-05 0.0701802 0.00310545" mass="0.162409" fullinertia="0.000213312 0.000167164 7.01522e-05 0.0 0.0 0.0" />
<geom name="upper_arm_vis_0" type="mesh" mesh="Upper_Arm" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="upper_arm_vis_1" type="mesh" mesh="Upper_Arm_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<geom name="upper_arm_col_0" type="mesh" mesh="Upper_Arm" group="3" />
<body name="lower_arm" pos="0.0 0.11257 0.028" quat="0.7071090180427968 0.7071045443232221 0.0 0.0">
<joint name="3" type="hinge" axis="1.0 0.0 0.0" range="-3.14158 0.0" />
<inertial pos="-0.00339604 0.00137796 0.0768007" mass="0.147968" fullinertia="0.000138803 0.000107748 4.84242e-05 0.0 0.0 0.0" />
<geom name="lower_arm_vis_0" type="mesh" mesh="Lower_Arm" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="lower_arm_vis_1" type="mesh" mesh="Lower_Arm_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<geom name="lower_arm_col_0" type="mesh" mesh="Lower_Arm" group="3" />
<body name="wrist" pos="0.0 0.0052 0.1349" quat="0.8775825618903728 -0.479425538604203 0.0 0.0">
<joint name="4" type="hinge" axis="1.0 0.0 0.0" range="-2.5 1.2" />
<inertial pos="-0.00852653 -0.0352279 -2.34622e-05" mass="0.0661321" fullinertia="3.45403e-05 2.39041e-05 1.94704e-05 0.0 0.0 0.0" />
<geom name="wrist_vis_0" type="mesh" mesh="Wrist_Pitch_Roll" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="wrist_vis_1" type="mesh" mesh="Wrist_Pitch_Roll_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<geom name="wrist_col_0" type="mesh" mesh="Wrist_Pitch_Roll" group="3" />
<body name="gripper" pos="0.0 -0.0601 0.0" quat="0.7071090180427968 0.0 0.7071045443232221 0.0">
<joint name="5" type="hinge" axis="0.0 1.0 0.0" range="-3.14158 3.14158" />
<inertial pos="0.00552377 -0.0280167 0.000483583" mass="0.0929859" fullinertia="5.03136e-05 4.64098e-05 2.72961e-05 0.0 0.0 0.0" />
<geom name="gripper_vis_0" type="mesh" mesh="Fixed_Jaw" contype="0" conaffinity="0" group="2" material="3d_printed" />
<geom name="gripper_vis_1" type="mesh" mesh="Fixed_Jaw_Motor" contype="0" conaffinity="0" group="2" material="sts3215" />
<body name="jaw" pos="-0.0202 -0.0244 0.0" quat="6.326794896668469e-06 0.0 0.9999999999799858 0.0">
<joint name="6" type="hinge" axis="0.0 0.0 1.0" range="-0.2 2.0" />
<inertial pos="-0.00161745 -0.0303473 0.000449646" mass="0.0202444" fullinertia="1.11265e-05 8.99651e-06 2.99548e-06 0.0 0.0 0.0" />
<geom name="jaw_vis_0" type="mesh" mesh="Moving_Jaw" contype="0" conaffinity="0" group="2" material="3d_printed" />
</body>
</body>
</body>
</body>
</body>
</body>
</body>
</worldbody>
<contact>
<exclude body1="base" body2="shoulder" />
<exclude body1="shoulder" body2="upper_arm" />
<exclude body1="upper_arm" body2="lower_arm" />
<exclude body1="lower_arm" body2="wrist" />
<exclude body1="wrist" body2="gripper" />
<exclude body1="gripper" body2="jaw" />
</contact>
</mujoco>
Import report
Counts
| Links | 7 |
|---|---|
| Joints | 6 |
| Moving joints | 6 |
| Visuals | 13 |
| Collisions | 5 |
| Materials | 2 |
Meshes
Formats: stl.
Asset size: 3.0 MB.
Dropped on import
| Tag | Count | Why |
|---|---|---|
transmission | 6 | ROS transmissions (actuator-to-joint wiring) have no RobotDescription field yet |
Forward-kinematics check
Forward kinematics of 7 link frames at 20 random joint positions within limits, original URDF against robot.urdf, computed by pinocchio 3.8.0. Worst difference: 0.0e+00 m · 8.9e-16 rad.
MuJoCo
robot.xml compiles in MuJoCo with its meshes (nq = 6).
Source & licence
| Repository | https://github.com/TheRobotStudio/SO-ARM100 |
|---|---|
| Commit | 63eede5a636e548eb8f2854e558bd343c21db9f7 |
| Original file | Simulation/SO100/so100.urdf |
| Licence | Apache-2.0 · the upstream LICENSE file |
| Files | robot.urdf · robot.xml |
Meshes are copied verbatim from the repository at the pinned commit and keep their upstream licence.