#!/bin/sh
################################################################################
# PX4 SITL Configuration for Cessna 172 Skyhawk in X-Plane
################################################################################
#
# Airframe:          Cessna 172 Skyhawk
# Type:              Fixed-wing, tricycle landing gear
# Configuration:     1 propeller motor + ailerons + elevator + rudder + nosewheel
# Compatible Sim:    X-Plane 11/12
#
# AIRCRAFT REFERENCE VALUES:
# - MTOW: 2,550 lb / 1,157 kg
# - Wingspan: 36 ft 1 in / 11.0 m
# - Cruise speed: about 124 ktas / 64 m/s
# - Stall speed: about 48 kcas / 25 m/s
# - Best-rate climb speed: about 74 kias / 38 m/s
# - Sea-level max climb: about 730 ft/min / 3.7 m/s
# - Engine: Lycoming IO-360-L2A, 180 hp
#
# The defaults are tuned for the packaged X-Plane model and runway-mission
# SITL validation.
#
# USAGE:
#   make px4_sitl_default xplane_cessna172
#
# @name              Cessna 172 Skyhawk X-Plane SITL
# @type              Standard Plane
# @class             Plane
# @maintainer        Alireza Ghaderi <p30planets@gmail.com>
# @url               https://github.com/alireza787b/px4xplane/
. ${R}etc/init.d/rc.fw_defaults


################################################################################
# SECTION 1: CONTROL ALLOCATION - FIXED-WING CONFIGURATION
################################################################################

param set-default CA_ROTOR_COUNT 1

# Propeller motor.
param set-default CA_ROTOR0_PX 1.2
param set-default CA_ROTOR0_AX 1.0
param set-default CA_ROTOR0_AZ 0.0
param set-default CA_R0_SLEW 2.0

# Control surfaces: left aileron, right aileron, elevator, rudder,
# left flap, right flap.
param set-default CA_SV_CS0_TRQ_R -0.5
param set-default CA_SV_CS0_TYPE 1
param set-default CA_SV_CS1_TRQ_R 0.5
param set-default CA_SV_CS1_TYPE 2
param set-default CA_SV_CS2_TRQ_P 1.0
param set-default CA_SV_CS2_TYPE 3
param set-default CA_SV_CS3_TRQ_Y 1.0
param set-default CA_SV_CS3_TYPE 4
param set-default CA_SV_CS4_TYPE 9
param set-default CA_SV_CS4_FLAP 1.0
param set-default CA_SV_CS5_TYPE 10
param set-default CA_SV_CS5_FLAP 1.0
param set-default CA_SV_CS_COUNT 6
param set-default CA_SV_FLAP_SLEW 0.08

# PWM output mapping matched to config.ini Cessna172 channels.
# Output 6 uses PX4's Landing_Gear_Wheel output function for runway steering.
# Outputs 7/8 drive left/right landing flaps.
param set-default PWM_MAIN_FUNC1 201
param set-default PWM_MAIN_FUNC2 202
param set-default PWM_MAIN_FUNC3 203
param set-default PWM_MAIN_FUNC4 101
param set-default PWM_MAIN_FUNC5 204
param set-default PWM_MAIN_FUNC6 440
param set-default PWM_MAIN_FUNC7 205
param set-default PWM_MAIN_FUNC8 206
param set-default PWM_MAIN_REV 7


################################################################################
# SECTION 2: BRIDGE / SIMULATOR SENSOR CONTRACT
################################################################################

# Simulator sensors.
param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 1
param set-default SENS_EN_ARSPDSIM 1
param set-default SENS_EN_MAGSIM 1

# Barometer priority. PX4 simulator_mavlink publishes two simulated baro uORB
# instances from one HIL_SENSOR stream; disable the duplicate as a fusion source.
param set-default CAL_BARO0_ID 6620172
param set-default CAL_BARO0_PRIO 100
param set-default CAL_BARO1_ID 6620428
param set-default CAL_BARO1_PRIO 0

