#!/bin/sh
################################################################################
# PX4 SITL Configuration for Bayraktar TB2-Style UAV in X-Plane
################################################################################
#
# Airframe:          Bayraktar TB2-style MALE UAV
# Type:              Fixed-wing, tricycle landing gear, inverted A-tail
# Configuration:     1 propeller motor + ailerons + A-tail + nosewheel + flaps
# Compatible Sim:    X-Plane 11/12
#
# AIRCRAFT REFERENCE VALUES:
# - Baykar official data: 12 m wingspan, 6.5 m length, 2.2 m height,
#   700 kg MTOW, 100 hp engine, 70 kt cruise class, 90-110 KTAS travel/max.
# - Uploaded X-Plane model: about 10.8 m modeled main-wing span and about
#   418 kg empty-plus-full-fuel loaded mass from the ACF weight fields.
#
# The defaults match the tested X-Plane model mass and geometry while keeping
# published TB2 performance values as reference bounds.
#
# USAGE:
#   make px4_sitl_default xplane_tb2
#
# @name              Bayraktar TB2 X-Plane SITL
# @type              Plane A-Tail
# @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 A-TAIL 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, left A-tail, right A-tail,
# left flap, right flap. Nosewheel steering is handled by PX4's
# Landing_Gear_Wheel output function rather than as a generic servo surface.
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 0.5
param set-default CA_SV_CS2_TRQ_Y -0.5
param set-default CA_SV_CS2_TYPE 13
param set-default CA_SV_CS3_TRQ_P 0.5
param set-default CA_SV_CS3_TRQ_Y 0.5
param set-default CA_SV_CS3_TYPE 14
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

# PWM output mapping matched to config.ini TB2 channels.
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 204
param set-default PWM_MAIN_FUNC5 101
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 15


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

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

# PX4 simulator_mavlink can expose duplicate simulated barometer instances from
# one HIL_SENSOR stream. Keep a single fusion source to avoid source switching.
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

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

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

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 36.0
param set-default EKF2_AVEL_DELAY 0.0
param set-default EKF2_WIND_NSD 0.01

param set-default IMU_GYRO_RATEMAX 200


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

# The old TB2-derived feed-forward values made the Cessna surfaces visibly
# step and saturate. Start the TB2 refresh below that old aggressive baseline,
# then tune from returned ULog surface/setpoint evidence.
param set-default FW_RR_P 0.34
param set-default FW_RR_I 0.08
param set-default FW_RR_D 0.05
param set-default FW_RR_FF 2.4
param set-default FW_R_RMAX 18.0
param set-default FW_R_TC 1.0
param set-default FW_R_LIM 35.0

param set-default FW_PR_P 0.32
param set-default FW_PR_I 0.04
param set-default FW_PR_D 0.08
param set-default FW_PR_FF 2.4
param set-default FW_P_LIM_MAX 18.0
param set-default FW_P_LIM_MIN -12.0
param set-default FW_P_TC 0.75
param set-default FW_PN_R_SLEW_MAX 30.0

param set-default FW_MAN_P_MAX 35.0

# Ground steering during runway takeoff/landing.
param set-default FW_W_EN 1
param set-default FW_WR_P 1.2
param set-default FW_WR_I 0.18
param set-default FW_WR_IMAX 0.5
param set-default FW_WR_FF 0.60
param set-default FW_W_RMAX 0.0


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

# Baykar lists 70 kt cruise class and 90-110 KTAS travel/max. The X-Plane model
# is lighter than the published 700 kg MTOW, so these values are conservative
# SITL targets.
param set-default FW_AIRSPD_MIN 24.0
param set-default FW_AIRSPD_MAX 56.0
param set-default FW_AIRSPD_TRIM 36.0
param set-default FW_AIRSPD_STALL 20.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

param set-default FW_T_ALT_TC 8.0
param set-default FW_T_RLL2THR 6.0
param set-default FW_T_STE_R_TC 1.5
param set-default FW_T_HRATE_FF 0.15
param set-default FW_T_CLMB_MAX 2.5
param set-default FW_T_CLMB_R_SP 1.5
param set-default FW_T_SINK_MIN 1.0
param set-default FW_T_SINK_MAX 2.0
param set-default FW_T_SINK_R_SP 1.0
param set-default FW_T_VERT_ACC 1.5
param set-default FW_T_THR_DAMPING 0.25
param set-default FW_T_PTCH_DAMP 0.30
param set-default FW_T_I_GAIN_PIT 0.15

param set-default FW_THR_TRIM 0.32
param set-default FW_THR_MIN 0.05
param set-default FW_THR_SLEW_MAX 0.30


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

param set-default RWTO_TKOFF 1
param set-default RWTO_RAMP_TIME 3.0
param set-default RWTO_ROT_AIRSPD 27.0
param set-default RWTO_ROT_TIME 2.5
param set-default FW_TKO_AIRSPD 32.0
param set-default FW_TKO_PITCH_MIN 7.0
param set-default MIS_TAKEOFF_ALT 150.0

param set-default FW_LND_ABORT 0
param set-default FW_LND_ANG 3.0
param set-default FW_LND_AIRSPD 28.0
param set-default FW_LND_EARLYCFG 1
param set-default FW_LND_FLALT 10.0
param set-default FW_LND_FL_TIME 5.0
param set-default FW_LND_FL_PMIN 8.0
param set-default FW_LND_FL_PMAX 14.0
param set-default FW_LND_FL_SINK 0.35
param set-default FW_LND_THRTC_SC 0.7
param set-default FW_LND_TD_OFF 4.0
param set-default LNDFW_AIRSPD_MAX 12.0
param set-default LNDFW_VEL_XY_MAX 6.0
param set-default LNDFW_VEL_Z_MAX 1.5
param set-default COM_DISARM_LAND 4.0


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

param set-default NPFG_PERIOD 28.0
param set-default NPFG_DAMPING 0.8
param set-default NPFG_ROLL_TC 0.9
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 25.0
param set-default NAV_LOITER_RAD 700.0
param set-default RTL_RETURN_ALT 150.0
param set-default RTL_DESCEND_ALT 80.0
param set-default RTL_MIN_DIST 50.0
param set-default RTL_LOITER_RAD 700.0


################################################################################
# SECTION 7: AIRCRAFT GEOMETRY AND MASS
################################################################################

param set-default FW_WING_SPAN 10.8
param set-default FW_WING_HEIGHT 2.2
param set-default WEIGHT_BASE 418.0
param set-default WEIGHT_GROSS 418.0


################################################################################
# SECTION 8: SITL SYSTEM DEFAULTS
################################################################################

param set-default CBRK_SUPPLY_CHK 894281


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