<?xml version="1.0"?>
<robot name="exact_module">
  <!-- base = servo body + holder (bolted to the body-mount holes) -->
  <link name="base_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry><mesh filename="st3215.stl" scale="0.001 0.001 0.001"/></geometry>
      <material name="servo"><color rgba="0.35 0.35 0.4 1"/></material>
    </visual>
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry><mesh filename="holder_wrap.stl" scale="0.001 0.001 0.001"/></geometry>
      <material name="holder"><color rgba="0.2 0.5 0.85 1"/></material>
    </visual>
  </link>

  <!-- output joint: revolute about +Y through the real output axis (-25.5, 0) mm -->
  <joint name="output" type="revolute">
    <parent link="base_link"/>
    <child link="yoke_link"/>
    <origin xyz="-0.0255 0 0" rpy="0 0 0"/>
    <axis xyz="0 1 0"/>
    <limit lower="-2.0" upper="2.0" effort="2.94" velocity="3.0"/>
  </joint>

  <!-- yoke = grips horn (front) + idler (back), exact bolt circles -->
  <link name="yoke_link">
    <visual>
      <origin xyz="0.0255 0 0" rpy="0 0 0"/>
      <geometry><mesh filename="yoke_exact.stl" scale="0.001 0.001 0.001"/></geometry>
      <material name="yoke"><color rgba="0.85 0.6 0.2 1"/></material>
    </visual>
  </link>
</robot>
