{
  "parameters": {
    "revision": "C-centred-camera-and-lens",
    "unit": "mm",
    "pcb_width": 38.0,
    "pcb_height": 38.0,
    "pcb_thickness_assumed": 1.6,
    "pcb_hole_diameter": 2.5,
    "pcb_hole_pitch": 30.0,
    "pcb_rear_clearance": 5.0,
    "camera_mount_clearance_hole": 2.8,
    "camera_support_diameter": 6.0,
    "camera_back_frame_size": [
      46.0,
      46.0,
      3.0
    ],
    "camera_back_frame_opening": [
      28.0,
      28.0
    ],
    "camera_nut_pocket_across_flats": 5.3,
    "camera_nut_pocket_depth": 1.5,
    "camera_nut_across_flats": 5.0,
    "camera_nut_thickness": 2.0,
    "camera_washer_thickness": 0.5,
    "camera_washer_maximum_diameter": 5.5,
    "camera_screw_length": 12.0,
    "camera_screw_head_diameter": 4.5,
    "camera_screw_head_height": 2.5,
    "camera_screw_stack_nominal": 10.6,
    "camera_screw_tip_beyond_nut_nominal": 1.4,
    "shaft_bore_diameter": 5.3,
    "shaft_bore_flat_offset": 2.1,
    "shaft_bore_depth": 18.5,
    "m3_tap_pilot": 2.6,
    "upper_counterbore_diameter": 6.2,
    "upper_counterbore_depth": 2.2,
    "upper_remaining_grip": 2.8,
    "m3x6_thread_engagement": 3.2,
    "camera_pcb_back_centre": [
      0.0,
      27.8,
      126.0
    ],
    "camera_height_above_tilt_axis": 0.0,
    "camera_neutral_envelope_centre_xy": [
      0.0,
      0.0
    ],
    "camera_neutral_envelope_size": [
      40.0,
      55.6,
      40.0
    ],
    "camera_centering_basis": "Neutral PCB, lens, C/CS seat and connector envelope; not centre of mass.",
    "tilt_motor_translation_from_source": [
      62.0,
      0.0,
      37.0
    ],
    "yaw_head_clearance_recess_depth": 2.0,
    "tilt_axis_z": 126.0,
    "reference_lens_diameter": 40.0,
    "reference_lens_front_y": -27.8,
    "pitch_check_range_degrees": [
      -35,
      35
    ],
    "pitch_check_step_degrees": 1,
    "hardware": {
      "M3x10": 4,
      "M3x6": 4,
      "M3x5": 1,
      "M2.5x12": 4,
      "M2.5_hex_nut_AF5_thickness2": 4,
      "M2.5_insulating_washer_thickness0.5": 4
    }
  },
  "source_upper_unrotation_degrees": 0.649089605687823,
  "parts": {
    "01-base": {
      "watertight": true,
      "consistent_winding": true,
      "connected_components": 1,
      "vertices": 1064,
      "triangles": 2168,
      "size_mm": [
        80.0,
        80.0,
        63.0
      ],
      "volume_mm3": 57400.5413,
      "minimum_z_mm": 0.0
    },
    "02-upper-m3x6": {
      "watertight": true,
      "consistent_winding": true,
      "connected_components": 1,
      "vertices": 1492,
      "triangles": 3004,
      "size_mm": [
        82.0006,
        42.00001,
        84.0
      ],
      "volume_mm3": 37631.3522,
      "minimum_z_mm": 0.0
    },
    "03-camera-carrier": {
      "watertight": true,
      "consistent_winding": true,
      "connected_components": 1,
      "vertices": 1536,
      "triangles": 3092,
      "size_mm": [
        42.8,
        46.0,
        67.0
      ],
      "volume_mm3": 10806.8609,
      "minimum_z_mm": 0.0
    }
  },
  "sources_sha256": {
    "上座.STL": "6e82a8868ded7e215c8aefbb34f55b9b8d7d93ea279c329bf5f96c52ff2aa2a2",
    "底座.STL": "95b4669d2cd786b7fbc386deec7140499632206715dd7d4e49b5ec98503e909e",
    "激光支座.STL": "a6f45e66364ea782edc06c0db425c9e93d42c19c5799ced4fc057cfb1be8d184"
  },
  "three_mf": {
    "01-base.3mf": {
      "lib3mf_build_items": 1,
      "lib3mf_warnings": [],
      "trimesh_geometry_count": 1,
      "bounds_mm": [
        [
          0.0,
          0.0,
          0.0
        ],
        [
          80.0,
          80.0,
          63.0
        ]
      ]
    },
    "03-camera-carrier.3mf": {
      "lib3mf_build_items": 1,
      "lib3mf_warnings": [],
      "trimesh_geometry_count": 1,
      "bounds_mm": [
        [
          0.0,
          0.0,
          0.0
        ],
        [
          42.8,
          46.0,
          67.0
        ]
      ]
    },
    "IMX477-HQ-print-layout.3mf": {
      "lib3mf_build_items": 3,
      "lib3mf_warnings": [],
      "trimesh_geometry_count": 3,
      "bounds_mm": [
        [
          5.0,
          5.0,
          0.0
        ],
        [
          182.0006,
          106.0,
          84.0
        ]
      ]
    },
    "02-upper-m3x6.3mf": {
      "lib3mf_build_items": 1,
      "lib3mf_warnings": [],
      "trimesh_geometry_count": 1,
      "bounds_mm": [
        [
          0.0,
          0.0,
          0.0
        ],
        [
          82.0006,
          42.0,
          84.0
        ]
      ]
    }
  },
  "camera_centering": {
    "neutral_camera_bounds_mm": [
      [
        -20.0,
        -27.8,
        106.0
      ],
      [
        20.0,
        27.8,
        146.0
      ]
    ],
    "base_centre_xy_mm": [
      0.0,
      0.0
    ],
    "camera_envelope_centre_mm": [
      0.0,
      0.0,
      126.0
    ],
    "centre_offset_xy_mm": [
      0.0,
      0.0
    ],
    "scope": "At zero pitch: real PCB shape and stated reference C/CS lens/connector envelopes, excluding mount and motor. This is geometric centring, not mass balance or a guarantee for another lens."
  },
  "camera_mount": {
    "hole_centres_xz_mm": [
      [
        -15.0,
        111.0
      ],
      [
        -15.0,
        141.0
      ],
      [
        15.0,
        111.0
      ],
      [
        15.0,
        141.0
      ]
    ],
    "hole_pitch_xz_mm": [
      30,
      30
    ],
    "camera_screws": 4,
    "printed_bore_gauge_intersections_mm3": [
      0.0,
      0.0,
      0.0,
      0.0
    ],
    "nominal_stack_including_nut_mm": 10.6,
    "nominal_tip_beyond_nut_mm": 1.4,
    "nut_insertion_sample_count": 68,
    "nut_insertion_collisions": [],
    "scope": "Nominal 1.6mm PCB, 0.5mm washer, 2mm hex nut; plain screw thread envelope, not actual thread engagement, torque, tool-access or PCB component validation."
  },
  "assembly": {
    "angles_degrees": [
      -35,
      35
    ],
    "sample_step_degrees": 1,
    "sample_count": 71,
    "collisions": [],
    "seated_collisions": [],
    "carrier_to_upper_min_gap_mm": 2.5366,
    "scope": "Rigid printed parts, all camera screws/nuts/washers, motor screw heads, reference motors and stated reference lens; excludes cable motion, loads and real hardware."
  },
  "yaw": {
    "sample_step_degrees": 5,
    "sample_count": 72,
    "collisions": [],
    "scope": "Upper seat versus base and four original M3 socket heads; excludes cable twisting and yaw stops."
  },
  "disassembly": {
    "sample_count": 81,
    "collisions": [],
    "scope": "Camera screws/washer withdrawal then outward movement; camera forward, nuts rearward, carrier leaves actual reference D shaft. Includes upper, base, motor envelopes and motor screw heads. Does not model helical thread motion, loose-nut handling or hand/tool reach."
  },
  "combined_pan_pitch": {
    "pitch_step_degrees": 5,
    "yaw_step_degrees": 15,
    "sample_count": 360,
    "collisions": [],
    "scope": "Moving camera, all camera fasteners, reference lens and carrier versus the real original base through combined pan/pitch samples; excludes flexible wiring."
  }
}
