<?xml version="1.0"?>
<!-- MB-001 pan/tilt stereo rig, variant module38_sts3215. Generated by make_handoff.py from cad/mb001_rig.scad. -->
<!-- FRAME: CAD frame, NOT REP-103: z up, cameras look +Y, x to the right when looking along +Y. Units: metres (STL meshes are mm, scaled 0.001).
     pan_joint  : axis +Z through the origin; positive = rotates the cameras LEFT (+Y toward -X).
     tilt_joint : axis +X; positive = pitches the cameras UP.
     Limits: pan +-90 deg (design choice); tilt +-30 deg (ESTIMATE, sources conflict). effort/velocity = servo stall torque / no-load speed from vendor spec (no derating).
     Inertials: servo + camera masses sourced where tagged in params.json; printed-part masses are ESTIMATES (volume x 1.24 g/cm3 x 0.35); Pi/PCA9685/UBEC excluded (no sourced mass). -->
<robot name="mb001_module38_sts3215">
  <link name="base_link">
    <inertial><origin xyz="0.007405 -0.013698 0.012671" rpy="0 0 0"/><mass value="0.09840"/>
      <inertia ixx="1.2394e-04" ixy="-9.9810e-06" ixz="-4.7999e-06" iyy="5.8121e-05" iyz="-1.3035e-05" izz="1.6182e-04"/></inertial>
    <visual name="base"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/base.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_base"><color rgba="0.722 0.769 0.816 1"/></material></visual>
    <visual name="servo_pan"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/servo_pan.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_servo_pan"><color rgba="0.267 0.267 0.267 1"/></material></visual>
    <visual name="pi"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/pi.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_pi"><color rgba="0.133 0.667 0.467 0.35"/></material></visual>
    <visual name="pca9685"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/pca9685.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_pca9685"><color rgba="0.867 0.400 0.133 0.45"/></material></visual>
    <visual name="ubec"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/ubec.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_ubec"><color rgba="0.800 0.200 0.200 0.4"/></material></visual>
    <collision name="base"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/base.stl" scale="0.001 0.001 0.001"/></geometry></collision>
    <collision name="servo_pan"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/servo_pan.stl" scale="0.001 0.001 0.001"/></geometry></collision>
  </link>
  <link name="pan_link">
    <inertial><origin xyz="0.064754 0.000000 0.043044" rpy="0 0 0"/><mass value="0.07040"/>
      <inertia ixx="3.5286e-05" ixy="-2.1978e-21" ixz="-3.8760e-05" iyy="1.5068e-04" iyz="-3.4159e-23" izz="1.2509e-04"/></inertial>
    <visual name="yoke"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/yoke.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_yoke"><color rgba="0.851 0.627 0.357 1"/></material></visual>
    <visual name="horn"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/horn.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_horn"><color rgba="0.867 0.867 0.867 1"/></material></visual>
    <visual name="servo_tilt"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/servo_tilt.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_servo_tilt"><color rgba="0.267 0.267 0.267 1"/></material></visual>
    <collision name="yoke"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/yoke.stl" scale="0.001 0.001 0.001"/></geometry></collision>
    <collision name="horn"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/horn.stl" scale="0.001 0.001 0.001"/></geometry></collision>
    <collision name="servo_tilt"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/servo_tilt.stl" scale="0.001 0.001 0.001"/></geometry></collision>
  </link>
  <link name="tilt_link">
    <inertial><origin xyz="-0.000000 0.000000 0.000000" rpy="0 0 0"/><mass value="0.00950"/>
      <inertia ixx="2.4198e-06" ixy="-2.8817e-23" ixz="-2.1128e-23" iyy="1.4768e-05" iyz="5.1418e-24" izz="1.2380e-05"/></inertial>
    <visual name="cam_bar"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/cam_bar.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_cam_bar"><color rgba="0.976 0.843 0.173 1"/></material></visual>
    <collision name="cam_bar"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/cam_bar.stl" scale="0.001 0.001 0.001"/></geometry></collision>
  </link>
  <link name="cam_left_link">
    <inertial><origin xyz="0.000000 0.007500 0.000000" rpy="0 0 0"/><mass value="0.10000"/>
      <inertia ixx="1.3908e-05" ixy="0.0000e+00" ixz="0.0000e+00" iyy="2.4067e-05" iyz="0.0000e+00" izz="1.3908e-05"/></inertial>
    <visual name="cam_body_L"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/cam_body_L.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_cam_body_L"><color rgba="0.133 0.133 0.133 1"/></material></visual>
    <visual name="lens_L"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/lens_L.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_lens_L"><color rgba="0.400 0.533 0.800 1"/></material></visual>
  </link>
  <link name="cam_right_link">
    <inertial><origin xyz="0.000000 0.007500 0.000000" rpy="0 0 0"/><mass value="0.10000"/>
      <inertia ixx="1.3908e-05" ixy="0.0000e+00" ixz="0.0000e+00" iyy="2.4067e-05" iyz="0.0000e+00" izz="1.3908e-05"/></inertial>
    <visual name="cam_body_R"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/cam_body_R.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_cam_body_R"><color rgba="0.133 0.133 0.133 1"/></material></visual>
    <visual name="lens_R"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sts3215/parts_stl/lens_R.stl" scale="0.001 0.001 0.001"/></geometry><material name="m_lens_R"><color rgba="0.400 0.533 0.800 1"/></material></visual>
  </link>
  <link name="cam_left_pinhole"/>
  <link name="cam_right_pinhole"/>
  <joint name="pan_joint" type="revolute">
    <parent link="base_link"/><child link="pan_link"/><origin xyz="0.000000 0.000000 0.038000" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-1.570796" upper="1.570796" effort="1.9123" velocity="5.4454"/>
    <dynamics damping="0.01" friction="0.01"/>
  </joint>
  <joint name="tilt_joint" type="revolute">
    <parent link="pan_link"/><child link="tilt_link"/><origin xyz="0.000000 0.000000 0.039000" rpy="0 0 0"/>
    <axis xyz="1 0 0"/>
    <limit lower="-0.523599" upper="0.523599" effort="1.9123" velocity="5.4454"/>
    <dynamics damping="0.01" friction="0.01"/>
  </joint>
  <joint name="cam_left_joint" type="fixed">
    <parent link="tilt_link"/><child link="cam_left_link"/><origin xyz="-0.031500 0.002000 0.000000" rpy="0 0 0"/>
  </joint>
  <joint name="cam_right_joint" type="fixed">
    <parent link="tilt_link"/><child link="cam_right_link"/><origin xyz="0.031500 0.002000 0.000000" rpy="0 0 0"/>
  </joint>
  <!-- projection centre ASSUMED at the lens front face (cam origin + (0, cd+3, 0)); real optical centre unknown -->
  <joint name="cam_left_pinhole_joint" type="fixed">
    <parent link="cam_left_link"/><child link="cam_left_pinhole"/><origin xyz="0.000000 0.018000 0.000000" rpy="0 0 0"/>
  </joint>
  <joint name="cam_right_pinhole_joint" type="fixed">
    <parent link="cam_right_link"/><child link="cam_right_pinhole"/><origin xyz="0.000000 0.018000 0.000000" rpy="0 0 0"/>
  </joint>
</robot>
