<?xml version="1.0"?>
<!-- MB-001 pan/tilt stereo rig, variant module38_sh0257. 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_sh0257">
  <link name="base_link">
    <inertial><origin xyz="0.001552 -0.024148 0.006311" rpy="0 0 0"/><mass value="0.05590"/>
      <inertia ixx="9.9135e-05" ixy="-2.0956e-06" ixz="-7.3111e-07" iyy="3.7429e-05" iyz="-4.4698e-06" izz="1.3210e-04"/></inertial>
    <visual name="base"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sh0257/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_sh0257/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_sh0257/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_sh0257/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_sh0257/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_sh0257/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_sh0257/parts_stl/servo_pan.stl" scale="0.001 0.001 0.001"/></geometry></collision>
  </link>
  <link name="pan_link">
    <inertial><origin xyz="0.037160 -0.000000 0.028145" rpy="0 0 0"/><mass value="0.02920"/>
      <inertia ixx="1.3265e-05" ixy="1.4963e-21" ixz="-1.8014e-05" iyy="8.9386e-05" iyz="-7.1817e-23" izz="8.0557e-05"/></inertial>
    <visual name="yoke"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sh0257/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_sh0257/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_sh0257/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_sh0257/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_sh0257/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_sh0257/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="4.6083e-23" ixz="-2.5615e-23" iyy="1.4768e-05" iyz="2.8981e-24" izz="1.2380e-05"/></inertial>
    <visual name="cam_bar"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/module38_sh0257/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_sh0257/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="-2.5460e-22" 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_sh0257/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_sh0257/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="-2.5460e-22" 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_sh0257/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_sh0257/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.028400" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-1.570796" upper="1.570796" effort="0.2157" velocity="11.6413"/>
    <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="0.2157" velocity="11.6413"/>
    <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>