# Use neutral simulated accelerometer offsets. The px4xplane bridge publishes
# attitude-consistent HIL accelerometer data, so model-specific calibration
# offsets would corrupt sensor_combined and can trip EKF2 bias checks.
param set-default CAL_ACC0_PRIO 50
param set-default CAL_ACC0_XOFF 0.0
param set-default CAL_ACC0_YOFF 0.0
param set-default CAL_ACC0_ZOFF 0.0

# EKF2 core settings aligned with the current px4xplane sensor contract.
param set-default EKF2_MULTI_IMU 1
param set-default SENS_IMU_MODE 0
param set-default EKF2_ABL_LIM 0.8
param set-default EKF2_ABL_ACCLIM 35.0
param set-default EKF2_ACC_NOISE 1.0
param set-default EKF2_ACC_B_NOISE 0.001

# Height and horizontal aiding.
param set-default EKF2_BARO_NOISE 1.0
param set-default EKF2_BARO_GATE 10.0
param set-default SENS_GPS0_DELAY 10
param set-default SENS_GPS1_DELAY 10
# Runway roll is intentional motion while the fixed-wing land detector can still
# report landed/at-rest. Keep normal GNSS quality checks, but do not reject a
# valid simulator GNSS source on stationary-only horizontal drift checks.
param set-default EKF2_GPS_CHECK 1887
param set-default EKF2_GPS_P_NOISE 2.5
param set-default EKF2_GPS_V_NOISE 0.30
param set-default EKF2_GPS_P_GATE 8.0

# Magnetometer and airspeed aiding.
param set-default EKF2_MAG_TYPE 1
param set-default EKF2_MAG_DELAY 1.0
param set-default EKF2_MAG_GATE 5.0
param set-default EKF2_SYNT_MAG_Z 1
param set-default EKF2_ASP_DELAY 0.0
param set-default EKF2_ARSP_THR 10.0
param set-default EKF2_GSF_TAS 50.0
param set-default EKF2_AVEL_DELAY 0.0
param set-default EKF2_WIND_NSD 0.01

# The bridge target sensor rate is 200 Hz. Actual send cadence is still bounded
# by X-Plane frame callbacks, but matching the PX4 rate cap avoids stale 100 Hz
# assumptions in the airframe defaults.
param set-default IMU_GYRO_RATEMAX 200


################################################################################
# SECTION 3: FIXED-WING ATTITUDE / RATE CONTROL
################################################################################

# Roll authority is kept high enough for path capture while avoiding the
# control-surface saturation seen with more aggressive feed-forward settings.
param set-default FW_RR_P 0.42
param set-default FW_RR_I 0.11
param set-default FW_RR_D 0.08
param set-default FW_RR_FF 3.2
param set-default FW_R_RMAX 8.0
param set-default FW_R_TC 1.5
param set-default FW_R_LIM 15.0

# Pitch.
param set-default FW_PR_P 0.365
param set-default FW_PR_I 0.045
param set-default FW_PR_D 0.355
param set-default FW_PR_FF 3.4
param set-default FW_P_LIM_MAX 20.0
param set-default FW_P_LIM_MIN 0.0
param set-default FW_P_TC 0.55
param set-default FW_PN_R_SLEW_MAX 10.0

# Ground steering during runway takeoff/landing.
param set-default FW_W_EN 1
param set-default FW_WR_P 0.8
param set-default FW_WR_I 0.12
param set-default FW_WR_FF 0.35


################################################################################
# SECTION 4: AIRSPEED AND TECS
################################################################################

param set-default FW_AIRSPD_MIN 28.0
param set-default FW_AIRSPD_MAX 65.0
param set-default FW_AIRSPD_TRIM 40.0
param set-default FW_AIRSPD_STALL 25.0
param set-default FW_AIRSPD_FLP_SC 0.85
# X-Plane provides the pitot through the simulator stream, not a physical driver.
# Keep the missing-data check and avoid false innovation/stuck-data failures
# during accelerated SITL ground roll and landing flare.
param set-default ASPD_DO_CHECKS 1
param set-default ASPD_FALLBACK 1
param set-default SYS_HAS_NUM_ASPD 0

