{
  "parts": [
    {
      "id": "esp32",
      "name": "ESP32",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "Dual-core MCU with Wi-Fi 4 and Bluetooth. Default radio + glue chip for small robots and telemetry.",
      "buses": [
        "wifi",
        "ble",
        "uart",
        "i2c",
        "spi",
        "pwm"
      ],
      "host": true,
      "derivatives": [
        "esp32-s3",
        "esp32-cam",
        "esp32-c3",
        "esp32-c6",
        "esp32-h2",
        "esp32-p4",
        "esp32-s2"
      ],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "mlx90640",
        "amg8833",
        "pca9685",
        "ina260",
        "sx1262"
      ],
      "avoid": "Do not drive high-current motors from the ESP GPIO. Put TMC2209 or ODrive on UART/CAN.",
      "typicalUsd": "$4–8",
      "buy": [
        {
          "label": "Espressif SoCs",
          "href": "https://www.espressif.com/en/products/socs"
        },
        {
          "label": "Digi-Key ESP32",
          "href": "https://www.digikey.com/en/maker/platforms/e/esp32"
        }
      ]
    },
    {
      "id": "esp32-s3",
      "name": "ESP32-S3",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "ESP32 family workhorse. Vector instructions for tiny ML, USB, camera and LCD buses.",
      "buses": [
        "wifi",
        "ble",
        "uart",
        "i2c",
        "spi",
        "usb",
        "pwm"
      ],
      "host": true,
      "derivatives": [
        "esp32-cam",
        "xiao-s3-sense",
        "esp32-p4"
      ],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "mlx90640",
        "amg8833",
        "ov2640",
        "pca9685",
        "ina260",
        "sx1262",
        "tmc2209"
      ],
      "typicalUsd": "$8–17",
      "buy": [
        {
          "label": "ESP32-S3",
          "href": "https://www.espressif.com/en/products/socs/esp32-s3"
        },
        {
          "label": "S3-EYE kit",
          "href": "https://www.espressif.com/en/products/devkits"
        }
      ]
    },
    {
      "id": "esp32-cam",
      "name": "ESP32-CAM",
      "family": "ESP32",
      "layer": "vision",
      "maker": "AI-Thinker / Espressif",
      "does": "OV2640 or OV5640 bolted onto an ESP32. Cheap Wi-Fi camera node, not a motor controller.",
      "buses": [
        "wifi",
        "ble",
        "uart"
      ],
      "host": true,
      "derivatives": [
        "xiao-s3-sense",
        "ov2640"
      ],
      "pairsWith": [
        "esp32-s3",
        "ov2640"
      ],
      "avoid": "Rolling shutter. Weak for visual odometry.",
      "typicalUsd": "$6–12",
      "buy": [
        {
          "label": "Seeed XIAO S3 Sense",
          "href": "https://www.seeedstudio.com/XIAO-ESP32S3-Sense-p-5639.html"
        }
      ]
    },
    {
      "id": "xiao-s3-sense",
      "name": "XIAO ESP32-S3 Sense",
      "family": "ESP32",
      "layer": "vision",
      "maker": "Seeed",
      "does": "Thumb-size S3 with camera, mic, and SD. Clean modern ESP32-CAM.",
      "buses": [
        "wifi",
        "ble",
        "uart",
        "i2c",
        "usb"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "mlx90640",
        "esp32-s3"
      ],
      "typicalUsd": "$13–16",
      "buy": [
        {
          "label": "Seeed XIAO S3 Sense",
          "href": "https://www.seeedstudio.com/XIAO-ESP32S3-Sense-p-5639.html"
        }
      ]
    },
    {
      "id": "esp32-c3",
      "name": "ESP32-C3",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "Single-core RISC-V, Wi-Fi + BLE. Cheap sensor nodes.",
      "buses": [
        "wifi",
        "ble",
        "uart",
        "i2c",
        "spi"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "ina260"
      ],
      "typicalUsd": "$3–6",
      "buy": [
        {
          "label": "ESP32-C3",
          "href": "https://www.espressif.com/en/products/socs/esp32-c3"
        }
      ]
    },
    {
      "id": "esp32-c6",
      "name": "ESP32-C6",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "Wi-Fi 6 + BLE + 802.15.4 Thread/Zigbee. Factory-floor mesh and Matter.",
      "buses": [
        "wifi",
        "ble",
        "thread",
        "uart",
        "i2c",
        "spi"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "ina260",
        "mcp2515"
      ],
      "typicalUsd": "$5–9",
      "buy": [
        {
          "label": "ESP32-C6",
          "href": "https://www.espressif.com/en/products/socs/esp32-c6"
        }
      ]
    },
    {
      "id": "esp32-h2",
      "name": "ESP32-H2",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "Thread / Zigbee / BLE without Wi-Fi. Low-power radio endpoint.",
      "buses": [
        "ble",
        "thread",
        "uart",
        "i2c"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "vl53l1x",
        "ina260"
      ],
      "typicalUsd": "$4–7",
      "buy": [
        {
          "label": "ESP32-H2",
          "href": "https://www.espressif.com/en/products/socs/esp32-h2"
        }
      ]
    },
    {
      "id": "esp32-p4",
      "name": "ESP32-P4",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "High-end RISC-V with MIPI-CSI/DSI and H.264. Edge vision without a Pi.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "usb",
        "csi",
        "ethernet"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "imx708",
        "ov2640",
        "bno085"
      ],
      "typicalUsd": "dev kit",
      "buy": [
        {
          "label": "ESP32-P4",
          "href": "https://www.espressif.com/en/products/socs/esp32-p4"
        }
      ]
    },
    {
      "id": "esp32-s2",
      "name": "ESP32-S2",
      "family": "ESP32",
      "layer": "radio",
      "maker": "Espressif",
      "does": "Wi-Fi + USB OTG, no Bluetooth.",
      "buses": [
        "wifi",
        "uart",
        "i2c",
        "spi",
        "usb"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "vl53l1x"
      ],
      "typicalUsd": "$4–7",
      "buy": [
        {
          "label": "ESP32-S2",
          "href": "https://www.espressif.com/en/products/socs/esp32-s2"
        }
      ]
    },
    {
      "id": "rp2040",
      "name": "RP2040 / Pico",
      "family": "RP2040",
      "layer": "mcu",
      "maker": "Raspberry Pi",
      "does": "Dual M0+ with PIO state machines. Bit-bang DShot, WS2812, quadrature.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "pwm",
        "usb"
      ],
      "host": true,
      "derivatives": [
        "rp2350"
      ],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "tmc2209",
        "as5600",
        "pca9685"
      ],
      "typicalUsd": "$4–6",
      "buy": [
        {
          "label": "Raspberry Pi Pico",
          "href": "https://www.raspberrypi.com/products/raspberry-pi-pico/"
        }
      ]
    },
    {
      "id": "rp2350",
      "name": "RP2350 / Pico 2",
      "family": "RP2040",
      "layer": "mcu",
      "maker": "Raspberry Pi",
      "does": "Pico 2. Faster, more RAM, Hazard3 RISC-V option.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "pwm",
        "usb"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "vl53l1x",
        "tmc2209",
        "as5600",
        "rp2040"
      ],
      "typicalUsd": "$5–8",
      "buy": [
        {
          "label": "Pico 2",
          "href": "https://www.raspberrypi.com/products/raspberry-pi-pico-2/"
        }
      ]
    },
    {
      "id": "stm32f4",
      "name": "STM32F4",
      "family": "STM32",
      "layer": "mcu",
      "maker": "ST",
      "does": "Classic robot MCU. Timers, ADC, CAN. Nucleo or Black Pill.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "can",
        "pwm",
        "usb"
      ],
      "host": true,
      "derivatives": [
        "stm32h7",
        "stm32g4",
        "stm32wb"
      ],
      "pairsWith": [
        "bno085",
        "bmi270",
        "tmc2209",
        "as5047p",
        "mcp2515",
        "odrive-s1"
      ],
      "typicalUsd": "$10–20",
      "buy": [
        {
          "label": "STM32 Nucleo",
          "href": "https://www.st.com/en/evaluation-tools/stm32-nucleo-boards.html"
        }
      ]
    },
    {
      "id": "stm32h7",
      "name": "STM32H7",
      "family": "STM32",
      "layer": "mcu",
      "maker": "ST",
      "does": "Fast Cortex-M7. High-rate IMU fusion and FOC on one chip.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "can",
        "pwm",
        "usb",
        "ethernet"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bmi270",
        "as5047p",
        "tmc2209",
        "odrive-s1",
        "mcp2515"
      ],
      "typicalUsd": "$20–35",
      "buy": [
        {
          "label": "Nucleo-H743ZI",
          "href": "https://www.st.com/en/evaluation-tools/nucleo-h743zi.html"
        }
      ]
    },
    {
      "id": "stm32g4",
      "name": "STM32G4",
      "family": "STM32",
      "layer": "mcu",
      "maker": "ST",
      "does": "Motor-control silicon. High-res timers, op-amps, comparators.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "can",
        "pwm"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "tmc2209",
        "as5047p",
        "as5600",
        "odrive-s1"
      ],
      "typicalUsd": "$12–22",
      "buy": [
        {
          "label": "STM32G4 series",
          "href": "https://www.st.com/en/microcontrollers-microprocessors/stm32g4-series.html"
        }
      ]
    },
    {
      "id": "stm32wb",
      "name": "STM32WB / WL",
      "family": "STM32",
      "layer": "mcu",
      "maker": "ST",
      "does": "WB is BLE on-die. WL is LoRa on-die. Wireless actuator nodes.",
      "buses": [
        "ble",
        "lora",
        "uart",
        "i2c"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "vl53l1x",
        "ina260",
        "sx1262"
      ],
      "typicalUsd": "$12–25",
      "buy": [
        {
          "label": "STM32WB",
          "href": "https://www.st.com/en/microcontrollers-microprocessors/stm32wb-series.html"
        }
      ]
    },
    {
      "id": "nrf52840",
      "name": "nRF52840",
      "family": "nRF52",
      "layer": "radio",
      "maker": "Nordic",
      "does": "Best BLE 5 / Thread MCU. Remotes, teach pendants, body-worn IMUs.",
      "buses": [
        "ble",
        "thread",
        "uart",
        "i2c",
        "spi",
        "usb"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "bmi270",
        "vl53l1x"
      ],
      "typicalUsd": "$10–40",
      "buy": [
        {
          "label": "nRF52840 DK",
          "href": "https://www.nordicsemi.com/Products/Development-hardware/nRF52840-DK"
        }
      ]
    },
    {
      "id": "teensy41",
      "name": "Teensy 4.1",
      "family": "Teensy",
      "layer": "mcu",
      "maker": "PJRC",
      "does": "600 MHz M7 with dense I/O. Hobbyist board when Arduino runs out of timers.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "can",
        "pwm",
        "usb"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "bno085",
        "tmc2209",
        "as5047p",
        "pca9685"
      ],
      "typicalUsd": "$32",
      "buy": [
        {
          "label": "PJRC Teensy 4.1",
          "href": "https://www.pjrc.com/store/teensy41.html"
        }
      ]
    },
    {
      "id": "arduino-mega",
      "name": "Arduino Mega 2560",
      "family": "Arduino",
      "layer": "mcu",
      "maker": "Arduino",
      "does": "Teaching board with many 5 V pins. Weak CPU. Useful as a dumb I/O hat.",
      "buses": [
        "uart",
        "i2c",
        "spi",
        "pwm"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "pca9685",
        "tmc2209"
      ],
      "avoid": "Not for vision or high-rate FOC.",
      "typicalUsd": "$40–50",
      "buy": [
        {
          "label": "Arduino Mega 2560",
          "href": "https://store.arduino.cc/products/arduino-mega-2560-rev3"
        }
      ]
    },
    {
      "id": "pi5",
      "name": "Raspberry Pi 5",
      "family": "Raspberry Pi",
      "layer": "sbc",
      "maker": "Raspberry Pi",
      "does": "Linux brain for ROS 2, cameras, networking. Not hard real-time.",
      "buses": [
        "csi",
        "usb",
        "uart",
        "i2c",
        "spi",
        "ethernet",
        "pwm"
      ],
      "host": true,
      "derivatives": [
        "cm5",
        "pi-zero2"
      ],
      "pairsWith": [
        "imx708",
        "hailo",
        "d435i",
        "bno085",
        "rplidar",
        "esp32-c6"
      ],
      "typicalUsd": "$60–120",
      "buy": [
        {
          "label": "Raspberry Pi 5",
          "href": "https://www.raspberrypi.com/products/raspberry-pi-5/"
        }
      ]
    },
    {
      "id": "cm5",
      "name": "Compute Module 5",
      "family": "Raspberry Pi",
      "layer": "sbc",
      "maker": "Raspberry Pi",
      "does": "Pi 5 silicon in a solder-down module for custom carriers.",
      "buses": [
        "csi",
        "usb",
        "uart",
        "i2c",
        "spi",
        "ethernet"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "imx708",
        "hailo",
        "d435i",
        "pi5"
      ],
      "typicalUsd": "$45–80",
      "buy": [
        {
          "label": "CM5",
          "href": "https://www.raspberrypi.com/products/compute-module-5/"
        }
      ]
    },
    {
      "id": "pi-zero2",
      "name": "Pi Zero 2 W",
      "family": "Raspberry Pi",
      "layer": "sbc",
      "maker": "Raspberry Pi",
      "does": "Tiny Linux + Wi-Fi. Telemetry brick, not a vision stack.",
      "buses": [
        "wifi",
        "ble",
        "usb",
        "csi",
        "i2c"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "imx708",
        "esp32"
      ],
      "typicalUsd": "$15–20",
      "buy": [
        {
          "label": "Zero 2 W",
          "href": "https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/"
        }
      ]
    },
    {
      "id": "orin-nano",
      "name": "Jetson Orin Nano Super",
      "family": "Jetson",
      "layer": "sbc",
      "maker": "NVIDIA",
      "does": "~67 TOPS CUDA box. On-robot detection, depth, small VLAs.",
      "buses": [
        "csi",
        "usb",
        "uart",
        "i2c",
        "ethernet",
        "can"
      ],
      "host": true,
      "derivatives": [
        "orin-nx"
      ],
      "pairsWith": [
        "imx708",
        "d435i",
        "livox-mid360",
        "bno085",
        "odrive-s1",
        "esp32-c6"
      ],
      "typicalUsd": "$249 kit",
      "buy": [
        {
          "label": "Jetson Orin",
          "href": "https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/"
        }
      ]
    },
    {
      "id": "orin-nx",
      "name": "Jetson Orin NX / AGX",
      "family": "Jetson",
      "layer": "sbc",
      "maker": "NVIDIA",
      "does": "More GPU/CPU for multi-cam humanoids and arms.",
      "buses": [
        "csi",
        "usb",
        "uart",
        "i2c",
        "ethernet",
        "can"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "d435i",
        "livox-mid360",
        "imx708",
        "odrive-s1"
      ],
      "typicalUsd": "$400+",
      "buy": [
        {
          "label": "Jetson modules",
          "href": "https://developer.nvidia.com/embedded/jetson-modules"
        }
      ]
    },
    {
      "id": "hailo",
      "name": "Hailo-8 / AI HAT+",
      "family": "Hailo",
      "layer": "sbc",
      "maker": "Hailo / Raspberry Pi",
      "does": "PCIe NPU that straps onto a Pi 5 as AI HAT+.",
      "buses": [
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "cm5",
        "imx708"
      ],
      "typicalUsd": "$70–130",
      "buy": [
        {
          "label": "Raspberry Pi AI HAT+",
          "href": "https://www.raspberrypi.com/products/ai-hat/"
        },
        {
          "label": "Hailo",
          "href": "https://hailo.ai/"
        }
      ]
    },
    {
      "id": "rk3588",
      "name": "RK3588",
      "family": "Rockchip",
      "layer": "sbc",
      "maker": "Rockchip",
      "does": "8K SoC with NPU. Cheap Jetson-adjacent compute (Orange Pi 5 Plus, Rock 5B).",
      "buses": [
        "csi",
        "usb",
        "uart",
        "i2c",
        "ethernet"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "imx708",
        "d435i"
      ],
      "typicalUsd": "$80–160",
      "buy": [
        {
          "label": "Orange Pi 5 Plus",
          "href": "http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-5-Plus.html"
        }
      ]
    },
    {
      "id": "ov2640",
      "name": "OV2640 / OV5640",
      "family": "OmniVision",
      "layer": "vision",
      "maker": "OmniVision",
      "does": "Cheap 2–5 MP rolling-shutter modules. What ESP32-CAM uses.",
      "buses": [
        "csi",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-cam",
        "xiao-s3-sense",
        "esp32-s3",
        "esp32-p4"
      ],
      "typicalUsd": "$2–8",
      "buy": [
        {
          "label": "Comes on ESP32-CAM / S3 Sense",
          "href": "https://www.seeedstudio.com/XIAO-ESP32S3-Sense-p-5639.html"
        }
      ]
    },
    {
      "id": "imx708",
      "name": "IMX219 / IMX708",
      "family": "Sony",
      "layer": "vision",
      "maker": "Sony / Raspberry Pi",
      "does": "Pi Camera v2 / Camera Module 3. CSI, good optics. Also on Jetson with a 22-pin adapter.",
      "buses": [
        "csi"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "cm5",
        "orin-nano",
        "esp32-p4",
        "hailo"
      ],
      "typicalUsd": "$25–35",
      "buy": [
        {
          "label": "Camera Module 3",
          "href": "https://www.raspberrypi.com/products/camera-module-3/"
        }
      ]
    },
    {
      "id": "d435i",
      "name": "RealSense D435i",
      "family": "RealSense",
      "layer": "vision",
      "maker": "RealSense",
      "does": "Stereo depth + IMU. Default research depth camera. D455 longer range, D405 close range.",
      "buses": [
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "orin-nano",
        "orin-nx",
        "rk3588"
      ],
      "typicalUsd": "$300–350",
      "buy": [
        {
          "label": "D435i",
          "href": "https://www.realsenseai.com/products/depth-camera-d435i/"
        }
      ]
    },
    {
      "id": "mlx90640",
      "name": "MLX90640",
      "family": "Melexis",
      "layer": "thermal",
      "maker": "Melexis",
      "does": "32×24 far-IR thermal array. Person and hot-spot detection over I2C.",
      "buses": [
        "i2c"
      ],
      "derivatives": [
        "amg8833"
      ],
      "pairsWith": [
        "esp32-s3",
        "xiao-s3-sense",
        "esp32",
        "rp2040",
        "pi5"
      ],
      "typicalUsd": "$45–70",
      "buy": [
        {
          "label": "Adafruit MLX90640",
          "href": "https://www.adafruit.com/product/4407"
        }
      ]
    },
    {
      "id": "amg8833",
      "name": "AMG8833 Grid-EYE",
      "family": "Panasonic",
      "layer": "thermal",
      "maker": "Panasonic",
      "does": "8×8 thermal. Cheaper and coarser than MLX90640.",
      "buses": [
        "i2c"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "esp32",
        "rp2040"
      ],
      "typicalUsd": "$25–40",
      "buy": [
        {
          "label": "Adafruit AMG8833",
          "href": "https://www.adafruit.com/product/3538"
        }
      ]
    },
    {
      "id": "bno085",
      "name": "BNO085",
      "family": "Hillcrest / CEVA",
      "layer": "imu",
      "maker": "CEVA",
      "does": "9-DoF IMU with on-chip fusion: quaternion, gravity, stability classifier.",
      "buses": [
        "i2c",
        "spi",
        "uart"
      ],
      "derivatives": [
        "bmi270"
      ],
      "pairsWith": [
        "esp32-s3",
        "esp32",
        "rp2040",
        "pi5",
        "orin-nano",
        "nrf52840",
        "stm32f4"
      ],
      "typicalUsd": "$25–35",
      "buy": [
        {
          "label": "Adafruit BNO085",
          "href": "https://www.adafruit.com/product/4754"
        }
      ]
    },
    {
      "id": "bmi270",
      "name": "BMI270",
      "family": "Bosch",
      "layer": "imu",
      "maker": "Bosch",
      "does": "6-DoF IMU used in wearables and drones. No magnetometer.",
      "buses": [
        "i2c",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32h7",
        "nrf52840",
        "esp32-s3"
      ],
      "typicalUsd": "$8–15",
      "buy": [
        {
          "label": "SparkFun BMI270",
          "href": "https://www.sparkfun.com/sparkfun-micro-6dof-imu-breakout-bmi270-qwiic.html"
        }
      ]
    },
    {
      "id": "vl53l1x",
      "name": "VL53L1X",
      "family": "ST ToF",
      "layer": "range",
      "maker": "ST",
      "does": "Time-of-flight, about 4 m, one zone. Cliff, dock, height. Next: VL53L5CX / L8CX multi-zone.",
      "buses": [
        "i2c"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "esp32",
        "rp2040",
        "pi5",
        "nrf52840"
      ],
      "typicalUsd": "$7–15",
      "buy": [
        {
          "label": "SparkFun VL53L1X",
          "href": "https://www.sparkfun.com/sparkfun-distance-sensor-breakout-4-meter-vl53l1x-qwiic.html"
        },
        {
          "label": "ST VL53L1X",
          "href": "https://www.st.com/en/imaging-and-photonics-solutions/vl53l1x.html"
        }
      ]
    },
    {
      "id": "rplidar",
      "name": "RPLidar A1 / A2",
      "family": "Slamtec",
      "layer": "range",
      "maker": "Slamtec",
      "does": "360° 2D lidar for indoor SLAM.",
      "buses": [
        "uart",
        "usb"
      ],
      "derivatives": [
        "livox-mid360"
      ],
      "pairsWith": [
        "pi5",
        "orin-nano"
      ],
      "typicalUsd": "$90–250",
      "buy": [
        {
          "label": "Slamtec RPLidar",
          "href": "https://www.slamtec.com/en/Lidar"
        }
      ]
    },
    {
      "id": "livox-mid360",
      "name": "Livox Mid-360",
      "family": "Livox",
      "layer": "range",
      "maker": "Livox",
      "does": "Mid-range industrial 3D lidar. Common on Unitree-class research stacks.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nano",
        "orin-nx",
        "pi5"
      ],
      "typicalUsd": "$700+",
      "buy": [
        {
          "label": "Livox Mid-360",
          "href": "https://www.livoxtech.com/mid-360"
        }
      ]
    },
    {
      "id": "tmc2209",
      "name": "TMC2209",
      "family": "Trinamic",
      "layer": "actuate",
      "maker": "Analog Devices",
      "does": "Silent stepper driver with StallGuard and stealthChop. UART-configurable.",
      "buses": [
        "uart",
        "spi",
        "pwm"
      ],
      "derivatives": [],
      "pairsWith": [
        "rp2040",
        "rp2350",
        "stm32g4",
        "stm32f4",
        "esp32-s3",
        "teensy41"
      ],
      "typicalUsd": "$6–12",
      "buy": [
        {
          "label": "TMC2209",
          "href": "https://www.analog.com/en/products/tmc2209.html"
        }
      ]
    },
    {
      "id": "odrive-s1",
      "name": "ODrive S1",
      "family": "ODrive",
      "layer": "actuate",
      "maker": "ODrive",
      "does": "FOC servo drive for BLDC + encoders. CAN bus. Real joint torque without Dynamixel prices.",
      "buses": [
        "can",
        "usb",
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32h7",
        "orin-nano",
        "pi5",
        "as5047p",
        "mcp2515"
      ],
      "typicalUsd": "$149",
      "buy": [
        {
          "label": "ODrive S1",
          "href": "https://shop.odriverobotics.com/products/odrive-s1"
        }
      ]
    },
    {
      "id": "dynamixel",
      "name": "Dynamixel XL330 / XM430",
      "family": "Dynamixel",
      "layer": "actuate",
      "maker": "ROBOTIS",
      "does": "Daisy-chained smart servos with ID, PID, and current sensing.",
      "buses": [
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "stm32f4",
        "teensy41"
      ],
      "typicalUsd": "$30–300",
      "buy": [
        {
          "label": "ROBOTIS Dynamixel",
          "href": "https://www.robotis.us/dynamixel/"
        }
      ]
    },
    {
      "id": "pca9685",
      "name": "PCA9685",
      "family": "NXP",
      "layer": "actuate",
      "maker": "NXP",
      "does": "16-channel 12-bit PWM expander. RC servo farm over I2C.",
      "buses": [
        "i2c",
        "pwm"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "rp2040",
        "arduino-mega",
        "teensy41"
      ],
      "typicalUsd": "$6–15",
      "buy": [
        {
          "label": "Adafruit PCA9685",
          "href": "https://www.adafruit.com/product/815"
        }
      ]
    },
    {
      "id": "as5600",
      "name": "AS5600",
      "family": "ams OSRAM",
      "layer": "actuate",
      "maker": "ams OSRAM",
      "does": "Cheap I2C magnetic angle encoder for joint position.",
      "buses": [
        "i2c"
      ],
      "derivatives": [
        "as5047p"
      ],
      "pairsWith": [
        "rp2040",
        "stm32g4",
        "esp32-s3"
      ],
      "typicalUsd": "$4–8",
      "buy": [
        {
          "label": "Search Digi-Key AS5600",
          "href": "https://www.digikey.com/en/products/filter/position-sensors-angle-linear-position-measuring/529?s=N4IgTCBcDaIIwFYAMBmAjANjQVgLQDMAaEA"
        }
      ]
    },
    {
      "id": "as5047p",
      "name": "AS5047P",
      "family": "ams OSRAM",
      "layer": "actuate",
      "maker": "ams OSRAM",
      "does": "High-speed SPI magnetic encoder for FOC loops.",
      "buses": [
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32g4",
        "stm32h7",
        "odrive-s1",
        "teensy41"
      ],
      "typicalUsd": "$10–18",
      "buy": [
        {
          "label": "Search Digi-Key AS5047P",
          "href": "https://www.digikey.com/en/products/result?keywords=AS5047P"
        }
      ]
    },
    {
      "id": "mcp2515",
      "name": "MCP2515 / TCAN",
      "family": "Microchip",
      "layer": "radio",
      "maker": "Microchip",
      "does": "CAN controller / transceiver. Robot nervous system when the MCU lacks native CAN.",
      "buses": [
        "can",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-c6",
        "esp32-s3",
        "stm32f4",
        "odrive-s1"
      ],
      "typicalUsd": "$5–12",
      "buy": [
        {
          "label": "Adafruit CAN Pal",
          "href": "https://www.adafruit.com/product/5708"
        }
      ]
    },
    {
      "id": "ina260",
      "name": "INA219 / INA260",
      "family": "TI",
      "layer": "power",
      "maker": "Texas Instruments",
      "does": "Bus voltage + current. Battery and stall detection.",
      "buses": [
        "i2c"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "esp32",
        "pi5",
        "rp2040"
      ],
      "typicalUsd": "$8–12",
      "buy": [
        {
          "label": "Adafruit INA260",
          "href": "https://www.adafruit.com/product/4226"
        }
      ]
    },
    {
      "id": "sx1262",
      "name": "SX1262 / SX1276",
      "family": "Semtech",
      "layer": "radio",
      "maker": "Semtech",
      "does": "LoRa radio for field robots past Wi-Fi range.",
      "buses": [
        "lora",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "esp32",
        "stm32wb"
      ],
      "typicalUsd": "$12–25",
      "buy": [
        {
          "label": "Adafruit RFM95 / SX1276",
          "href": "https://www.adafruit.com/product/3072"
        }
      ]
    },
    {
      "id": "oak-d-pro",
      "name": "Luxonis OAK-D Pro",
      "family": "DepthAI",
      "layer": "vision",
      "maker": "Luxonis",
      "does": "On-camera stereo + RGB with a Myriad X VPU. Depth and detection leave the USB cable as metadata.",
      "buses": [
        "usb"
      ],
      "derivatives": [
        "oak-d-lite"
      ],
      "pairsWith": [
        "pi5",
        "orin-nano",
        "cm5"
      ],
      "typicalUsd": "$300–450",
      "buy": [
        {
          "label": "Luxonis OAK-D Pro",
          "href": "https://shop.luxonis.com/products/oak-d-pro"
        },
        {
          "label": "Adafruit OAK-D",
          "href": "https://www.adafruit.com/product/5725"
        }
      ]
    },
    {
      "id": "oak-d-lite",
      "name": "OAK-D Lite",
      "family": "DepthAI",
      "layer": "vision",
      "maker": "Luxonis",
      "does": "Smaller DepthAI brick for mobile robots that cannot spend Pro money.",
      "buses": [
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "pi-zero2"
      ],
      "typicalUsd": "$130–180",
      "buy": [
        {
          "label": "Luxonis OAK-D Lite",
          "href": "https://shop.luxonis.com/collections/oak-cameras"
        }
      ]
    },
    {
      "id": "zed-x",
      "name": "Stereolabs ZED X",
      "family": "ZED",
      "layer": "vision",
      "maker": "Stereolabs",
      "does": "GMSL2 industrial stereo for outdoor vehicles. IP-rated, locked flex, Jetson-native.",
      "buses": [
        "csi",
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nano",
        "orin-nx",
        "orin-agx"
      ],
      "avoid": "Needs a GMSL deserializer. Not a USB webcam.",
      "typicalUsd": "$500–900",
      "buy": [
        {
          "label": "Stereolabs ZED X",
          "href": "https://www.stereolabs.com/products/zed-x"
        }
      ]
    },
    {
      "id": "d455",
      "name": "RealSense D455",
      "family": "RealSense",
      "layer": "vision",
      "maker": "Intel",
      "does": "Longer-baseline D400. Better outdoor depth than D435i, same USB3 stack.",
      "buses": [
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nano",
        "pi5",
        "d435i"
      ],
      "typicalUsd": "$350–430",
      "buy": [
        {
          "label": "Intel RealSense D455",
          "href": "https://www.intelrealsense.com/depth-camera-d455/"
        }
      ]
    },
    {
      "id": "lepton-35",
      "name": "FLIR Lepton 3.5",
      "family": "FLIR",
      "layer": "thermal",
      "maker": "Teledyne FLIR",
      "does": "160×120 radiometric thermal core. Open-source breakouts exist; industrial housings exist too.",
      "buses": [
        "spi",
        "i2c"
      ],
      "derivatives": [
        "boson"
      ],
      "pairsWith": [
        "esp32-s3",
        "pi5",
        "orin-nano"
      ],
      "typicalUsd": "$150–250",
      "buy": [
        {
          "label": "GroupGets Lepton",
          "href": "https://groupgets.com/manufacturers/flir/products/flir-lepton"
        },
        {
          "label": "Adafruit Lepton kit",
          "href": "https://www.adafruit.com/product/3199"
        }
      ]
    },
    {
      "id": "boson",
      "name": "FLIR Boson",
      "family": "FLIR",
      "layer": "thermal",
      "maker": "Teledyne FLIR",
      "does": "Industrial thermal module. Higher res than Lepton, shuttered, used on UAVs and sentries.",
      "buses": [
        "usb",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nx",
        "orin-agx"
      ],
      "typicalUsd": "$1.5k–4k",
      "buy": [
        {
          "label": "FLIR Boson",
          "href": "https://www.flir.com/products/boson/"
        }
      ]
    },
    {
      "id": "ouster-os1",
      "name": "Ouster OS1",
      "family": "Ouster",
      "layer": "range",
      "maker": "Ouster",
      "does": "Digital spinning lidar. Factory AMRs and outdoor mapping. Ethernet point clouds.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-agx",
        "orin-nx"
      ],
      "typicalUsd": "$6k–12k",
      "buy": [
        {
          "label": "Ouster OS series",
          "href": "https://ouster.com/products/hardware/os-lidar-sensors"
        }
      ]
    },
    {
      "id": "hesai-xt16",
      "name": "Hesai XT16",
      "family": "Hesai",
      "layer": "range",
      "maker": "Hesai",
      "does": "16-beam mid-range lidar common on Chinese AMRs and robotaxis. ROS 2 drivers exist.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-agx",
        "rk3588"
      ],
      "typicalUsd": "$2k–5k",
      "buy": [
        {
          "label": "Hesai XT",
          "href": "https://www.hesaitech.com/product/xt32-16/"
        }
      ]
    },
    {
      "id": "hokuyo-ust",
      "name": "Hokuyo UST-10LX",
      "family": "Hokuyo",
      "layer": "range",
      "maker": "Hokuyo",
      "does": "Industrial 2D safety/nav lidar. Factory floors. Ethernet. Tighter than hobby RPLIDAR.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "imx8mp",
        "orin-nano"
      ],
      "typicalUsd": "$1.2k–2k",
      "buy": [
        {
          "label": "Hokuyo UST",
          "href": "https://www.hokuyo-aut.jp/search/single.php?serial=166"
        }
      ]
    },
    {
      "id": "vn-100",
      "name": "VectorNav VN-100",
      "family": "VectorNav",
      "layer": "imu",
      "maker": "VectorNav",
      "does": "Industrial AHRS. Calibrated, rugged, used when BNO085 is a toy.",
      "buses": [
        "uart",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "pixhawk-6c",
        "orin-nx",
        "stm32h7"
      ],
      "typicalUsd": "$800–1.4k",
      "buy": [
        {
          "label": "VectorNav VN-100",
          "href": "https://www.vectornav.com/products/detail/vn-100"
        }
      ]
    },
    {
      "id": "adis16470",
      "name": "ADIS16470",
      "family": "Analog Devices",
      "layer": "imu",
      "maker": "Analog Devices",
      "does": "Tactical-grade IMU. Factory calibration on the package. SPI into a flight or arm controller.",
      "buses": [
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32h7",
        "pixhawk-6c"
      ],
      "typicalUsd": "$350–500",
      "buy": [
        {
          "label": "ADI ADIS16470",
          "href": "https://www.analog.com/en/products/adis16470.html"
        }
      ]
    },
    {
      "id": "openmv-h7",
      "name": "OpenMV Cam H7 Plus",
      "family": "OpenMV",
      "layer": "vision",
      "maker": "OpenMV",
      "does": "MicroPython camera for line, blob, AprilTag. Open-source firmware. Not a Jetson.",
      "buses": [
        "usb",
        "uart",
        "spi",
        "i2c"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "esp32-c6",
        "rp2350"
      ],
      "typicalUsd": "$80–110",
      "buy": [
        {
          "label": "OpenMV H7 Plus",
          "href": "https://openmv.io/products/openmv-cam-h7-plus"
        }
      ]
    },
    {
      "id": "orin-agx",
      "name": "Jetson AGX Orin",
      "family": "Jetson",
      "layer": "sbc",
      "maker": "NVIDIA",
      "does": "275 TOPS industrial brain. Multi-cam humanoids, AMRs, surgery carts.",
      "buses": [
        "csi",
        "usb",
        "ethernet",
        "can",
        "uart"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "zed-x",
        "ouster-os1",
        "d435i",
        "livox-mid360"
      ],
      "avoid": "Power and cooling are a product, not a hat.",
      "typicalUsd": "$2k–3.2k",
      "buy": [
        {
          "label": "NVIDIA AGX Orin",
          "href": "https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-orin/"
        }
      ]
    },
    {
      "id": "kria-kv260",
      "name": "AMD Kria KV260",
      "family": "Kria",
      "layer": "sbc",
      "maker": "AMD",
      "does": "Vision SOM with FPGA fabric. Industrial cameras and custom pipelines without a GPU tax.",
      "buses": [
        "usb",
        "ethernet",
        "csi"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "imx708",
        "hokuyo-ust"
      ],
      "typicalUsd": "$250–350",
      "buy": [
        {
          "label": "AMD Kria KV260",
          "href": "https://www.amd.com/en/products/system-on-modules/kria/k26/kv260-vision-starter-kit.html"
        }
      ]
    },
    {
      "id": "coral-usb",
      "name": "Coral USB Accelerator",
      "family": "Coral",
      "layer": "sbc",
      "maker": "Google",
      "does": "Edge TPU dongle. Open-source examples. Straps onto a Pi when Hailo is out of stock.",
      "buses": [
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "cm5",
        "pi-zero2"
      ],
      "typicalUsd": "$60–80",
      "buy": [
        {
          "label": "Coral USB",
          "href": "https://coral.ai/products/accelerator"
        },
        {
          "label": "Adafruit Coral USB",
          "href": "https://www.adafruit.com/product/4310"
        }
      ]
    },
    {
      "id": "imx8mp",
      "name": "NXP i.MX 8M Plus",
      "family": "i.MX",
      "layer": "sbc",
      "maker": "NXP",
      "does": "Industrial Linux SOM with NPU and dual CSI. Factory HMIs and compact AMRs.",
      "buses": [
        "csi",
        "can",
        "ethernet",
        "i2c",
        "uart"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "hokuyo-ust",
        "lan9252",
        "bno085"
      ],
      "typicalUsd": "$80–200",
      "buy": [
        {
          "label": "NXP i.MX 8M Plus",
          "href": "https://www.nxp.com/products/i.MX-8M-Plus"
        }
      ]
    },
    {
      "id": "pixhawk-6c",
      "name": "Pixhawk 6C",
      "family": "Pixhawk",
      "layer": "mcu",
      "maker": "Holybro / PX4",
      "does": "Open-source flight computer. PX4 or ArduPilot. The industrial cousin is still this board in a can.",
      "buses": [
        "can",
        "uart",
        "spi",
        "i2c",
        "pwm"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "zed-f9p",
        "adis16470",
        "sx1262"
      ],
      "typicalUsd": "$200–280",
      "buy": [
        {
          "label": "Holybro Pixhawk 6C",
          "href": "https://holybro.com/products/pixhawk-6c"
        }
      ]
    },
    {
      "id": "beagleplay",
      "name": "BeaglePlay",
      "family": "Beagle",
      "layer": "sbc",
      "maker": "BeagleBoard",
      "does": "Open Linux board with 6LowPAN/Wi-Fi and MikroE clicks. Lab and farm robots.",
      "buses": [
        "wifi",
        "ethernet",
        "uart",
        "i2c",
        "spi"
      ],
      "host": true,
      "derivatives": [],
      "pairsWith": [
        "vl53l1x",
        "bno085",
        "ina260"
      ],
      "typicalUsd": "$90–110",
      "buy": [
        {
          "label": "BeaglePlay",
          "href": "https://www.beagleboard.org/boards/beagleplay"
        }
      ]
    },
    {
      "id": "zed-f9p",
      "name": "u-blox ZED-F9P",
      "family": "u-blox",
      "layer": "radio",
      "maker": "u-blox",
      "does": "RTK GNSS. Centimeter outdoor pose for mowers, boats, survey UGVs.",
      "buses": [
        "uart",
        "i2c",
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pixhawk-6c",
        "pi5",
        "esp32-s3"
      ],
      "typicalUsd": "$180–250",
      "buy": [
        {
          "label": "SparkFun GPS-RTK-SMA",
          "href": "https://www.sparkfun.com/sparkfun-gps-rtk-sma-zed-f9p.html"
        },
        {
          "label": "u-blox ZED-F9P",
          "href": "https://www.u-blox.com/en/product/zed-f9p-module"
        }
      ]
    },
    {
      "id": "dw3000",
      "name": "Qorvo DW3000",
      "family": "UWB",
      "layer": "radio",
      "maker": "Qorvo",
      "does": "UWB ranging. Indoor docks and tool tracking when GNSS is dead.",
      "buses": [
        "spi",
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "esp32-s3",
        "nrf52840",
        "pi5"
      ],
      "typicalUsd": "$15–40",
      "buy": [
        {
          "label": "Qorvo DW3000",
          "href": "https://www.qorvo.com/products/p/DW3110"
        }
      ]
    },
    {
      "id": "lan9252",
      "name": "Microchip LAN9252",
      "family": "EtherCAT",
      "layer": "radio",
      "maker": "Microchip",
      "does": "EtherCAT slave controller. How industrial arms and IO slices talk, not Wi-Fi.",
      "buses": [
        "ethernet",
        "spi"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32h7",
        "imx8mp",
        "elmo-gold"
      ],
      "typicalUsd": "$12–30",
      "buy": [
        {
          "label": "Microchip LAN9252",
          "href": "https://www.microchip.com/en-us/product/lan9252"
        }
      ]
    },
    {
      "id": "xm430",
      "name": "Dynamixel XM430-W350",
      "family": "Dynamixel",
      "layer": "actuate",
      "maker": "Robotis",
      "does": "Research-grade smart servo. Current + position + daisy chain. Open SDK.",
      "buses": [
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "cm5",
        "dynamixel"
      ],
      "typicalUsd": "$260–300",
      "buy": [
        {
          "label": "Robotis XM430",
          "href": "https://www.robotis.us/dynamixel-xm430-w350-t/"
        }
      ]
    },
    {
      "id": "ak80-9",
      "name": "T-Motor AK80-9",
      "family": "T-Motor",
      "layer": "actuate",
      "maker": "T-Motor",
      "does": "Quasi-direct-drive actuator used on open humanoids. CAN, integrated reduction.",
      "buses": [
        "can"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nano",
        "stm32g4",
        "odrive-s1"
      ],
      "typicalUsd": "$300–450",
      "buy": [
        {
          "label": "T-Motor AK series",
          "href": "https://store.tmotor.com/"
        }
      ]
    },
    {
      "id": "vesc",
      "name": "VESC 6",
      "family": "VESC",
      "layer": "actuate",
      "maker": "Vedder / Trampa",
      "does": "Open-source FOC drive. EVs, wheeled robots, some arms. Huge community firmware.",
      "buses": [
        "can",
        "uart",
        "usb"
      ],
      "derivatives": [],
      "pairsWith": [
        "pi5",
        "esp32-c6",
        "as5047p"
      ],
      "typicalUsd": "$80–180",
      "buy": [
        {
          "label": "Trampa VESC",
          "href": "https://trampaboards.com/vesc--c-172.html"
        }
      ]
    },
    {
      "id": "maxon-escon",
      "name": "maxon ESCON",
      "family": "maxon",
      "layer": "actuate",
      "maker": "maxon",
      "does": "Industrial servo drive. Medical and factory arms. Analog/CAN, not a hobby UART.",
      "buses": [
        "can",
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "imx8mp",
        "lan9252",
        "stm32h7"
      ],
      "typicalUsd": "$250–600",
      "buy": [
        {
          "label": "maxon ESCON",
          "href": "https://www.maxongroup.com/maxon/view/product/control/Positionierung/ESCON"
        }
      ]
    },
    {
      "id": "elmo-gold",
      "name": "Elmo Gold Twitter",
      "family": "Elmo",
      "layer": "actuate",
      "maker": "Elmo Motion",
      "does": "Tiny industrial drive. EtherCAT or CAN. Collaborative-arm joints.",
      "buses": [
        "can",
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "lan9252",
        "orin-agx",
        "imx8mp"
      ],
      "typicalUsd": "$400–900",
      "buy": [
        {
          "label": "Elmo Gold",
          "href": "https://www.elmomc.com/product/gold-twitter/"
        }
      ]
    },
    {
      "id": "ina228",
      "name": "TI INA228",
      "family": "TI",
      "layer": "power",
      "maker": "Texas Instruments",
      "does": "Precision bus monitor. Industrial packs and 48 V arms where INA260 is too coarse.",
      "buses": [
        "i2c"
      ],
      "derivatives": [],
      "pairsWith": [
        "stm32h7",
        "orin-nano",
        "esp32-s3"
      ],
      "typicalUsd": "$4–8",
      "buy": [
        {
          "label": "TI INA228",
          "href": "https://www.ti.com/product/INA228"
        }
      ]
    },
    {
      "id": "hd-csf",
      "name": "Harmonic Drive CSF",
      "family": "Harmonic Drive",
      "layer": "reduce",
      "maker": "Harmonic Drive Systems",
      "does": "Cup strain-wave component set. Wrist and cobot default. Ratio 30–160. Hysteresis 1–2.5 arcmin. Flexspline is SNCM439 / 40CrNiMoA class steel, wall <1 mm. Grease SK-2 (≤sz17, lithium + Mo EP) or SK-1A (≥sz20). Rated 0.9–137 Nm on common sizes.",
      "buses": [],
      "derivatives": [
        "hd-csg",
        "hd-shd",
        "fha-17c"
      ],
      "pairsWith": [
        "fha-17c",
        "orin-agx",
        "imx8mp"
      ],
      "avoid": "Zero-backlash in the catalog is tooth preload, not zero lost motion. Do not fill with random EP2 grease.",
      "typicalUsd": "$900–4,000",
      "buy": [
        {
          "label": "Harmonic Drive CSF/CSG",
          "href": "https://www.harmonicdrive.net/"
        },
        {
          "label": "CSF/CSG component PDF",
          "href": "https://www.harmonicdrive.net/_hd/content/documents1/CSG-CSF_Component.pdf"
        }
      ]
    },
    {
      "id": "hd-csg",
      "name": "Harmonic Drive CSG-2UH",
      "family": "Harmonic Drive",
      "layer": "reduce",
      "maker": "Harmonic Drive Systems",
      "does": "Housed CSF with a crossed-roller output. About 30% more torque and 10 kh L10 vs CSF. Cobot J1 and industrial J5/J6.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "fha-17c"
      ],
      "typicalUsd": "$1,200–7,000",
      "buy": [
        {
          "label": "Harmonic Drive gear units",
          "href": "https://www.harmonicdrive.net/"
        }
      ]
    },
    {
      "id": "hd-shd",
      "name": "Harmonic Drive SHD",
      "family": "Harmonic Drive",
      "layer": "reduce",
      "maker": "Harmonic Drive Systems",
      "does": "Silk-hat hollow strain-wave. Cables through the joint. Humanoid wrist and cobot J6. Sz14-50 rated 3.7 Nm.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "leaderdrive-lhd"
      ],
      "typicalUsd": "$1,100–3,200",
      "buy": [
        {
          "label": "CSD/SHD PDF",
          "href": "https://www.harmonicdrive.net/_hd/content/documents/csd-shd.pdf"
        }
      ]
    },
    {
      "id": "leaderdrive-lcs",
      "name": "Leaderdrive LCS",
      "family": "Leaderdrive",
      "layer": "reduce",
      "maker": "Leaderdrive",
      "does": "Green Harmonic. CSF-compatible cup from Suzhou. ~27% of China harmonic shipments. Flexspline 40CrNiMoA, QT + nitride. Street $120–700. Unitree-class arms buy this, not Ali clones.",
      "buses": [],
      "derivatives": [
        "leaderdrive-lhd"
      ],
      "pairsWith": [
        "ak80-9",
        "unitree-go-m8010",
        "orin-nano"
      ],
      "typicalUsd": "$120–700",
      "buy": [
        {
          "label": "Leaderdrive LCS",
          "href": "https://www.leaderdrive.com/"
        }
      ]
    },
    {
      "id": "leaderdrive-lhd",
      "name": "Leaderdrive LHD",
      "family": "Leaderdrive",
      "layer": "reduce",
      "maker": "Leaderdrive",
      "does": "Ultra-flat hollow Leaderdrive. SHD analogue. Humanoid wrist. Hysteresis about 2.5 arcmin on size 14.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "leaderdrive-lcs",
        "hd-shd"
      ],
      "typicalUsd": "$150–800",
      "buy": [
        {
          "label": "Leaderdrive LHD",
          "href": "https://www.leaderdrive.com/product/2.html"
        }
      ]
    },
    {
      "id": "laifual-lht",
      "name": "Laifual LHT-IV",
      "family": "Laifual",
      "layer": "reduce",
      "maker": "Laifual Drive",
      "does": "Sealed hollow strain-wave from Shaoxing. Second China volume name. Size 14-50 rated 5.4 Nm. Lithium EP fill. Better than nameless clones, not Harmonic Drive life.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "leaderdrive-lcs",
        "pi5"
      ],
      "typicalUsd": "$200–900",
      "buy": [
        {
          "label": "Laifual harmonic",
          "href": "https://www.laifualdrive.com/product/harmonic-reducer/"
        }
      ]
    },
    {
      "id": "cone-harmonic",
      "name": "Cone Drive Harmonic Solutions",
      "family": "Cone Drive",
      "layer": "reduce",
      "maker": "Cone Drive",
      "does": "US-made strain-wave (Timken). Accudrive is a worm — this is the harmonic line. ITAR-friendly sourcing. L1 grease, hysteresis ~1–2 arcmin.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "teknic-clearpath"
      ],
      "avoid": "Do not order Accudrive when you want a strain-wave.",
      "typicalUsd": "$1,000–5,000",
      "buy": [
        {
          "label": "Cone Drive harmonic",
          "href": "https://conedrive.com/harmonic-gearing-v4/"
        }
      ]
    },
    {
      "id": "hiwin-datorker",
      "name": "HIWIN DATORKER DSC",
      "family": "HIWIN",
      "layer": "reduce",
      "maker": "HIWIN",
      "does": "Taiwan strain-wave, CSF envelope. Hysteresis 2 arcmin at 50:1, 1 arcmin at ≥80. Price sits between China OEM and Japan HD.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "hiwin-kk60",
        "teknic-clearpath"
      ],
      "typicalUsd": "$400–2,000",
      "buy": [
        {
          "label": "HIWIN DATORKER",
          "href": "https://www.hiwin.de/en/Products/Strain-wave-gears/Strain-wave-gear-DSC-DSH/c/5321"
        }
      ]
    },
    {
      "id": "nabtesco-rv",
      "name": "Nabtesco RV-E",
      "family": "Nabtesco",
      "layer": "reduce",
      "maker": "Nabtesco",
      "does": "Two-stage RV cycloid. About 60% of medium/heavy industrial-arm J1–J3. Rated 58–4,410 Nm on RV-E. Lost motion <1 arcmin. FANUC, Yaskawa, KUKA, ABB eat this. Harmonic cannot take the shock.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "elmo-gold",
        "imx8mp"
      ],
      "avoid": "Do not put an RV on a cobot wrist. Wrong mass and cost.",
      "typicalUsd": "$1,500–8,000",
      "buy": [
        {
          "label": "Nabtesco precision gears",
          "href": "https://precision.nabtesco.com/en/"
        }
      ]
    },
    {
      "id": "sumitomo-fine-cyclo",
      "name": "Sumitomo Fine Cyclo F2C",
      "family": "Sumitomo",
      "layer": "reduce",
      "maker": "Sumitomo",
      "does": "Precision cycloid, open catalog. Ratios 29–179. Zero mesh backlash, lost motion <1 arcmin. #2 Japanese cycloid after Nabtesco. Positioners and mid-payload bases.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "nabtesco-rv",
        "wittenstein-tp"
      ],
      "typicalUsd": "$1,500–12,000",
      "buy": [
        {
          "label": "Fine Cyclo F2",
          "href": "https://us.sumitomodrive.com/en-us/product/fine-cyclo-series-f2-type"
        }
      ]
    },
    {
      "id": "spinea-twinspin",
      "name": "SPINEA TwinSpin",
      "family": "SPINEA",
      "layer": "reduce",
      "maker": "SPINEA",
      "does": "Slovak trochoid cycloid with an integrated output bearing. Now Timken. Compact European arms and semiconductor axes. Not the FANUC J1 part.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "nabtesco-rv",
        "kria-kv260"
      ],
      "typicalUsd": "$1,500–10,000",
      "buy": [
        {
          "label": "TwinSpin",
          "href": "https://www.spinea.com/en/products/twinspin"
        }
      ]
    },
    {
      "id": "neugart-ple",
      "name": "Neugart PLE",
      "family": "Neugart",
      "layer": "reduce",
      "maker": "Neugart",
      "does": "Economy planetary. 3–512:1. Backlash 6–22 arcmin. AMR wheels and packaging — not a 6-axis joint.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "teknic-clearpath",
        "vesc"
      ],
      "typicalUsd": "$200–800",
      "buy": [
        {
          "label": "Neugart PLE",
          "href": "https://www.neugart.com/en/gearboxes/economy-gearboxes/ple"
        }
      ]
    },
    {
      "id": "wittenstein-tp",
      "name": "Wittenstein TP+",
      "family": "Wittenstein",
      "layer": "reduce",
      "maker": "Wittenstein",
      "does": "Helical planetary with a robot flange. Backlash down to 1 arcmin. Delta robots and high-dyn gantries. Still not an RV on shock.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "nabtesco-rv",
        "teknic-clearpath"
      ],
      "typicalUsd": "$2,000–12,000",
      "buy": [
        {
          "label": "Wittenstein SP+/TP+",
          "href": "https://www.wittenstein-group.com/int-en/product/sp"
        }
      ]
    },
    {
      "id": "cubemars-ak70-10",
      "name": "CubeMars AK70-10",
      "family": "T-Motor",
      "layer": "actuate",
      "maker": "T-Motor",
      "does": "QDD joint. 10:1 planetary, 24.8 Nm peak / 8.3 Nm rated, 24/48 V, CAN+UART, 521 g. Open quadruped and exo default next to the AK80-9.",
      "buses": [
        "can",
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "ak80-9",
        "damiao-j4310",
        "bno085"
      ],
      "typicalUsd": "$400–650",
      "buy": [
        {
          "label": "CubeMars AK70-10",
          "href": "https://www.cubemars.com/goods-1031-AK70-10.html"
        }
      ]
    },
    {
      "id": "unitree-go-m8010",
      "name": "Unitree GO-M8010-6",
      "family": "Unitree",
      "layer": "actuate",
      "maker": "Unitree",
      "does": "The Go1 joint you can actually buy. 6.33:1 QDD, 23.7 Nm peak, RS-485, ~$370. H1 M107 knees are not sold as parts.",
      "buses": [
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "ak80-9",
        "orin-nano"
      ],
      "avoid": "Not a spare for H1/G1. Different actuator, different protocol.",
      "typicalUsd": "$370–400",
      "buy": [
        {
          "label": "Unitree GO-M8010-6",
          "href": "https://www.unitree.com/mobile/go1/motor/"
        }
      ]
    },
    {
      "id": "damiao-j4310",
      "name": "Damiao DM-J4310-2EC",
      "family": "Damiao",
      "layer": "actuate",
      "maker": "Damiao",
      "does": "Open-humanoid QDD. 10:1, 7 Nm peak / 3 Nm rated, dual encoder, CAN MIT-mode, ~300 g, ~$140. OpenArm / Mini humanoid distal default.",
      "buses": [
        "can",
        "uart"
      ],
      "derivatives": [
        "damiao-j4340"
      ],
      "pairsWith": [
        "ak80-9",
        "orin-nano",
        "pi5"
      ],
      "typicalUsd": "$125–155",
      "buy": [
        {
          "label": "Damiao actuators",
          "href": "https://www.damiaokeji.com/"
        }
      ]
    },
    {
      "id": "damiao-j4340",
      "name": "Damiao DM-J4340-2EC",
      "family": "Damiao",
      "layer": "actuate",
      "maker": "Damiao",
      "does": "Same family at 40:1. 27 Nm peak / 9 Nm rated. Medium planetary, not QDD. Proximal arm when J4310 runs out of torque.",
      "buses": [
        "can",
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "damiao-j4310"
      ],
      "typicalUsd": "$155–180",
      "buy": [
        {
          "label": "Damiao J4340",
          "href": "https://www.damiaokeji.com/"
        }
      ]
    },
    {
      "id": "ph54-200",
      "name": "Dynamixel PH54-200-S500-R",
      "family": "Dynamixel",
      "layer": "actuate",
      "maker": "Robotis",
      "does": "Industrial Dynamixel-P. Maxon BLDC + 502:1 cycloid, 44.7 Nm continuous, RS-485. Not backdrivable. Not an XL430.",
      "buses": [
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "dynamixel",
        "pi5",
        "xm430"
      ],
      "typicalUsd": "$3,100–3,600",
      "grade": "industrial",
      "buy": [
        {
          "label": "Robotis PH54-200",
          "href": "https://www.robotis.us/dynamixel-ph54-200-s500-r/"
        }
      ]
    },
    {
      "id": "teknic-clearpath",
      "name": "Teknic ClearPath-EC",
      "family": "Teknic",
      "layer": "actuate",
      "maker": "Teknic",
      "does": "NEMA 23 integrated servo with EtherCAT and STO. 2.0 Nm peak / 0.4 Nm rated, no gearbox. Add a harmonic or planetary if the joint needs ratio.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "neugart-ple",
        "hiwin-kk60"
      ],
      "typicalUsd": "$664–750",
      "buy": [
        {
          "label": "ClearPath-EC 2311",
          "href": "https://teknic.com/model-info/CPM-ECSK-2311H-ELSB/"
        }
      ]
    },
    {
      "id": "westwood-panda",
      "name": "Westwood Panda BEAR",
      "family": "Westwood",
      "layer": "actuate",
      "maker": "Westwood Robotics",
      "does": "US-buyable humanoid QDD module. ~12 Nm / 30 Nm class, RS-485, optional liquid cool, $1,189. Apptronik joints are not sold.",
      "buses": [
        "uart"
      ],
      "derivatives": [],
      "pairsWith": [
        "orin-nano",
        "bno085"
      ],
      "typicalUsd": "$1,189",
      "buy": [
        {
          "label": "Westwood BEAR",
          "href": "https://www.westwoodrobotics.io/bearseries/"
        }
      ]
    },
    {
      "id": "fha-17c",
      "name": "Harmonic Drive FHA-17C",
      "family": "Harmonic Drive",
      "layer": "actuate",
      "maker": "Harmonic Drive Systems",
      "does": "Integrated harmonic actuator. 100:1, 24 Nm rated / 57 Nm peak, 2.5 kg. Opposite of QDD: stiff, not backdrivable. EtherCAT lives on the HD driver, not the actuator body.",
      "buses": [
        "ethernet"
      ],
      "derivatives": [],
      "pairsWith": [
        "hd-csf",
        "hd-csg",
        "imx8mp"
      ],
      "typicalUsd": "$3,000–4,500 + drive",
      "buy": [
        {
          "label": "FHA-C hollow actuators",
          "href": "https://www.harmonicdrive.net/products/rotary-actuators/hollow-shaft-servo-actuators/fha-c"
        }
      ]
    },
    {
      "id": "thomson-electrak",
      "name": "Thomson Electrak HD",
      "family": "Thomson",
      "layer": "actuate",
      "maker": "Thomson",
      "does": "Sealed ball-screw linear. 2.6 kN dynamic on B026, 24 V, optional J1939. AGV lifts and hatches. Not a humanoid knee unless you design the linkage.",
      "buses": [
        "can"
      ],
      "derivatives": [],
      "pairsWith": [
        "hiwin-kk60",
        "ina228"
      ],
      "typicalUsd": "$1,200–1,800",
      "buy": [
        {
          "label": "Electrak HD",
          "href": "https://www.thomsonlinear.com/en/products/linear-actuators/electrak-hd"
        }
      ]
    },
    {
      "id": "hiwin-kk60",
      "name": "HIWIN KK60",
      "family": "HIWIN",
      "layer": "actuate",
      "maker": "HIWIN",
      "does": "Ball-screw linear module. ±3 µm P-grade. Motor not included. Pair a 50–200 W servo.",
      "buses": [],
      "derivatives": [],
      "pairsWith": [
        "teknic-clearpath",
        "hiwin-datorker"
      ],
      "typicalUsd": "$400–800 module",
      "buy": [
        {
          "label": "HIWIN positioning stages",
          "href": "https://www.hiwin.com/"
        }
      ]
    }
  ],
  "stacks": [
    {
      "id": "esp32-field-node",
      "name": "ESP32 field node",
      "intent": "Battery robot that sees heat, heading, and cliffs, then radios home.",
      "layers": [
        {
          "role": "Radio + glue",
          "partId": "esp32-s3",
          "why": "Wi-Fi/BLE host, USB, enough RAM for sensors."
        },
        {
          "role": "Orientation",
          "partId": "bno085",
          "why": "On-chip fusion over I2C. No heading math on the MCU."
        },
        {
          "role": "Cliff / dock",
          "partId": "vl53l1x",
          "why": "Same I2C bus, 4 m ToF."
        },
        {
          "role": "Thermal",
          "partId": "mlx90640",
          "why": "I2C thermal grid. Person vs background."
        },
        {
          "role": "Power sense",
          "partId": "ina260",
          "why": "Watch the pack before the brownout."
        }
      ]
    },
    {
      "id": "wifi-camera-scout",
      "name": "Wi-Fi camera scout",
      "intent": "Throw a camera on the network. Do not ask it to torque a joint.",
      "layers": [
        {
          "role": "Vision SoC",
          "partId": "xiao-s3-sense",
          "why": "Camera + mic + SD already on the board."
        },
        {
          "role": "Fallback cam",
          "partId": "esp32-cam",
          "why": "Cheaper OV2640 brick if size is not the constraint."
        },
        {
          "role": "Heading",
          "partId": "bno085",
          "why": "Tell the stream which way the lens pointed."
        }
      ]
    },
    {
      "id": "thread-factory-mesh",
      "name": "Thread factory mesh",
      "intent": "Many endpoints, one Matter/Thread fabric, no Wi-Fi tax per node.",
      "layers": [
        {
          "role": "Mesh radio",
          "partId": "esp32-c6",
          "why": "Wi-Fi 6 plus 802.15.4 on one chip."
        },
        {
          "role": "Endpoint",
          "partId": "esp32-h2",
          "why": "Thread/BLE only. Cheaper sleepy nodes."
        },
        {
          "role": "Range",
          "partId": "vl53l1x",
          "why": "Dock and presence on each cell."
        }
      ]
    },
    {
      "id": "joint-and-radio",
      "name": "Joint + radio",
      "intent": "Real-time motor loop on STM32, radio off-board on ESP32.",
      "layers": [
        {
          "role": "Motor MCU",
          "partId": "stm32g4",
          "why": "Timers and analog front-end built for FOC."
        },
        {
          "role": "Stepper drive",
          "partId": "tmc2209",
          "why": "UART from the G4. Silent, stall-aware."
        },
        {
          "role": "Encoder",
          "partId": "as5047p",
          "why": "SPI angle into the current loop."
        },
        {
          "role": "Radio",
          "partId": "esp32-c6",
          "why": "CAN or UART uplink. Do not close FOC on the ESP."
        },
        {
          "role": "Bus",
          "partId": "mcp2515",
          "why": "If the radio board has no native CAN."
        }
      ]
    },
    {
      "id": "bldc-research-arm",
      "name": "BLDC research arm",
      "intent": "Torque joints with ODrive, brain on Jetson or Pi.",
      "layers": [
        {
          "role": "Brain",
          "partId": "orin-nano",
          "why": "Perception and policy."
        },
        {
          "role": "Drive",
          "partId": "odrive-s1",
          "why": "FOC + encoder over CAN."
        },
        {
          "role": "Encoder",
          "partId": "as5047p",
          "why": "High-rate joint angle."
        },
        {
          "role": "Radio / I/O",
          "partId": "esp32-c6",
          "why": "Teach pendant, estop telemetry."
        }
      ]
    },
    {
      "id": "pi-ros-desk",
      "name": "Pi ROS desk robot",
      "intent": "Linux + ROS 2 + a camera + optional NPU. Motors stay on a Pico.",
      "layers": [
        {
          "role": "Brain",
          "partId": "pi5",
          "why": "ROS 2, networking, CSI."
        },
        {
          "role": "NPU",
          "partId": "hailo",
          "why": "Detection without a Jetson."
        },
        {
          "role": "Camera",
          "partId": "imx708",
          "why": "Official CSI module."
        },
        {
          "role": "Scan",
          "partId": "rplidar",
          "why": "Indoor 2D SLAM."
        },
        {
          "role": "Realtime",
          "partId": "rp2350",
          "why": "Steppers and PWM off the Linux box."
        }
      ]
    },
    {
      "id": "humanoid-perception",
      "name": "Humanoid perception",
      "intent": "Depth + 3D lidar + CUDA on the torso. Limbs are a different stack.",
      "layers": [
        {
          "role": "Brain",
          "partId": "orin-nano",
          "why": "67 TOPS, CSI + USB3."
        },
        {
          "role": "Depth",
          "partId": "d435i",
          "why": "Stereo + IMU, research default."
        },
        {
          "role": "Lidar",
          "partId": "livox-mid360",
          "why": "Mid-range 3D on Ethernet."
        },
        {
          "role": "Body IMU",
          "partId": "bno085",
          "why": "Redundant attitude if the depth IMU drops."
        }
      ]
    },
    {
      "id": "smart-servo-neck",
      "name": "Smart-servo neck",
      "intent": "Dynamixel daisy chain for a head or gripper. Linux talks serial.",
      "layers": [
        {
          "role": "Brain",
          "partId": "pi5",
          "why": "Protocol 2.0 from userspace."
        },
        {
          "role": "Servos",
          "partId": "dynamixel",
          "why": "ID, PID, current on the wire."
        },
        {
          "role": "Camera",
          "partId": "imx708",
          "why": "Look where the neck points."
        }
      ]
    },
    {
      "id": "oak-mobile",
      "name": "OAK mobile scout",
      "intent": "Open vision on a Pi. Depth leaves the camera. Motors stay off Linux.",
      "layers": [
        {
          "role": "Brain",
          "partId": "pi5",
          "why": "ROS 2 host."
        },
        {
          "role": "Vision",
          "partId": "oak-d-pro",
          "why": "Depth + detect on the VPU."
        },
        {
          "role": "Realtime",
          "partId": "rp2350",
          "why": "Drive PWM off the Pi."
        },
        {
          "role": "Power",
          "partId": "ina260",
          "why": "Watch the pack."
        }
      ]
    },
    {
      "id": "industrial-arm",
      "name": "Industrial joint slice",
      "intent": "EtherCAT drive + industrial Linux. No Wi-Fi in the loop.",
      "layers": [
        {
          "role": "Brain",
          "partId": "imx8mp",
          "why": "Factory Linux SOM."
        },
        {
          "role": "Bus",
          "partId": "lan9252",
          "why": "EtherCAT slave."
        },
        {
          "role": "Drive",
          "partId": "elmo-gold",
          "why": "Joint torque."
        },
        {
          "role": "Sense",
          "partId": "hokuyo-ust",
          "why": "Cell-level lidar."
        }
      ]
    },
    {
      "id": "outdoor-ugv",
      "name": "Outdoor UGV",
      "intent": "RTK pose, spinning lidar, Jetson policy. Open stack, industrial sensors.",
      "layers": [
        {
          "role": "Brain",
          "partId": "orin-nx",
          "why": "Multi-sensor CUDA."
        },
        {
          "role": "GNSS",
          "partId": "zed-f9p",
          "why": "RTK when the sky is clear."
        },
        {
          "role": "Lidar",
          "partId": "ouster-os1",
          "why": "Outdoor clouds."
        },
        {
          "role": "Stereo",
          "partId": "zed-x",
          "why": "GMSL cameras that survive weather."
        },
        {
          "role": "AHRS",
          "partId": "vn-100",
          "why": "Heading when GNSS glitches."
        }
      ]
    },
    {
      "id": "open-humanoid-leg",
      "name": "Open humanoid leg",
      "intent": "QDD actuators + research brain. The open counterpart to a closed vendor chain.",
      "layers": [
        {
          "role": "Brain",
          "partId": "orin-nano",
          "why": "Policy + vision."
        },
        {
          "role": "Actuator",
          "partId": "ak80-9",
          "why": "CAN QDD joint."
        },
        {
          "role": "IMU",
          "partId": "bno085",
          "why": "Cheap body attitude while you bring up VN-100."
        },
        {
          "role": "Depth",
          "partId": "d435i",
          "why": "Foot and scene depth."
        }
      ]
    },
    {
      "id": "px4-airframe",
      "name": "PX4 airframe",
      "intent": "Open flight stack. Pixhawk closes the loop; GNSS and IMU are industrial.",
      "layers": [
        {
          "role": "FC",
          "partId": "pixhawk-6c",
          "why": "PX4 / ArduPilot."
        },
        {
          "role": "GNSS",
          "partId": "zed-f9p",
          "why": "RTK for survey."
        },
        {
          "role": "IMU",
          "partId": "adis16470",
          "why": "Better gyro than the board default."
        },
        {
          "role": "Link",
          "partId": "sx1262",
          "why": "Long-range command."
        }
      ]
    },
    {
      "id": "six-axis-industrial",
      "name": "Six-axis industrial arm",
      "intent": "RV on the base, harmonic on the wrist. That is the actual BOM, not a Pi and a servo.",
      "layers": [
        {
          "role": "J1–J3",
          "partId": "nabtesco-rv",
          "why": "Shock and moment. ~60% of this slot worldwide."
        },
        {
          "role": "J4–J6",
          "partId": "hd-csf",
          "why": "Strain-wave wrist. Mass and zero mesh backlash."
        },
        {
          "role": "Drive",
          "partId": "elmo-gold",
          "why": "EtherCAT joint torque."
        },
        {
          "role": "Brain",
          "partId": "imx8mp",
          "why": "Factory Linux, not a Jetson toy."
        }
      ]
    },
    {
      "id": "open-qdd-leg",
      "name": "Open QDD leg",
      "intent": "Backdrivable joints. Feel the ground. Harmonic would hide the impact.",
      "layers": [
        {
          "role": "Hip / thigh",
          "partId": "ak80-9",
          "why": "9:1 QDD, 48 V, community firmware."
        },
        {
          "role": "Sibling",
          "partId": "cubemars-ak70-10",
          "why": "10:1, documented CAN."
        },
        {
          "role": "Body IMU",
          "partId": "bno085",
          "why": "Attitude while the policy learns."
        },
        {
          "role": "Brain",
          "partId": "orin-nano",
          "why": "Policy + vision on the torso."
        }
      ]
    },
    {
      "id": "cn-humanoid-arm",
      "name": "CN humanoid arm",
      "intent": "Named China harmonic plus a cheap QDD distal. Not an Ali no-name cup.",
      "layers": [
        {
          "role": "Shoulder cup",
          "partId": "leaderdrive-lcs",
          "why": "Production strain-wave, 40CrNiMoA flexspline."
        },
        {
          "role": "Wrist hollow",
          "partId": "leaderdrive-lhd",
          "why": "Cables through the joint."
        },
        {
          "role": "Distal QDD",
          "partId": "damiao-j4310",
          "why": "10:1, dual encoder, CAN."
        },
        {
          "role": "Brain",
          "partId": "orin-nano",
          "why": "Same stack as the open humanoid leg."
        }
      ]
    }
  ]
}