# TerraHawk flight parameters: the lift testbed quad (Ryan, 2026-10-10, through th-blender and th-testpilot). An # HGLRC MY10 10 inch frame that carries TerraHawk's own lift system: the EMAX ECO II 2807 1300KV motors, the Gemfan # F8041 3-blade props, the Lucid 4-in-1, the LUX F765 and the P50B 6S2P pack. It flies ArduPlane in Q modes with no # wing, so every Q_A_, Q_M_ and Q_P_ value tuned on it is the aircraft's own row, name for name (th-testpilot). # This file overrides only one of them: Q_M_THST_HOVER's start value, for the testbed's lighter weight. # # Load order: terrahawk-common.parm, board-luxf765.parm, then this file IN PLACE OF airframe.parm (never both). Reboot # and load the three again (params/README.md). Load only sim/scripts/lift_check.lua onto the microSD card: its ground # RPM check runs at arming, and its wing checks and its latch need flight on the wing, which this frame cannot do. # Do not load cg_slider.lua, axis_approach_brake.lua or lights.lua. # # What carries to the aircraft and what does not. The motors, props, ESC, pack and flight controller are the # aircraft's, so the thrust curve (Q_M_THST_EXPO, Q_M_SPIN_*), the ESC telemetry, the motor and prop vibration, the # hover current, the battery sag and lift_check's RPM limits carry. The rate and angle gains (Q_A_RAT_*, Q_A_ANG_*) # depend on the arm length and the inertia, which the MY10 does not share with the aircraft, so they are a starting # point for the aircraft's own QAUTOTUNE, not its answer. Q_M_THST_HOVER is learned again on the aircraft. # # QAUTOTUNE: ArduPlane compiles it only for SITL (ArduPlane/qautotune.h, QAUTOTUNE_ENABLED = HAL_QUADPLANE_ENABLED # && SITL). The LUX needs our own build with QAUTOTUNE_ENABLED 1 (hw/flight-controller, th-avionics); on stock # firmware switch position 4 is refused and the tune is manual. # # Rate gains: the testbed starts on ArduPlane's quadplane defaults (Q_A_RAT_RLL/PIT_P and _I 0.25, _D 0.0036; the # common file sets none). SITL gave no starting set to put here: its QAUTOTUNE failed on both frames from these # gains and from half of them, in the D search or in levelling (th-testpilot TB6, 2026-10-10), and SITL's gyro # vibration is a placeholder. So the first real hovers set the order: # 1. QSTABILIZE at about 2 m. If roll or pitch oscillates, land, halve the P and D of that axis, and try again. # 2. Hover 60 s in QHOVER for the hover learn and an FFT log (INS_LOG_BAT_MASK 1 is in the common file). # 3. Set the harmonic notch from that log, and give the log to th-simulator for SITL's vibration model. # 4. Then QAUTOTUNE, one axis at a time (Q_AUTOTUNE_AXES), in calm air, at 10 m or more. # The wing outputs off: no elevons on 5 and 6, no pusher on 7, no camera trigger on 8, no script servo on 12. # The lift motors stay on 1 to 4 (the board file's 35, 34, 33, 36). Wire each Lucid motor pad to the same corner # as on the aircraft (M1/M2 port, M3/M4 starboard; docs/electronics-notes.md) and check the order and direction # with Mission Planner's motor test before the first hover. SERVO5_FUNCTION 0 SERVO6_FUNCTION 0 SERVO7_FUNCTION 0 SERVO8_FUNCTION 0 SERVO12_FUNCTION 0 CAM1_TYPE 0 # Hover thrust start value. Bare, the testbed hovers at about 385 g a motor (th-blender 6dc515c; about 0.31 raw # throttle, a different scale). Q_M_THST_HOVER is linearized thrust, so it scales with the weight: the common file's # 3-blade prediction for the aircraft, 0.275 at 712 g a motor, gives 0.275 x 385 / 712 = 0.15 (estimate; the # hover learn sets the real one in the first hovers). Ballasted to the aircraft's 712 g a motor: set 0.25, the # common file's start value. The CG is about 15 mm above the blade plane (the pack on the top plate), another # reason the rate gains do not carry. Q_M_THST_HOVER 0.15 # No airspeed sensor on the frame. ARSPD_TYPE 0 ARSPD_USE 0 # No Q-assist: there is no wing to assist. -1 disables every assist (0 fails the pre-arm check; quadplane.cpp). Q_ASSIST_SPEED -1 # range-ok: -1 disables every assist (the parameter's own description) Q_ASSIST_ANGLE 0 Q_ASSIST_ALT 0 # Never a fixed-wing mode. Every RTL becomes a QRTL (3, QRTL Always; mode_rtl.cpp), so the battery and RC failsafes # that command RTL return in hover. Q_OPTIONS keeps the common file's bits 5, 16 and 17 and adds bit 18: arm only # in a Q mode or AUTO (196640 + 262144). Q_RTL_MODE 3 Q_OPTIONS 458784 Q_RTL_ALT 20 # No fins: no weathervaning (ENABLE 0 overrides the common file's gain). Q_WVANE_ENABLE 0 # The switch: QSTABILIZE, QHOVER, QLOITER, QAUTOTUNE (our build only), QRTL, QLAND. No FBWA, AUTO or RTL. QRTL is # on 5, where the aircraft has RTL. QLAND is on 6, the position a switch at rest or a SITL channel 5 at 1800 selects # at power-up: QRTL entered before home is set reads an unset (0, 0, 0) location. SITL stops on it (a SITL-only # check in Location::get_alt_cm, th-simulator d52427e); on the LUX it goes on with a wrong altitude target, silently. # QLAND does not use home. QRTL and QLAND both refuse arming (mode.h), and in the air home is always set. FLTMODE1 17 FLTMODE2 18 FLTMODE3 19 FLTMODE4 22 FLTMODE5 21 FLTMODE6 20 # lift_check.lua: no lane landing on a frame with no wing, so arming must not wait for a lane mission (with 1 the # arming check refuses, th-testpilot TB4). The ground RPM check at arming stays on. LCK_LANE_REQ 0 # A cylinder fence for the tuning field: 40 m up, 60 m out, then QRTL (FENCE_ACTION 1 is RTL, which is a QRTL here). FENCE_ENABLE 1 FENCE_TYPE 3 FENCE_ALT_MAX 40 FENCE_RADIUS 60 FENCE_ACTION 1 FENCE_MARGIN 5 # Sensor positions from the testbed's own CG (the pack fitted), measured on the frame; the aircraft's values in the # common and board files do not apply. 0 until measured. GPS: the Q43 if it is moved over, or any u-blox on GPS1; # set the compass orientation for its mount. INS_POS1_X 0 INS_POS1_Y 0 INS_POS1_Z 0 INS_POS2_X 0 INS_POS2_Y 0 INS_POS2_Z 0 GPS1_POS_X 0 GPS1_POS_Y 0 GPS1_POS_Z 0