#!/bin/sh
################################################################################
# PX4 SITL Configuration for Alia-250 eVTOL (VTOL Quadplane) in X-Plane
################################################################################
#
# Airframe:          Beta Technologies Alia-250
# Type:              VTOL Quadplane / lift-plus-cruise style
# Configuration:     4 Hover Motors + 1 Pusher Motor + Control Surfaces
# Compatible Sim:    X-Plane 11/12
#
# AIRCRAFT REFERENCE VALUES:
# - Active SITL mass model: 3,120 kg, matching the tested X-Plane aircraft
# - Public Alia reference MTOW: about 6,000 lb (2,721 kg)
# - Wingspan: 50 ft (15 m) - Fixed-wing design
# - Cruise Speed: 170 mph (75 m/s) in forward flight
# - Range: 250 nautical miles (460 km)
# - Capacity: 5 passengers or cargo
# - Motors: 4x hover rotors + 1x pusher propeller
# - Flight Modes: Multicopter hover, fixed-wing cruise, transition
#
# USAGE:
#   make px4_sitl_default xplane_alia250
#
# @name              Alia-250 eVTOL X-Plane SITL
# @type              Standard VTOL
# @class             VTOL
# @maintainer        Alireza Ghaderi <p30planets@gmail.com>
# @url               https://github.com/alireza787b/px4xplane/
. ${R}etc/init.d/rc.vtol_defaults


################################################################################
# BRIDGE / SIMULATOR CONTRACT PARAMETERS
# Sections 1-2 keep PX4 aligned with the px4xplane sensor and actuator bridge.
# Avoid changing these in aircraft-performance tuning unless a bridge replay or
# ULog analysis proves the contract itself changed.
################################################################################


################################################################################
# SECTION 1: CONTROL ALLOCATION (CA) - VTOL QUADPLANE CONFIGURATION
################################################################################
# Hover Motors: 4x wing-mounted rotors (MC mode)
# Forward Motor: 1x pusher propeller (FW mode)
# Control Surfaces: Ailerons, Elevator, Rudder (FW mode)

param set-default CA_AIRFRAME 2          # VTOL configuration
param set-default CA_ROTOR_COUNT 5       # 4 hover + 1 pusher

# Hover Motors (X configuration)
param set-default CA_ROTOR0_PX 3.0       # Front-Right (CW)
param set-default CA_ROTOR0_PY 2.5
param set-default CA_ROTOR0_KM -0.05

param set-default CA_ROTOR1_PX 3.0
param set-default CA_ROTOR1_PY -2.5

param set-default CA_ROTOR2_PX -3.0
param set-default CA_ROTOR2_PY -2.5
param set-default CA_ROTOR2_KM -0.05

param set-default CA_ROTOR3_PX -3.0
param set-default CA_ROTOR3_PY 2.5

# Pusher Motor (FW mode)
param set-default CA_ROTOR4_AX 1.0       # Thrust forward
param set-default CA_ROTOR4_AZ 0.0
param set-default CA_ROTOR4_PX 5.0       # Tail position
param set-default CA_ROTOR4_KM -0.05

# Control Surfaces (FW mode)
param set-default CA_SV_CS0_TRQ_R -0.5   # Left Aileron
param set-default CA_SV_CS0_TYPE 1
param set-default CA_SV_CS1_TRQ_R 0.5    # Right Aileron
param set-default CA_SV_CS1_TYPE 2
param set-default CA_SV_CS2_TRQ_P 1.0    # Elevator
param set-default CA_SV_CS2_TYPE 3
param set-default CA_SV_CS3_TRQ_Y 1.0    # Rudder
param set-default CA_SV_CS3_TYPE 4
param set-default CA_SV_CS_COUNT 4

# PWM Output Mapping
param set-default PWM_MAIN_FUNC1 101     # Hover motor 1
param set-default PWM_MAIN_FUNC2 102     # Hover motor 2
param set-default PWM_MAIN_FUNC3 103     # Hover motor 3
param set-default PWM_MAIN_FUNC4 104     # Hover motor 4
param set-default PWM_MAIN_FUNC5 201     # Aileron L
param set-default PWM_MAIN_FUNC6 202     # Aileron R
param set-default PWM_MAIN_FUNC7 203     # Elevator
param set-default PWM_MAIN_FUNC8 204     # Rudder
param set-default PWM_MAIN_FUNC9 105     # Pusher motor
param set-default PWM_MAIN_REV 112


################################################################################
# SECTION 2: EKF2 SENSOR FUSION - PX4XPLANE SITL BASELINE
################################################################################
# Estimator settings for the px4xplane simulator sensor contract.

