{
  "name": "V1-PROOF",
  "revision": "2026-09-28-B",
  "status": "simulation-backed component baseline; physical qualification open",
  "actuators": {
    "wheels": 2,
    "legs": 2
  },
  "limits": {
    "budget_usd_exclusive": 1000,
    "mass_target_kg": 2.5,
    "mass_max_kg": 3.0,
    "speed_ms": 0.5,
    "cruise_ms": 0.25
  },
  "geometry": {
    "wheel_diameter_mm": 100,
    "wheel_width_mm": 25,
    "wheel_track_mm": 230,
    "link_length_mm": 110,
    "pivot_separation_mm": 40,
    "leg_angle_deg": [
      15,
      45
    ],
    "neutral_angle_deg": 30,
    "body_above_lower_pivot_mm": 150,
    "body_width_mm": 110,
    "body_depth_mm": 120,
    "leg_reduction": 3,
    "transmission_efficiency_assumed": 0.85
  },
  "power": {
    "battery_class": "3S lithium pack, approximately 2.2 Ah",
    "nominal_v": 11.1,
    "full_v": 12.6,
    "screen_min_v": 9.9,
    "capacity_ah": 2.2
  },
  "wheel_screen": {
    "reference": "Pololu 4752, 30:1 37D 12 V gearmotor with encoder",
    "reference_v": 12,
    "no_load_rpm": 330,
    "stall_extrapolation_nm": 1.372931,
    "stall_extrapolation_a": 5.5,
    "no_load_a": 0.2,
    "proposed_peak_current_limit_a": 2.5,
    "proposed_rms_current_limit_a": 1.2,
    "lean_screen_deg": 10,
    "rolling_resistance_assumed": 0.03,
    "demand_multiplier": 2.5,
    "minimum_measured_peak_nm": 0.5,
    "minimum_measured_continuous_nm": 0.15
  },
  "leg_screen": {
    "worst_two_wheel_load_share": 0.6,
    "required_mounted_hold_nm": 0.75,
    "required_short_peak_nm": 1.0,
    "hold_test_minutes": 10
  },
  "mass_items": [
    {
      "item": "Two wheel gearmotors with encoders",
      "kg": 0.4
    },
    {
      "item": "Wheels, hubs and axle support bearings",
      "kg": 0.25
    },
    {
      "item": "Two leg servos",
      "kg": 0.14
    },
    {
      "item": "Links, pivots, belts and pulleys",
      "kg": 0.32
    },
    {
      "item": "Chassis and fasteners",
      "kg": 0.38
    },
    {
      "item": "Battery",
      "kg": 0.2
    },
    {
      "item": "MCU, IMU, receiver and drivers",
      "kg": 0.15
    },
    {
      "item": "Wiring, regulators and switches",
      "kg": 0.15
    },
    {
      "item": "Rest skids and bumpers",
      "kg": 0.12
    },
    {
      "item": "Unallocated mass allowance",
      "kg": 0.39
    }
  ],
  "budget": {
    "shipping_tax_usd": 100,
    "repair_contingency_usd": 125,
    "confirmed_reuse_credit_usd": 0,
    "rows": [
      {
        "id": "wheel_motors",
        "qty": 2,
        "item": "Pololu 4752 12 V 30:1 encoder gearmotors",
        "unit_cap_usd": 62.5,
        "stage": "P1",
        "reuse": "Only a matched pair with useful encoders, reversal response and load data",
        "source": "wheel_motor"
      },
      {
        "id": "wheel_drivers",
        "qty": 2,
        "item": "Pololu 4035 DRV8874 carriers + current-limit passives",
        "unit_cap_usd": 20,
        "stage": "P1",
        "reuse": "Existing drone ESCs do not substitute for a brushed H-bridge",
        "source": "wheel_driver"
      },
      {
        "id": "leg_servos",
        "qty": 2,
        "item": "Waveshare ST3215, 12 V variant (9 V qualified rail)",
        "unit_cap_usd": 30,
        "stage": "P3",
        "reuse": "Existing servos only after mounted hold and feedback tests",
        "source": "leg_servo"
      },
      {
        "id": "leg_hardware",
        "qty": 1,
        "item": "Two 3:1 reductions, shafts, pivots, bearings, stops and lock pins",
        "unit_cap_usd": 60,
        "stage": "P3",
        "reuse": "Shop bearings, belts and hardware after dimensions are measured"
      },
      {
        "id": "wheels",
        "qty": 1,
        "item": "Two rubber wheels, hubs and supported axle hardware",
        "unit_cap_usd": 35,
        "stage": "P1",
        "reuse": "Approximately 90\u2013110 mm wheels; update model for actual diameter"
      },
      {
        "id": "controller",
        "qty": 1,
        "item": "Pico 2, LSM6DSOX and half-duplex servo interface",
        "unit_cap_usd": 40,
        "stage": "P0",
        "reuse": "Confirmed equivalent MCU/IMU may substitute only after timing/pin/level qualification"
      },
      {
        "id": "manual_link",
        "qty": 1,
        "item": "Manual input/link replacement allowance",
        "unit_cap_usd": 60,
        "stage": "P0",
        "reuse": "TBS Nano plus compatible transmitter, or existing laptop/gamepad link"
      },
      {
        "id": "battery",
        "qty": 1,
        "item": "Compatible 3S battery",
        "unit_cap_usd": 35,
        "stage": "P1",
        "reuse": "Healthy pack with known cell count, condition and connectors"
      },
      {
        "id": "charger",
        "qty": 1,
        "item": "Compatible balance charger, supply and lead",
        "unit_cap_usd": 45,
        "stage": "P1",
        "reuse": "Existing compatible charger and power supply"
      },
      {
        "id": "power",
        "qty": 1,
        "item": "9 V servo and 5 V logic rails, fuse, kill, regeneration protection",
        "unit_cap_usd": 65,
        "stage": "P1",
        "reuse": "Only parts meeting rail voltage and current requirements"
      },
      {
        "id": "harness",
        "qty": 1,
        "item": "Wire, connectors, encoder level shifting and strain relief",
        "unit_cap_usd": 30,
        "stage": "P1",
        "reuse": "Existing wire/connectors of appropriate size"
      },
      {
        "id": "structure",
        "qty": 1,
        "item": "Scrap/COTS frame, links, brackets, fasteners and prototype material",
        "unit_cap_usd": 60,
        "stage": "P1",
        "reuse": "Aluminum, plywood or suitable existing stock; no carbon requirement"
      },
      {
        "id": "fixture",
        "qty": 1,
        "item": "Catch frame, rest skids and padding materials",
        "unit_cap_usd": 20,
        "stage": "P1",
        "reuse": "Shop scrap and straps; fixtures remain outside robot mass"
      }
    ]
  },
  "sources": [
    {
      "id": "wheel_motor",
      "title": "Pololu 4752 gearmotor",
      "url": "https://www.pololu.com/product/4752",
      "checked": "2026-09-28",
      "listed_usd": 60.95,
      "note": "Selected baseline. 200 g each, 1920 quadrature counts/output revolution; stall values are extrapolations."
    },
    {
      "id": "wheel_driver",
      "title": "Pololu 4035 DRV8874 carrier",
      "url": "https://www.pololu.com/product/4035",
      "checked": "2026-09-28",
      "listed_usd": 11.94,
      "note": "Selected baseline. 2.1 A carrier continuous rating in open-air tests; adjustable limit and default sleep. Backorders listed at review."
    },
    {
      "id": "leg_servo",
      "title": "Waveshare ST3215 series",
      "url": "https://www.waveshare.com/product/st3215-servo.htm",
      "checked": "2026-09-28",
      "listed_range_usd": [
        16.99,
        21.99
      ],
      "note": "Selected 12 V variant, powered from a regulated 9 V branch. 12 V advertised stall torque does not qualify 9 V hold duty."
    },
    {
      "id": "leg_servo_docs",
      "title": "Waveshare ST3215 documentation",
      "url": "https://www.waveshare.com/wiki/ST3215_Servo",
      "checked": "2026-09-28",
      "note": "Current page specifies 6\u201312.6 V for the 12 V version. Confirm actual revision and protect against regenerative voltage rise."
    },
    {
      "id": "controller",
      "title": "Raspberry Pi Pico 2",
      "url": "https://www.raspberrypi.com/products/raspberry-pi-pico-2/",
      "checked": "2026-09-28",
      "note": "RP2350, C/C++ SDK, PIO encoders, SPI IMU, USB logs. Board timing remains to be measured."
    },
    {
      "id": "imu",
      "title": "Adafruit LSM6DSOX 4438",
      "url": "https://www.adafruit.com/product/4438",
      "checked": "2026-09-28",
      "listed_usd": 11.95,
      "note": "SPI/I2C, two interrupt pins; out of stock on manufacturer page when checked. Selection is not a stock promise."
    },
    {
      "id": "driver_datasheet",
      "title": "TI DRV8874 datasheet",
      "url": "https://www.ti.com/lit/ds/symlink/drv8874.pdf",
      "checked": "2026-09-28",
      "note": "Use datasheet tolerances for current regulation and IPROPI sampling; verify braking and current-chopping behavior on bench."
    }
  ],
  "hardware": {
    "wheel_motor": {
      "part": "Pololu 4752",
      "quantity": 2,
      "gear_ratio": 30,
      "encoder_counts_per_output_rev": 1920,
      "state": "selected for bench qualification"
    },
    "wheel_driver": {
      "part": "Pololu 4035 / DRV8874",
      "quantity": 2,
      "logic_v": 3.3,
      "mode": "PH/EN drive-brake",
      "current_limit_a": 2.5,
      "state": "selected; measure actual chopping threshold",
      "current_regulation": "IMODE tied to ground: fixed off-time, fault does not report routine chopping; MCU latches real faults"
    },
    "leg_servo": {
      "part": "Waveshare ST3215, 30 kg-cm at 12 V variant",
      "quantity": 2,
      "rail_v": 9.0,
      "reduction": 3,
      "state": "selected; mounted duty at 9 V unqualified"
    },
    "controller": {
      "part": "Raspberry Pi Pico 2 (RP2350, non-wireless)",
      "runtime": "C/C++",
      "state": "reference implementation target; confirmed equivalent reuse allowed"
    },
    "imu": {
      "part": "Adafruit 4438 / ST LSM6DSOX",
      "interface": "SPI with data-ready interrupt",
      "state": "selected; manufacturer lists out of stock, no delivery claim"
    },
    "cameras": {
      "onboard_quantity": 0,
      "decision": "External existing phone/camera for synchronized trial video; perception deferred to V2"
    },
    "manual_link": {
      "decision": "Existing laptop/gamepad over USB serial deadman for fixture trials; qualified RC reuse for untethered trials"
    },
    "battery": {
      "decision": "3S 2.2 Ah lithium pack; exact reused pack and charger require inventory and condition check"
    },
    "power": {
      "decision": "9 V regulated servo branch, separate 5 V logic branch, fused wheel branch, hardware cut and regeneration clamp; part numbers after simultaneous-load bench sizing"
    }
  },
  "motion_envelope": {
    "cruise_ms": 0.25,
    "uneven_ground_ms": 0.15,
    "acceleration_ms2": 0.35,
    "arc_yaw_rads": 0.4,
    "pivot_yaw_rads": 0.6,
    "yaw_acceleration_rads2": 1.2,
    "fore_push_ns": 0.8,
    "lateral_push_ns": 0.4,
    "push_height_m": 0.2,
    "pulse_durations_s": [
      0.05,
      0.2
    ],
    "slope_deg": 3,
    "smooth_bump_mm": 5,
    "smooth_bump_length_mm": 300,
    "square_seam_mm": 3,
    "unqualified_speed_cap_ms": 0.5
  }
}
