{
  "schemaVersion": 1,
  "id": "ft-tiny-trainer",
  "name": "FT Tiny Trainer · Sport",
  "description": "FT Tiny Trainer with four-channel sport wing. Plan-derived dimensions, 193 g dry reference plus estimated 60 g battery. Estimated aerodynamics.",
  "provenance": {
    "plans": {
      "status": "sourced",
      "url": "https://s3.amazonaws.com/plans.flitetest.com/stonekap/FT-Mini%20TinyTrainer-plans.pdf",
      "note": "Josh Bixler FT Tiny Trainer two-sheet plans. Sport wing on sheet 2; powered nose and conventional tail. 193 g without battery, 16 degree throws, 30% expo, minimum 5x3 prop, 250-size 2200 kv motor, 12 A ESC, 500-1000 mAh 3S, 2-4 5 g servos."
    },
    "geometry": {
      "status": "estimated",
      "url": "https://s3.amazonaws.com/plans.flitetest.com/stonekap/FT-Mini%20TinyTrainer-plans.pdf",
      "note": "Vector/ruler readings: sport wing flat half span about 478.5 mm, root chord 139.5 mm, 32 mm aileron chord, rounded swept tips. Assembled approximation uses 5 degree dihedral, 953 mm projected span, 0.12566 m² integrated wing area and 286 mm horizontal tail span. Powered nose and main fuselage overlap; 5 mm foam board. Not manufacturing CAD."
    },
    "mass": {
      "status": "estimated",
      "note": "Published dry reference 193 g plus assumed 60 g battery =253 g. Component allocations and cuboid inertia are estimates. Battery position solves the plan-derived 44.45 mm aft leading-edge CG. The pack is carried under the powered nose; its physical dimensions and installation station are estimated, not measurements of an assembled aircraft."
    },
    "aerodynamics": {
      "status": "estimated",
      "note": "Low-order coefficients and damping estimates for this size/class, not measured polars. No flight-log validation."
    },
    "propulsion": {
      "status": "estimated",
      "note": "5x3 prop diameter follows the original two-sheet plan minimum. Later v1.1/MKR2 references recommend 6x3; this preset retains the original configuration. Static thrust 2.8 N, forward-speed falloff, lag and current remain estimates without matching motor/prop bench data."
    },
    "servos": {
      "status": "estimated",
      "note": "First-order 0.06 s control-surface response and 400 deg/s travel rate. Illustrative micro-servo response, not bench-measured."
    },
    "servoAssembly": {
      "status": "estimated",
      "note": "Individual servo masses are included once. Installation positions, horn ratios, travel setup and response lag are estimates. Battery position is recalculated to retain the reference longitudinal CG when the structural allocation changes. Servo speed is a no-load reference; hinge-load torque and dynamic servo current are not modeled."
    },
    "electricalEstimate": {
      "status": "estimated",
      "note": "3S 650 mAh pack, 0.065 ohm DC resistance and OCV curve are illustrative. Component battery mass remains unchanged. Static motor current is ideal induced power T^(3/2)/sqrt(2*rho*A), divided by an assumed 0.45 overall factor and nominal voltage, plus 0.2 A at full command. Thrust commands retain the prior estimated linear thrust curve. This is NOT a bench motor/prop test, efficiency map or endurance validation; replace with measured curves. Forward-flight current and servo loads are not resolved.",
      "url": "https://www.grc.nasa.gov/WWW/K-12/BGP/propth.html"
    },
    "foldedReconstruction": {
      "status": "estimated",
      "note": "Sport-wing tips taper toward the trailing edge; ailerons occupy measured 31 to 373 mm outboard span, rather than reaching the tips. Tail outlines/hinges are rotated from sheet-2 vectors; root-tab details omitted. Main fuselage and removable power nose split the original 49 g body allocation. Tail split retains 20 g. Fold heights, assembled stations and individual mass distributions remain estimates.",
      "url": "https://s3.amazonaws.com/plans.flitetest.com/stonekap/FT-Mini%20TinyTrainer-plans.pdf"
    },
    "balanceReference": {
      "status": "calculated",
      "url": "https://s3.amazonaws.com/plans.flitetest.com/stonekap/FT-Mini%20TinyTrainer-plans.pdf",
      "note": "Original sheet 2: sport-wing lower skin CG marker X=523.187 pt and leading-edge fold X=649.187 pt, a 126 pt separation = 1.75 in = 44.45 mm. Mirrored right-wing stations 1603.187 and 1477.187 give the same distance. The 2020 v1.1 cover also lists 1.75 in / 44 mm. This corrects the earlier 35 mm estimate; not flight-test calibration."
    },
    "motorInstallation": {
      "status": "estimated",
      "note": "Motor housing geometry now uses the motor component center and dimensions, instead of independent renderer constants. Housing stations are aligned with the existing reconstructed mount/prop assembly; housing dimensions and mass allocations remain estimates, not bench measurements. Battery moves aft to retain the same mass-weighted CG. Component box inertia changes with these revised dimensions and stations."
    },
    "propellerMass": {
      "status": "estimated",
      "note": "Separate 2 g mass entry per propeller, reallocated from the existing estimated powered-nose structural allocation. Published dry mass, existing motor masses, total aircraft mass and longitudinal CG are retained; battery station is rebalanced. Prop dimensions/inertia and the allocation are estimates, not weighed components. Propeller center follows the reconstructed rotor disk. This allows replacement of both motor and prop masses with a matching performance curve without adding the old prop mass again."
    },
    "wingServoInstallation": {
      "status": "estimated",
      "url": "https://www.flitetest.com/articles/flite-test-tiny-trainer",
      "note": "Original sport-wing build photograph mvi-0068-01-01-39-14-still006 shows the servos entering the lower skin. Their output shafts now face the underside and follow each wing panel inclination. Existing component mass, station and dimensions are unchanged and remain estimates; source cutout details, insertion depth, mounting tabs and control rods are not fully reconstructed. This corrects the former upward-facing arms hidden inside the wing."
    }
  },
  "parts": [
    {
      "id": "left-wing",
      "kind": "wing",
      "massKg": 0.032,
      "positionM": [-0.033403978638, -0.23825, -0.041],
      "sizeM": [0.1395, 0.4785, 0.014],
      "color": "#e9e7df",
      "material": {
        "name": "Foamboard assembly",
        "finish": "foam"
      }
    },
    {
      "id": "right-wing",
      "kind": "wing",
      "massKg": 0.032,
      "positionM": [-0.033403978638, 0.23825, -0.041],
      "sizeM": [0.1395, 0.4785, 0.014],
      "color": "#e9e7df",
      "material": {
        "name": "Foamboard assembly",
        "finish": "foam"
      }
    },
    {
      "id": "body",
      "kind": "body",
      "massKg": 0.037,
      "positionM": [-0.14, 0, 0.005],
      "sizeM": [0.49, 0.04, 0.05],
      "color": "#e9e7df",
      "material": {
        "name": "Foamboard assembly",
        "finish": "foam"
      },
      "bodyLoft": [
        {
          "x": -0.5204081632653061,
          "width": 0.3,
          "top": -0.3,
          "bottom": 0.18000000000000002
        },
        {
          "x": -0.4183673469387754,
          "width": 0.42500000000000004,
          "top": -0.37999999999999995,
          "bottom": 0.25999999999999995
        },
        {
          "x": 0.08163265306122451,
          "width": 1,
          "top": -0.5,
          "bottom": 0.49999999999999994
        },
        {
          "x": 0.4795918367346939,
          "width": 1,
          "top": -0.5,
          "bottom": 0.49999999999999994
        }
      ]
    },
    {
      "id": "motor",
      "kind": "motor",
      "massKg": 0.02,
      "positionM": [0.193, 0, 0],
      "sizeM": [0.024, 0.024, 0.024],
      "color": "#e9e7df"
    },
    {
      "id": "battery",
      "kind": "battery",
      "massKg": 0.06,
      "positionM": [0.11790458369674081, 0, 0.041],
      "sizeM": [0.05, 0.025, 0.02],
      "color": "#343a40"
    },
    {
      "id": "tail",
      "kind": "tail",
      "massKg": 0.014,
      "positionM": [-0.3744694512849892, 0, -0.02],
      "sizeM": [0.13260927696482527, 0.28556372542676534, 0.005],
      "color": "#e9e7df",
      "material": {
        "name": "Foamboard assembly",
        "finish": "foam"
      }
    },
    {
      "id": "esc",
      "kind": "equipment",
      "massKg": 0.012,
      "positionM": [0.055, 0, 0.005],
      "sizeM": [0.03, 0.02, 0.01],
      "color": "#e9e7df",
      "model": "Estimated equipment allocation"
    },
    {
      "id": "receiver",
      "kind": "equipment",
      "massKg": 0.004,
      "positionM": [0.055, 0, 0.005],
      "sizeM": [0.03, 0.02, 0.01],
      "color": "#e9e7df",
      "model": "Estimated equipment allocation"
    },
    {
      "id": "wiring",
      "kind": "equipment",
      "massKg": 0.004,
      "positionM": [0.055, 0, 0.005],
      "sizeM": [0.03, 0.02, 0.01],
      "color": "#e9e7df",
      "model": "Estimated equipment allocation"
    },
    {
      "id": "servo-left-wing",
      "kind": "equipment",
      "massKg": 0.005,
      "positionM": [-0.025, -0.148, -0.027],
      "sizeM": [0.02, 0.009, 0.022],
      "color": "#2d3942",
      "material": {
        "name": "Positional micro servo",
        "finish": "plastic"
      },
      "model": "5 g micro servo (estimated)",
      "servo": {
        "speedSecondsPer60Deg": 0.12,
        "travelDeg": 150,
        "ratedVoltage": 4.8
      },
      "orientationDeg": [
        -174.9969677421497, 1.992386321222384, 0.1743817793302275
      ]
    },
    {
      "id": "servo-right-wing",
      "kind": "equipment",
      "massKg": 0.005,
      "positionM": [-0.025, 0.148, -0.027],
      "sizeM": [0.02, 0.009, 0.022],
      "color": "#2d3942",
      "material": {
        "name": "Positional micro servo",
        "finish": "plastic"
      },
      "model": "5 g micro servo (estimated)",
      "servo": {
        "speedSecondsPer60Deg": 0.12,
        "travelDeg": 150,
        "ratedVoltage": 4.8
      },
      "orientationDeg": [
        174.99696774214968, 1.992386321222384, -0.1743817793302275
      ]
    },
    {
      "id": "servo-elevator",
      "kind": "equipment",
      "massKg": 0.005,
      "positionM": [-0.105, -0.018, 0],
      "sizeM": [0.02, 0.009, 0.022],
      "color": "#2d3942",
      "material": {
        "name": "Positional micro servo",
        "finish": "plastic"
      },
      "model": "5 g micro servo (estimated)",
      "servo": {
        "speedSecondsPer60Deg": 0.12,
        "travelDeg": 150,
        "ratedVoltage": 4.8
      }
    },
    {
      "id": "servo-fin",
      "kind": "equipment",
      "massKg": 0.005,
      "positionM": [-0.105, 0.018, 0],
      "sizeM": [0.02, 0.009, 0.022],
      "color": "#2d3942",
      "material": {
        "name": "Positional micro servo",
        "finish": "plastic"
      },
      "model": "5 g micro servo (estimated)",
      "servo": {
        "speedSecondsPer60Deg": 0.12,
        "travelDeg": 150,
        "ratedVoltage": 4.8
      }
    },
    {
      "id": "powered-nose",
      "kind": "body",
      "massKg": 0.01,
      "positionM": [0.12, 0, 0.005],
      "sizeM": [0.15, 0.043, 0.05],
      "color": "#e9e7df",
      "material": {
        "name": "Folded paper-faced foamboard",
        "finish": "foam"
      },
      "bodyLoft": [
        {
          "x": -0.5667,
          "width": 1,
          "top": -0.5,
          "bottom": 0.5
        },
        {
          "x": 0.3,
          "width": 1,
          "top": -0.5,
          "bottom": 0.5
        },
        {
          "x": 0.4333,
          "width": 0.94,
          "top": -0.45,
          "bottom": 0.45
        }
      ]
    },
    {
      "id": "fin-structure",
      "kind": "tail",
      "massKg": 0.006,
      "positionM": [-0.3703871784971, 0, -0.08093079434012591],
      "sizeM": [0.13869350136084077, 0.005, 0.14119216339202365],
      "color": "#e9e7df",
      "material": {
        "name": "Paper-faced foamboard",
        "finish": "foam"
      }
    },
    {
      "id": "nose-propeller",
      "kind": "equipment",
      "massKg": 0.002,
      "positionM": [0.213, 0, 0],
      "sizeM": [0.006350000000000001, 0.01778, 0.127],
      "color": "#23282d",
      "material": {
        "name": "Propeller assembly (estimated allocation)",
        "finish": "plastic"
      },
      "model": "5-inch two-blade propeller"
    }
  ],
  "surfaces": [
    {
      "id": "left-wing",
      "positionM": [0.0020485679625000044, -0.23825, -0.041],
      "spanM": 0.4785,
      "chordM": 0.13130572815,
      "aspectRatio": 7.1,
      "rollDeg": 5,
      "incidenceDeg": 2,
      "liftSlope": 4.4,
      "zeroLiftDeg": -2,
      "stallDeg": 15,
      "cd0": 0.03,
      "efficiency": 0.8,
      "cm": -0.018,
      "control": {
        "axis": "roll",
        "gain": 1,
        "maxDeg": 16,
        "effectiveness": 0.42,
        "responseSeconds": 0.06,
        "linkage": {
          "servoPartId": "servo-left-wing",
          "servoTravelDeg": 45,
          "servoArmM": 0.01,
          "surfaceArmM": 0.015
        }
      },
      "kind": "wing",
      "foamWing": {
        "rootChordM": 0.1395,
        "boardThicknessM": 0.005,
        "foldHeightM": 0.014,
        "hingeFraction": 0.7723327069109924,
        "controlSpan": [0.06416549324329311, 0.7798242445242292],
        "tipStations": [
          [0, 0, 1],
          [0.7798, 0, 1],
          [0.927, 0.253, 1],
          [0.95, 0.34, 1],
          [0.985, 0.8, 1],
          [1, 0.95, 0.97]
        ]
      }
    },
    {
      "id": "right-wing",
      "positionM": [0.0020485679625000044, 0.23825, -0.041],
      "spanM": 0.4785,
      "chordM": 0.13130572815,
      "aspectRatio": 7.1,
      "rollDeg": -5,
      "incidenceDeg": 2,
      "liftSlope": 4.4,
      "zeroLiftDeg": -2,
      "stallDeg": 15,
      "cd0": 0.03,
      "efficiency": 0.8,
      "cm": -0.018,
      "control": {
        "axis": "roll",
        "gain": -1,
        "maxDeg": 16,
        "effectiveness": 0.42,
        "responseSeconds": 0.06,
        "linkage": {
          "servoPartId": "servo-right-wing",
          "servoTravelDeg": 45,
          "servoArmM": 0.01,
          "surfaceArmM": 0.015
        }
      },
      "kind": "wing",
      "foamWing": {
        "rootChordM": 0.1395,
        "boardThicknessM": 0.005,
        "foldHeightM": 0.014,
        "hingeFraction": 0.7723327069109924,
        "controlSpan": [0.06416549324329311, 0.7798242445242292],
        "tipStations": [
          [0, 0, 1],
          [0.7798, 0, 1],
          [0.927, 0.253, 1],
          [0.95, 0.34, 1],
          [0.985, 0.8, 1],
          [1, 0.95, 0.97]
        ]
      }
    },
    {
      "id": "elevator",
      "positionM": [-0.3489972311857783, 0, -0.02],
      "spanM": 0.28556372542676534,
      "chordM": 0.1018888803968437,
      "aspectRatio": 2.802697647815271,
      "rollDeg": 0,
      "incidenceDeg": 0,
      "liftSlope": 3.2,
      "zeroLiftDeg": 0,
      "stallDeg": 15,
      "cd0": 0.03,
      "efficiency": 0.8,
      "cm": 0,
      "control": {
        "axis": "pitch",
        "gain": -1,
        "maxDeg": 16,
        "effectiveness": 0.55,
        "responseSeconds": 0.06,
        "linkage": {
          "servoPartId": "servo-elevator",
          "servoTravelDeg": 45,
          "servoArmM": 0.01,
          "surfaceArmM": 0.015
        }
      },
      "kind": "horizontal-tail",
      "panel": {
        "outline": [
          [-0.6148818386479667, -0.49988262868780503],
          [-0.21726994134207972, -0.49987590732737813],
          [-0.1175592548809748, -0.4893704402252222],
          [-0.053281652166620286, -0.45825298305958295],
          [0.5262217597107477, -0.038724785624766375],
          [0.5262403290974446, 0.03895286690218961],
          [-0.053279870621452396, 0.45847846337111897],
          [-0.10322080439294508, 0.48287051767802264],
          [-0.22224221629606825, 0.5001119978501887],
          [-0.6148836970135182, 0.5001173713121948],
          [-0.72506187020972, 0.48463607683659776],
          [-0.7752534651410694, 0.442899712294116],
          [-0.7752684954997999, -0.44149219305218],
          [-0.7294906583580962, -0.4823916064155807]
        ],
        "thicknessM": 0.005,
        "controlHinge": [
          [-0.3631678812261047, -1],
          [-0.3631678812261047, 1]
        ]
      }
    },
    {
      "id": "fin",
      "positionM": [-0.3454899972429339, 0, -0.08093079434012591],
      "spanM": 0.14119216339202365,
      "chordM": 0.09958872501666434,
      "aspectRatio": 1.4177524952588534,
      "rollDeg": 90,
      "incidenceDeg": 0,
      "liftSlope": 3.2,
      "zeroLiftDeg": 0,
      "stallDeg": 15,
      "cd0": 0.03,
      "efficiency": 0.8,
      "cm": 0,
      "control": {
        "axis": "yaw",
        "gain": -1,
        "maxDeg": 16,
        "effectiveness": 0.55,
        "responseSeconds": 0.06,
        "linkage": {
          "servoPartId": "servo-fin",
          "servoTravelDeg": 45,
          "servoArmM": 0.01,
          "surfaceArmM": 0.015
        }
      },
      "kind": "vertical-tail",
      "panel": {
        "outline": [
          [0.5031562002004463, 0.4315451571554294],
          [0.5031532192635642, 0.2057378651133302],
          [-0.16435599582444665, -0.5207013014385656],
          [-0.2540040455272408, -0.5663981342750958],
          [-0.6175074939774695, -0.5684548428445706],
          [-0.6828727510846596, -0.5574006126343792],
          [-0.7141572662642159, -0.5154512560336736],
          [-0.8895064866411913, 0.25370059863247835],
          [-0.8664454145956051, 0.28412774814861474],
          [-0.4067680001633374, 0.4315451571554294]
        ],
        "thicknessM": 0.005,
        "controlHinge": [
          [-0.4067729830890746, -1],
          [-0.4067729830890746, 1]
        ]
      }
    }
  ],
  "motors": [
    {
      "id": "nose",
      "positionM": [0.205, 0, 0],
      "maxThrustN": 2.8,
      "zeroThrustSpeedMps": 22,
      "responseSeconds": 0.09,
      "yawMix": 0,
      "propDiameterM": 0.127,
      "performance": {
        "referenceVoltage": 11.1,
        "referenceDensityKgM3": 1.225,
        "points": [
          {
            "command": 0,
            "thrustN": 0,
            "currentA": 0
          },
          {
            "command": 0.1,
            "thrustN": 0.28,
            "currentA": 0.188372
          },
          {
            "command": 0.25,
            "thrustN": 0.7,
            "currentA": 0.715549
          },
          {
            "command": 0.5,
            "thrustN": 1.4,
            "currentA": 1.982456
          },
          {
            "command": 0.75,
            "thrustN": 2.1,
            "currentA": 3.608293
          },
          {
            "command": 1,
            "thrustN": 2.8,
            "currentA": 5.52439
          }
        ]
      },
      "partId": "motor",
      "propPartId": "nose-propeller"
    }
  ],
  "fuselageDragAreaM2": 0.0025,
  "angularDamping": [0.005, 0.008, 0.006],
  "reference": {
    "spanM": 0.953,
    "areaM2": 0.12565958183954998,
    "cgFromLeadingEdgeM": 0.04445,
    "leadingEdgeXM": 0.034875
  },
  "contactPoints": [
    {
      "id": "nose",
      "positionM": [0.18, 0, 0.03],
      "spanLinked": false
    },
    {
      "id": "tail",
      "positionM": [-0.395, 0, 0.02],
      "spanLinked": false
    },
    {
      "id": "left-tip",
      "positionM": [-0.03, -0.4765, -0.055],
      "spanLinked": true
    },
    {
      "id": "right-tip",
      "positionM": [-0.03, 0.4765, -0.055],
      "spanLinked": true
    }
  ],
  "battery": {
    "partId": "battery",
    "chemistry": "LiPo",
    "cells": 3,
    "capacityMah": 650,
    "resistanceOhm": 0.065,
    "initialSoc": 0.95,
    "avionicsCurrentA": 0.2,
    "voltageCurve": [
      {
        "soc": 0,
        "voltsPerCell": 3.3
      },
      {
        "soc": 0.1,
        "voltsPerCell": 3.65
      },
      {
        "soc": 0.5,
        "voltsPerCell": 3.8
      },
      {
        "soc": 0.9,
        "voltsPerCell": 4.1
      },
      {
        "soc": 1,
        "voltsPerCell": 4.2
      }
    ]
  },
  "credit": {
    "name": "Flite Test",
    "url": "https://www.flitetest.com/articles/flite-test-tiny-trainer"
  }
}