# Sensor Simulation Enables
param set-default SENS_EN_GPSSIM 1       # GPS simulation
param set-default SENS_EN_BAROSIM 1      # Barometer simulation

# Barometer priority. PX4 simulator_mavlink publishes two simulated baro
# uORB instances from one HIL_SENSOR stream. Seed the known simulated device
# IDs so CAL_BARO1_PRIO=0 actually disables the duplicate backup instance on
# a fresh PX4 SITL rootfs.
param set-default CAL_BARO0_ID 6620172
param set-default CAL_BARO0_PRIO 100     # Primary barometer
param set-default CAL_BARO1_ID 6620428
param set-default CAL_BARO1_PRIO 0       # Backup disabled

# EKF2 Core Configuration
param set-default EKF2_MULTI_IMU 1
param set-default SENS_IMU_MODE 0

# Accelerometer Bias Estimation
param set-default EKF2_ABL_LIM 2.5        # X-Plane SITL requires higher tolerance (see note below)
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

# X-Plane SITL note: this limit is intentionally higher than common robotics
# simulator defaults because the bridge is frame-rate-limited and X-Plane's
# physics model is not identical to the EKF sensor model. Revisit with replay
# and ULog innovation evidence before reducing it.

# Barometer
param set-default EKF2_BARO_NOISE 1.0    # Baro height noise in m; avoids overconfident fusion during VTOL/FW transients
param set-default EKF2_BARO_GATE 10.0    # Increased tolerance for VTOL transitions (prevents false BARO switch)

# 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

# GPS Parameters
param set-default SENS_GPS0_DELAY 10
param set-default SENS_GPS1_DELAY 10
param set-default EKF2_GPS_P_NOISE 5.0    # X-Plane HIL position covariance during high-speed transition
param set-default EKF2_GPS_V_NOISE 0.30   # X-Plane HIL velocity covariance for variable-FPS ground/transition phases
param set-default EKF2_GPS_P_GATE 10.0

# Magnetometer
param set-default EKF2_MAG_TYPE 1
param set-default EKF2_MAG_GATE 5.0
param set-default EKF2_MAG_DELAY 1.0

# Airspeed (SITL strategy - optional fusion)
param set-default EKF2_ASP_DELAY 0.0
param set-default EKF2_ARSP_THR 50.0
param set-default EKF2_GSF_TAS 0.0

# Additional Sensors
param set-default EKF2_AVEL_DELAY 0.0
param set-default EKF2_WIND_NSD 0.01
param set-default EKF2_REQ_VDRIFT 1.0
param set-default EKF2_SYNT_MAG_Z 1

# IMU Configuration
param set-default IMU_GYRO_RATEMAX 200


################################################################################
# AIRCRAFT-PERFORMANCE TUNING PARAMETERS
# Tune in this order: MC rate/attitude/position, FW attitude, TECS/NPFG,
# then VTOL front/back transition behavior.
################################################################################


################################################################################
# SECTION 3: MULTICOPTER RATE CONTROL (HOVER MODE)
################################################################################
# Initial MC mode tuning for a heavy VTOL.

# Roll Rate
param set-default MC_ROLLRATE_P 0.4
param set-default MC_ROLLRATE_I 0.0
param set-default MC_ROLLRATE_D 0.0044
param set-default MC_ROLLRATE_K 2.25
param set-default MC_ROLLRATE_MAX 220

# Pitch Rate
param set-default MC_PITCHRATE_P 0.4
param set-default MC_PITCHRATE_I 0.0
param set-default MC_PITCHRATE_D 0.01
param set-default MC_PITCHRATE_K 4.0

# Yaw Rate
param set-default MC_YAWRATE_P 1.0
param set-default MC_YAWRATE_I 0.0
param set-default MC_YAWRATE_FF 1.0
param set-default MC_YAWRATE_K 5.0
param set-default MC_YAWRATE_MAX 30


################################################################################
# SECTION 4: MULTICOPTER ATTITUDE CONTROL (HOVER MODE)
################################################################################

param set-default MC_ROLL_P 0.3
param set-default MC_PITCH_P 0.5
param set-default MC_YAW_P 1.0


################################################################################
# SECTION 5: POSITION & VELOCITY CONTROL (MC MODE)
################################################################################
# Initial heavy-aircraft position control values.

# Position Control
param set-default MPC_XY_P 0.05
param set-default MPC_Z_P 0.65

