<?xml version="1.0"?>
<!-- MB-001 pan/tilt stereo rig, variant brio_mg996r. 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_brio_mg996r">
  <link name="base_link">
    <inertial><origin xyz="0.006084 -0.013660 0.015021" rpy="0 0 0"/><mass value="0.09870"/>
      <inertia ixx="1.2874e-04" ixy="-8.2026e-06" ixz="-4.9105e-06" iyy="6.1323e-05" iyz="-1.6207e-05" izz="1.5815e-04"/></inertial>
    <visual name="base"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/parts_stl/servo_pan.stl" scale="0.001 0.001 0.001"/></geometry></collision>
  </link>
  <link name="pan_link">
    <inertial><origin xyz="0.061088 0.000000 0.067054" rpy="0 0 0"/><mass value="0.07310"/>
      <inertia ixx="6.8818e-05" ixy="-2.2921e-22" ixz="-6.3649e-05" iyy="1.9971e-04" iyz="-5.4430e-23" izz="1.3890e-04"/></inertial>
    <visual name="yoke"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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/brio_mg996r/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.01960"/>
      <inertia ixx="2.4341e-05" ixy="-4.6048e-24" ixz="4.2462e-23" iyy="4.4528e-05" iyz="-2.1979e-23" izz="2.0245e-05"/></inertial>
    <visual name="cam_bar"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/brio_mg996r/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/brio_mg996r/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.013250 0.000000" rpy="0 0 0"/><mass value="0.06500"/>
      <inertia ixx="6.0159e-05" ixy="0.0000e+00" ixz="0.0000e+00" iyy="6.0304e-05" iyz="0.0000e+00" izz="7.7526e-06"/></inertial>
    <visual name="cam_body_L"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/brio_mg996r/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/brio_mg996r/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.013250 0.000000" rpy="0 0 0"/><mass value="0.06500"/>
      <inertia ixx="6.0159e-05" ixy="0.0000e+00" ixz="0.0000e+00" iyy="6.0304e-05" iyz="0.0000e+00" izz="7.7526e-06"/></inertial>
    <visual name="cam_body_R"><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="../models/brio_mg996r/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/brio_mg996r/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.045900" rpy="0 0 0"/>
    <axis xyz="0 0 1"/>
    <limit lower="-1.570796" upper="1.570796" effort="1.0787" velocity="6.9813"/>
    <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.071000" rpy="0 0 0"/>
    <axis xyz="1 0 0"/>
    <limit lower="-0.523599" upper="0.523599" effort="1.0787" velocity="6.9813"/>
    <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.029500 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.029500 0.000000" rpy="0 0 0"/>
  </joint>
</robot>
