{
  "schemaVersion": 1,
  "id": "tutorial-kestrel",
  "name": "Kestrel · Survey Drone Study",
  "template": "custom",
  "presetId": "drone-mapping",
  "parts": [
    {
      "id": "body",
      "defId": "uav-body",
      "name": "Central carbon deck",
      "position": [
        0,
        0.191,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "customDef": {
        "id": "uav-body",
        "name": "Central carbon deck",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "plate",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.19,
          0.012,
          0.15
        ],
        "mass": 0.14,
        "color": "#69c9d3",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "upper-deck",
      "defId": "uav-upper-deck",
      "name": "Electronics deck",
      "position": [
        0,
        0.251,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-upper-deck",
        "name": "Electronics deck",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "plate",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.15,
          0.012,
          0.13
        ],
        "mass": 0.08,
        "color": "#334955",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "skid-left",
      "defId": "uav-skid-left",
      "name": "Landing skid",
      "position": [
        0,
        0.009999999999999998,
        -0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-skid-left",
        "name": "Landing skid",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.27,
          0.018,
          0.018
        ],
        "mass": 0.04,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "strut-rear-left",
      "defId": "uav-strut-rear-left",
      "name": "Landing strut",
      "position": [
        -0.09,
        0.101,
        -0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-strut-rear-left",
        "name": "Landing strut",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.012,
          0.17,
          0.012
        ],
        "mass": 0.015,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "strut-front-left",
      "defId": "uav-strut-front-left",
      "name": "Landing strut",
      "position": [
        0.09,
        0.101,
        -0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-strut-front-left",
        "name": "Landing strut",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.012,
          0.17,
          0.012
        ],
        "mass": 0.015,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "skid-right",
      "defId": "uav-skid-right",
      "name": "Landing skid",
      "position": [
        0,
        0.009999999999999998,
        0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-skid-right",
        "name": "Landing skid",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.27,
          0.018,
          0.018
        ],
        "mass": 0.04,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "strut-rear-right",
      "defId": "uav-strut-rear-right",
      "name": "Landing strut",
      "position": [
        -0.09,
        0.101,
        0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-strut-rear-right",
        "name": "Landing strut",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.012,
          0.17,
          0.012
        ],
        "mass": 0.015,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "strut-front-right",
      "defId": "uav-strut-front-right",
      "name": "Landing strut",
      "position": [
        0.09,
        0.101,
        0.12
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-strut-front-right",
        "name": "Landing strut",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.012,
          0.17,
          0.012
        ],
        "mass": 0.015,
        "color": "#6f8991",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "arm-0",
      "defId": "uav-arm-0",
      "name": "Rotor boom 1",
      "position": [
        0.09899494936611666,
        0.195,
        0.09899494936611665
      ],
      "rotation": [
        0,
        -0.7853981633974483,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-arm-0",
        "name": "Rotor boom 1",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.28,
          0.022,
          0.025
        ],
        "mass": 0.055,
        "color": "#38505d",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "rotor-1",
      "defId": "drone-motor",
      "name": "UAV brushless outrunner · layout",
      "position": [
        0.19798989873223333,
        0.231,
        0.1979898987322333
      ],
      "rotation": [
        0,
        0,
        1.5707963267948966
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-0"
    },
    {
      "id": "propeller-1",
      "defId": "drone-propeller",
      "name": "UAV two-blade propeller · 230 mm",
      "position": [
        0.19798989873223333,
        0.257,
        0.1979898987322333
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "rotor-1"
    },
    {
      "id": "esc-1",
      "defId": "drone-esc",
      "name": "UAV ESC · 30 A label · layout",
      "position": [
        0.112854242277373,
        0.221,
        0.11285424227737297
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-0"
    },
    {
      "id": "arm-1",
      "defId": "uav-arm-1",
      "name": "Rotor boom 2",
      "position": [
        -0.09899494936611665,
        0.195,
        0.09899494936611666
      ],
      "rotation": [
        0,
        -2.356194490192345,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-arm-1",
        "name": "Rotor boom 2",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.28,
          0.022,
          0.025
        ],
        "mass": 0.055,
        "color": "#38505d",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "rotor-2",
      "defId": "drone-motor",
      "name": "UAV brushless outrunner · layout",
      "position": [
        -0.1979898987322333,
        0.231,
        0.19798989873223333
      ],
      "rotation": [
        0,
        0,
        1.5707963267948966
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-1"
    },
    {
      "id": "propeller-2",
      "defId": "drone-propeller",
      "name": "UAV two-blade propeller · 230 mm",
      "position": [
        -0.1979898987322333,
        0.257,
        0.19798989873223333
      ],
      "rotation": [
        0,
        0.6,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "rotor-2"
    },
    {
      "id": "esc-2",
      "defId": "drone-esc",
      "name": "UAV ESC · 30 A label · layout",
      "position": [
        -0.11285424227737297,
        0.221,
        0.112854242277373
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-1"
    },
    {
      "id": "arm-2",
      "defId": "uav-arm-2",
      "name": "Rotor boom 3",
      "position": [
        -0.09899494936611669,
        0.195,
        -0.09899494936611665
      ],
      "rotation": [
        0,
        2.3561944901923453,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-arm-2",
        "name": "Rotor boom 3",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.28,
          0.022,
          0.025
        ],
        "mass": 0.055,
        "color": "#38505d",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "rotor-3",
      "defId": "drone-motor",
      "name": "UAV brushless outrunner · layout",
      "position": [
        -0.19798989873223338,
        0.231,
        -0.1979898987322333
      ],
      "rotation": [
        0,
        0,
        1.5707963267948966
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-2"
    },
    {
      "id": "propeller-3",
      "defId": "drone-propeller",
      "name": "UAV two-blade propeller · 230 mm",
      "position": [
        -0.19798989873223338,
        0.257,
        -0.1979898987322333
      ],
      "rotation": [
        0,
        1.2,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "rotor-3"
    },
    {
      "id": "esc-3",
      "defId": "drone-esc",
      "name": "UAV ESC · 30 A label · layout",
      "position": [
        -0.11285424227737302,
        0.221,
        -0.11285424227737297
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-2"
    },
    {
      "id": "arm-3",
      "defId": "uav-arm-3",
      "name": "Rotor boom 4",
      "position": [
        0.09899494936611664,
        0.195,
        -0.09899494936611669
      ],
      "rotation": [
        0,
        0.7853981633974486,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-arm-3",
        "name": "Rotor boom 4",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.28,
          0.022,
          0.025
        ],
        "mass": 0.055,
        "color": "#38505d",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "rotor-4",
      "defId": "drone-motor",
      "name": "UAV brushless outrunner · layout",
      "position": [
        0.19798989873223327,
        0.231,
        -0.19798989873223338
      ],
      "rotation": [
        0,
        0,
        1.5707963267948966
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-3"
    },
    {
      "id": "propeller-4",
      "defId": "drone-propeller",
      "name": "UAV two-blade propeller · 230 mm",
      "position": [
        0.19798989873223327,
        0.257,
        -0.19798989873223338
      ],
      "rotation": [
        0,
        1.7999999999999998,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "rotor-4"
    },
    {
      "id": "esc-4",
      "defId": "drone-esc",
      "name": "UAV ESC · 30 A label · layout",
      "position": [
        0.11285424227737295,
        0.221,
        -0.11285424227737302
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "arm-3"
    },
    {
      "id": "battery",
      "defId": "battery-4s-5000",
      "name": "4S battery · 5 Ah · behavioral",
      "position": [
        -0.015,
        0.291,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "regulator",
      "defId": "regulator-5v-5a",
      "name": "5 V buck regulator · 5 A",
      "position": [
        -0.045,
        0.226,
        -0.035
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "controller",
      "defId": "esp32-s3",
      "name": "ESP32-S3 · virtual controller",
      "position": [
        0.018,
        0.226,
        0.025
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "pdb",
      "defId": "drone-pdb",
      "name": "UAV power distribution board · layout",
      "position": [
        -0.015,
        0.206,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "compute",
      "defId": "compute",
      "name": "AI compute module",
      "position": [
        -0.055,
        0.256,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "camera",
      "defId": "camera",
      "name": "RGB camera",
      "position": [
        0.115,
        0.211,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "gnss-mast",
      "defId": "uav-gnss-mast",
      "name": "GNSS receiver standoff",
      "position": [
        -0.06,
        0.296,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body",
      "customDef": {
        "id": "uav-gnss-mast",
        "name": "GNSS receiver standoff",
        "category": "Structure",
        "subCategory": "Drone frames and payloads",
        "visual": "extrusion",
        "description": "Generic UAV geometry and specified mass. No structural stress or aerodynamics.",
        "size": [
          0.01,
          0.075,
          0.01
        ],
        "mass": 0.008,
        "color": "#9bb3bc",
        "shape": "box",
        "pins": [],
        "params": {},
        "price": 0,
        "fidelity": "geometry-only",
        "source": "BotSims generic UAV concept, not manufacturer CAD.",
        "version": 1
      }
    },
    {
      "id": "gnss",
      "defId": "sensor-gps",
      "name": "GNSS receiver with patch antenna",
      "position": [
        -0.06,
        0.341,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    },
    {
      "id": "imu",
      "defId": "imu",
      "name": "6-axis IMU",
      "position": [
        0.035,
        0.261,
        0
      ],
      "rotation": [
        0,
        0,
        0
      ],
      "joint": "fixed",
      "params": {},
      "parentId": "body"
    }
  ],
  "wires": [
    {
      "id": "drone-wire-1",
      "from": {
        "part": "battery",
        "pin": "POS"
      },
      "to": {
        "part": "pdb",
        "pin": "POS"
      }
    },
    {
      "id": "drone-wire-2",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "pdb",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-3",
      "from": {
        "part": "pdb",
        "pin": "OUT"
      },
      "to": {
        "part": "regulator",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-4",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "regulator",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-5",
      "from": {
        "part": "regulator",
        "pin": "VOUT"
      },
      "to": {
        "part": "controller",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-6",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "controller",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-7",
      "from": {
        "part": "regulator",
        "pin": "VOUT"
      },
      "to": {
        "part": "compute",
        "pin": "VCC"
      }
    },
    {
      "id": "drone-wire-8",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "compute",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-9",
      "from": {
        "part": "regulator",
        "pin": "VOUT"
      },
      "to": {
        "part": "camera",
        "pin": "VCC"
      }
    },
    {
      "id": "drone-wire-10",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "camera",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-11",
      "from": {
        "part": "regulator",
        "pin": "VOUT"
      },
      "to": {
        "part": "imu",
        "pin": "VCC"
      }
    },
    {
      "id": "drone-wire-12",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "imu",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-13",
      "from": {
        "part": "compute",
        "pin": "USB"
      },
      "to": {
        "part": "camera",
        "pin": "DATA"
      }
    },
    {
      "id": "drone-wire-14",
      "from": {
        "part": "controller",
        "pin": "SDA"
      },
      "to": {
        "part": "imu",
        "pin": "SDA"
      }
    },
    {
      "id": "drone-wire-15",
      "from": {
        "part": "controller",
        "pin": "SCL"
      },
      "to": {
        "part": "imu",
        "pin": "SCL"
      }
    },
    {
      "id": "drone-wire-16",
      "from": {
        "part": "pdb",
        "pin": "OUT"
      },
      "to": {
        "part": "esc-1",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-17",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "esc-1",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-18",
      "from": {
        "part": "controller",
        "pin": "SERVO_1"
      },
      "to": {
        "part": "esc-1",
        "pin": "PWM"
      }
    },
    {
      "id": "drone-wire-19",
      "from": {
        "part": "esc-1",
        "pin": "A"
      },
      "to": {
        "part": "rotor-1",
        "pin": "A"
      }
    },
    {
      "id": "drone-wire-20",
      "from": {
        "part": "esc-1",
        "pin": "B"
      },
      "to": {
        "part": "rotor-1",
        "pin": "B"
      }
    },
    {
      "id": "drone-wire-21",
      "from": {
        "part": "esc-1",
        "pin": "C"
      },
      "to": {
        "part": "rotor-1",
        "pin": "C"
      }
    },
    {
      "id": "drone-wire-22",
      "from": {
        "part": "pdb",
        "pin": "OUT"
      },
      "to": {
        "part": "esc-2",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-23",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "esc-2",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-24",
      "from": {
        "part": "controller",
        "pin": "SERVO_2"
      },
      "to": {
        "part": "esc-2",
        "pin": "PWM"
      }
    },
    {
      "id": "drone-wire-25",
      "from": {
        "part": "esc-2",
        "pin": "A"
      },
      "to": {
        "part": "rotor-2",
        "pin": "A"
      }
    },
    {
      "id": "drone-wire-26",
      "from": {
        "part": "esc-2",
        "pin": "B"
      },
      "to": {
        "part": "rotor-2",
        "pin": "B"
      }
    },
    {
      "id": "drone-wire-27",
      "from": {
        "part": "esc-2",
        "pin": "C"
      },
      "to": {
        "part": "rotor-2",
        "pin": "C"
      }
    },
    {
      "id": "drone-wire-28",
      "from": {
        "part": "pdb",
        "pin": "OUT"
      },
      "to": {
        "part": "esc-3",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-29",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "esc-3",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-30",
      "from": {
        "part": "controller",
        "pin": "SERVO_3"
      },
      "to": {
        "part": "esc-3",
        "pin": "PWM"
      }
    },
    {
      "id": "drone-wire-31",
      "from": {
        "part": "esc-3",
        "pin": "A"
      },
      "to": {
        "part": "rotor-3",
        "pin": "A"
      }
    },
    {
      "id": "drone-wire-32",
      "from": {
        "part": "esc-3",
        "pin": "B"
      },
      "to": {
        "part": "rotor-3",
        "pin": "B"
      }
    },
    {
      "id": "drone-wire-33",
      "from": {
        "part": "esc-3",
        "pin": "C"
      },
      "to": {
        "part": "rotor-3",
        "pin": "C"
      }
    },
    {
      "id": "drone-wire-34",
      "from": {
        "part": "pdb",
        "pin": "OUT"
      },
      "to": {
        "part": "esc-4",
        "pin": "VIN"
      }
    },
    {
      "id": "drone-wire-35",
      "from": {
        "part": "battery",
        "pin": "GND"
      },
      "to": {
        "part": "esc-4",
        "pin": "GND"
      }
    },
    {
      "id": "drone-wire-36",
      "from": {
        "part": "controller",
        "pin": "SERVO_4"
      },
      "to": {
        "part": "esc-4",
        "pin": "PWM"
      }
    },
    {
      "id": "drone-wire-37",
      "from": {
        "part": "esc-4",
        "pin": "A"
      },
      "to": {
        "part": "rotor-4",
        "pin": "A"
      }
    },
    {
      "id": "drone-wire-38",
      "from": {
        "part": "esc-4",
        "pin": "B"
      },
      "to": {
        "part": "rotor-4",
        "pin": "B"
      }
    },
    {
      "id": "drone-wire-39",
      "from": {
        "part": "esc-4",
        "pin": "C"
      },
      "to": {
        "part": "rotor-4",
        "pin": "C"
      }
    }
  ],
  "groups": [
    {
      "id": "airframe",
      "name": "Airframe & landing gear",
      "partIds": [
        "body",
        "upper-deck",
        "skid-left",
        "strut-rear-left",
        "strut-front-left",
        "skid-right",
        "strut-rear-right",
        "strut-front-right",
        "arm-0",
        "arm-1",
        "arm-2",
        "arm-3",
        "gnss-mast"
      ]
    },
    {
      "id": "propulsion",
      "name": "Propulsion layout · no thrust solver",
      "partIds": [
        "rotor-1",
        "propeller-1",
        "esc-1",
        "rotor-2",
        "propeller-2",
        "esc-2",
        "rotor-3",
        "propeller-3",
        "esc-3",
        "rotor-4",
        "propeller-4",
        "esc-4"
      ]
    },
    {
      "id": "avionics",
      "name": "Power & avionics",
      "partIds": [
        "battery",
        "regulator",
        "controller",
        "pdb",
        "compute",
        "camera",
        "gnss",
        "imu"
      ]
    }
  ],
  "code": "// Kestrel · Mapping quad: grounded airframe and wiring study.\n// Flight, lift, ESC current, stability and mission autonomy are NOT simulated.\n// The GNSS receiver is an unpowered placement part; IMU and camera use supported virtual observations.\nlet announced = false;\nfunction step(robot) {\n  robot.drive(0, 0);\n  if (!announced) {\n    robot.log('Drone design preview. No flight or thrust solver. Inspect mass, wiring and camera placement.');\n    announced = true;\n  }\n}\n",
  "environment": {
    "scenario": "workbench",
    "slope": 0,
    "friction": 0.8,
    "payload": 0,
    "seed": 42,
    "initialSoc": 1,
    "obstacles": []
  },
  "ai": {
    "provider": "replay",
    "endpoint": "",
    "model": "recorded-rover-guide",
    "timeoutMs": 15000,
    "prompt": "You control a simulated robot. Use bounded wheel commands. Stop when sensors are unavailable or battery is low. Describe your intended action briefly.",
    "vision": false
  },
  "createdAt": "2026-10-29T00:00:00.000Z",
  "updatedAt": "2026-10-29T00:00:00.000Z"
}