# Cessna 172 sea-level climb capability is about 3.7 m/s at max gross weight.
param set-default FW_T_ALT_TC 8.0
param set-default FW_T_RLL2THR 11.0
param set-default FW_T_STE_R_TC 2.0
param set-default FW_T_HRATE_FF 0.3
param set-default FW_T_SPDWEIGHT 0.20
param set-default FW_T_CLMB_MAX 3.7
param set-default FW_T_SINK_MIN 1.0
param set-default FW_T_SINK_MAX 2.5
param set-default FW_T_VERT_ACC 1.8
param set-default FW_T_THR_DAMPING 0.25
param set-default FW_T_PTCH_DAMP 0.20
param set-default FW_T_I_GAIN_PIT 0.22
param set-default FW_T_SINK_R_SP 1.2

param set-default FW_THR_TRIM 0.60
param set-default FW_THR_MIN 0.10
param set-default FW_THR_SLEW_MAX 0.25


################################################################################
# SECTION 5: RUNWAY TAKEOFF AND AUTO LANDING BASELINE
################################################################################

# Runway takeoff. Keep pitch below the previous 20 deg value to avoid an
# unrealistic rotation and early climb oscillation on a C172-size aircraft.
param set-default RWTO_TKOFF 1
param set-default RWTO_RAMP_TIME 3.0
param set-default RWTO_ROT_AIRSPD 32.0
param set-default RWTO_ROT_TIME 2.0
param set-default FW_TKO_AIRSPD 40.0
param set-default FW_TKO_PITCH_MIN 10.0
param set-default FW_FLAPS_TO_SCL 0.33
param set-default MIS_TAKEOFF_ALT 150.0

# Auto landing. Use landing flaps and early landing configuration so the
# aircraft stabilizes before approach. Disable touchdown-time clamping because
# the C172 flare timing varies with X-Plane runway geometry and wind.
param set-default FW_LND_ABORT 0
param set-default FW_LND_AIRSPD 32.5
param set-default FW_LND_EARLYCFG 1
param set-default FW_LND_FLALT 8.0
param set-default FW_LND_FL_TIME 4.0
param set-default FW_LND_FL_PMIN 9.0
param set-default FW_LND_FL_PMAX 20.0
param set-default FW_LND_FL_SINK 0.30
param set-default FW_LND_THRTC_SC 0.8
param set-default FW_FLAPS_LND_SCL 0.85
param set-default LNDFW_AIRSPD_MAX 30.0
param set-default LNDFW_VEL_XY_MAX 10.0
param set-default LNDFW_VEL_Z_MAX 1.5
param set-default LNDFW_TRIG_TIME 1.0


################################################################################
# SECTION 6: NPFG GUIDANCE AND MISSION DEFAULTS
################################################################################

param set-default NPFG_PERIOD 55.0
param set-default NPFG_DAMPING 0.8
param set-default NPFG_ROLL_TC 1.4
param set-default NPFG_SW_DST_MLT 0.8

param set-default MIS_YAW_ERR 30.0
param set-default MIS_YAW_TMT 5.0
param set-default MIS_TKO_LAND_REQ 0
param set-default MIS_DIST_1WP 5000.0

param set-default NAV_ACC_RAD 180.0
param set-default NAV_FW_ALT_RAD 40.0
param set-default NAV_LOITER_RAD 600.0

param set-default RTL_RETURN_ALT 120.0
param set-default RTL_DESCEND_ALT 80.0
param set-default RTL_MIN_DIST 50.0
param set-default RTL_LOITER_RAD 600.0


################################################################################
# SECTION 7: AIRCRAFT GEOMETRY, MASS, AND SYSTEM DEFAULTS
################################################################################

param set-default FW_WING_SPAN 11.0
param set-default FW_WING_HEIGHT 3.0
param set-default WEIGHT_BASE 1157.0
param set-default WEIGHT_GROSS 1157.0

# SITL-only circuit breakers.
param set-default CBRK_SUPPLY_CHK 894281


################################################################################
# END OF CONFIGURATION
################################################################################