# Velocity control
param set-default MPC_XY_VEL_P_ACC 1.2
param set-default MPC_XY_VEL_I_ACC 0.2
param set-default MPC_XY_VEL_D_ACC 2.0
param set-default MPC_Z_VEL_P_ACC 5.0
param set-default MPC_Z_VEL_I_ACC 1.25  # Reduced from 1.4 for less integral windup
param set-default MPC_Z_VEL_D_ACC 0.55  # Increased from 0.45 for better damping

# Velocity Limits (heavy aircraft performance)
param set-default MPC_XY_VEL_MAX 15      # Increased for heavy aircraft
param set-default MPC_Z_VEL_MAX_UP 4     # Increased for heavy aircraft
param set-default MPC_Z_VEL_MAX_DN 2.2
param set-default MPC_Z_V_AUTO_DN 2.2
param set-default MPC_VEL_MANUAL 10
param set-default MPC_XY_CRUISE 10

# Trajectory & Jerk Limits
param set-default MPC_JERK_AUTO 1.0      # Increased for heavy aircraft
param set-default MPC_JERK_MAX 3.0

# Error Limits
# Large VTOL takeoff can carry several metres of lateral residual while climbing.
# The PX4 maximum prevents the takeoff trajectory from pausing vertical progress
# just because XY error briefly exceeds the multicopter default.
param set-default MPC_XY_ERR_MAX 10


################################################################################
# SECTION 6: MANUAL FLIGHT MODE (MC MODE)
################################################################################

# Yaw Control
param set-default MPC_MAN_Y_MAX 30
param set-default MPC_YAWRAUTO_MAX 30

# Advanced Options
param set-default MPC_ALT_MODE 0
param set-default MPC_YAW_MODE 0


################################################################################
# SECTION 7: TAKEOFF & LANDING (MC MODE)
################################################################################

# Takeoff
param set-default MPC_TKO_SPEED 3.0

# Landing
# Descend efficiently above 8 m AGL, then slow to a passenger-friendly flare.
param set-default MPC_LAND_ALT1 8
param set-default MPC_LAND_ALT2 3
param set-default MPC_LAND_SPEED 0.6
param set-default MPC_LAND_RADIUS 1000
param set-default MPC_LAND_RC_HELP 1

# Land Detector
param set-default COM_DISARM_LAND 1.5


################################################################################
# SECTION 8: VTOL TRANSITION PARAMETERS
################################################################################

# Core Configuration
param set-default VT_TYPE 2              # Current PX4 airframe type used by this SITL config

# Transition airspeeds. Match the FW trim schedule so the pusher/TECS handoff
# does not enter FW already overspeeding and above the mission altitude.
param set-default VT_ARSP_BLEND 22.0
param set-default VT_ARSP_TRANS 40.0
param set-default VT_F_TRANS_THR 0.95
param set-default VT_PSHER_SLEW 0.45

# Front Transition (MC -> FW)
param set-default VT_F_TRANS_DUR 45.0
param set-default VT_F_TR_OL_TM 55.0

# Back Transition (FW -> MC)
param set-default VT_B_TRANS_DUR 28.0
param set-default VT_B_DEC_MSS 2.0
param set-default VT_B_DEC_I 0.25
param set-default VT_B_TRANS_RAMP 10.0   # Smooth MC motor ramp-up for this large SITL eVTOL

# Transition Safety
param set-default VT_TRANS_MIN_TM 15.0    # Minimum transition time
param set-default VT_TRANS_TIMEOUT 100.0  # Transition timeout
param set-default VT_QC_T_ALT_LOSS 100.0 # Max altitude loss in QuadChute

# Transition Control
param set-default VT_ELEV_MC_LOCK 0
param set-default VT_FWD_THRUST_EN 4     # Enabled
param set-default VTO_LOITER_ALT 1500.0
param set-default VT_FW_MIN_ALT 20.0     # Min altitude for FW mode
param set-default VT_TILT_TRANS 0.5
param set-default VT_PITCH_MIN -5.0


################################################################################
# SECTION 9: FIXED-WING FLIGHT PARAMETERS (CRUISE MODE)
################################################################################
# The fixed-wing envelope uses moderate bank authority and a large orbit radius
# to keep the heavy eVTOL model inside the tested X-Plane handling envelope.

# Rate Control
param set-default FW_RR_P 0.47
param set-default FW_RR_I 0.05
param set-default FW_RR_D 0.1
param set-default FW_R_RMAX 16.0
param set-default FW_R_TC 0.85
param set-default FW_R_LIM 20.0

param set-default FW_PR_P 0.52
param set-default FW_PR_I 0.045
param set-default FW_PR_D 0.355
param set-default FW_PR_FF 3.6
param set-default FW_PSP_OFF 2.0
param set-default FW_P_LIM_MAX 24.0
param set-default FW_P_LIM_MIN -2.0
param set-default FW_P_TC 0.40
param set-default FW_PN_R_SLEW_MAX 50.0

# Yaw Rate Control (High-speed cruise mode)
param set-default FW_YR_P 0.1            # P gain (higher for 75 m/s cruise)
param set-default FW_YR_I 0.12           # I gain (balanced authority)
param set-default FW_Y_RMAX 60.0         # Max yaw rate (slightly higher for eVTOL)

# Airspeed Control
param set-default FW_AIRSPD_MIN 32.0     # Above stall
param set-default FW_AIRSPD_MAX 75.0     # Cruise limit
param set-default FW_AIRSPD_TRIM 55.0    # Validation trim for transition and mission tracking
param set-default FW_AIRSPD_STALL 30.0   # Stall speed

# Airspeed Sensor (SITL)
# 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 VTOL transition.
param set-default ASPD_DO_CHECKS 1
param set-default ASPD_FALLBACK  1       # Fallback to G/S - W/S
param set-default SYS_HAS_NUM_ASPD 0     # Do not make virtual SITL pitot a prearm hardware requirement

# TECS
param set-default FW_T_ALT_TC 7.5
param set-default FW_T_RLL2THR 8.0
param set-default FW_T_STE_R_TC 2.0
param set-default FW_T_SPDWEIGHT 0.45
param set-default FW_T_SINK_MIN 1.0
param set-default FW_T_SINK_MAX 3.0
param set-default FW_T_CLMB_MAX 3.2
param set-default FW_T_VERT_ACC 2.2
param set-default FW_T_THR_DAMPING 0.35
param set-default FW_T_PTCH_DAMP 0.25
param set-default FW_T_I_GAIN_PIT 0.20
param set-default FW_T_CLMB_R_SP 2.0
param set-default FW_T_SINK_R_SP 1.5

# Throttle Management
param set-default FW_THR_TRIM 0.65
param set-default FW_THR_MIN 0.12
param set-default FW_THR_SLEW_MAX 0.35

# Geometry
param set-default FW_WING_SPAN 17.0      # Actually 15m, 17m for tuning
param set-default FW_WING_HEIGHT 3.5
param set-default WEIGHT_BASE 3120.0
param set-default WEIGHT_GROSS 3120.0

# Landing
param set-default FW_LND_ABORT 0
param set-default FW_LND_AIRSPD 0        # Auto
param set-default FW_LND_FLALT 5.0
param set-default FW_LND_FL_PMAX 35.0
param set-default LNDFW_VEL_XY_MAX 15.0

# Orbit
param set-default MC_ORBIT_RAD_MAX 2000


################################################################################
# SECTION 10: NPFG GUIDANCE (Modern PX4 v1.14+)
################################################################################
# Formula: L1_distance = (1/pi) * NPFG_DAMPING * NPFG_PERIOD * groundspeed.
# The values below keep loiter capture smooth without sustained high-bank flight.

param set-default NPFG_PERIOD 40.0
param set-default NPFG_DAMPING 0.80
param set-default NPFG_ROLL_TC 0.9
param set-default NPFG_SW_DST_MLT 0.7


################################################################################
# SECTION 11: NAVIGATION & MISSION
################################################################################
# Large VTOL aircraft navigation strategy

# Mission Parameters
param set-default MIS_YAW_ERR 30.0
param set-default MIS_YAW_TMT 5.0
param set-default MIS_TAKEOFF_ALT 100.0
param set-default MIS_TKO_LAND_REQ 0
param set-default MIS_DIST_1WP 5000.0

# MC Mode Acceptance
param set-default NAV_ACC_RAD 30         # Tighter landing (reduced from 50m)
param set-default NAV_MC_ALT_RAD 5.0     # Heavier aircraft

# FW Mode Acceptance
param set-default NAV_LOITER_RAD 2000.0
param set-default NAV_FW_ALT_RAD 50.0

# Return to Launch
param set-default RTL_RETURN_ALT 100
param set-default RTL_DESCEND_ALT 80
param set-default RTL_MIN_DIST 50.0
param set-default RTL_LOITER_RAD 2000.0


################################################################################
# SECTION 12: SYSTEM DEFAULTS
################################################################################

# Hover Thrust Estimator
param set-default HTE_VXY_THR 10

# GPS Configuration
param set-default GPS_UBX_DYNMODEL 6     # Airborne <1g


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