#!/bin/sh
################################################################################
# PX4 SITL Configuration for QuadTailsitter in X-Plane
################################################################################
#
# X-Plane model:     QuadTailsitter.acf
# Compatible Sim:    X-Plane 12
# Control:           Four fixed rotors, no aerodynamic control surfaces
#
# This airframe targets a 5 kg, 6S, control-surface-less quad tailsitter with a
# body-axis virtual pitot. PX4 sensors are mounted in the multicopter body frame;
# airspeed is projected along the fixed-wing nose axis so TECS and transition
# logic receive positive calibrated airspeed in forward flight.
#
# USAGE:
#   make px4_sitl_default xplane_qtailsitter
#
# @name              QuadTailsitter X-Plane SITL
# @type              VTOL Quad Tailsitter
# @class             VTOL
# @maintainer        Alireza Ghaderi <p30planets@gmail.com>
# @url               https://github.com/alireza787b/px4xplane/
. ${R}etc/init.d/rc.vtol_defaults


################################################################################
# AIRFRAME AND CONTROL ALLOCATION
################################################################################

param set-default MAV_TYPE 20
param set-default CA_AIRFRAME 4

# X-Plane aircraft coordinates use X=right, Y=up, Z=tail. Plane Maker ACF
# position values are in feet. PX4 control allocation uses body X=forward and
# body Y=right in meters. The conversion below is:
#   PX4_X = -XPLANE_Z * 0.3048
#   PX4_Y =  XPLANE_X * 0.3048
# The canted rotor axes match the X-Plane aircraft and add yaw authority without
# requiring aerodynamic control surfaces.
param set-default CA_ROTOR_COUNT 4

param set-default CA_ROTOR0_PX 0.22
param set-default CA_ROTOR0_PY 0.43
param set-default CA_ROTOR0_AX -0.078
param set-default CA_ROTOR0_AY 0.040
param set-default CA_ROTOR0_AZ -0.996
param set-default CA_ROTOR0_CT 2.0
param set-default CA_ROTOR0_KM 0.04

param set-default CA_ROTOR1_PX -0.22
param set-default CA_ROTOR1_PY -0.43
param set-default CA_ROTOR1_AX 0.078
param set-default CA_ROTOR1_AY -0.040
param set-default CA_ROTOR1_AZ -0.996
param set-default CA_ROTOR1_CT 2.0
param set-default CA_ROTOR1_KM 0.04

param set-default CA_ROTOR2_PX 0.22
param set-default CA_ROTOR2_PY -0.43
param set-default CA_ROTOR2_AX -0.078
param set-default CA_ROTOR2_AY -0.040
param set-default CA_ROTOR2_AZ -0.996
param set-default CA_ROTOR2_CT 2.0
param set-default CA_ROTOR2_KM -0.04

param set-default CA_ROTOR3_PX -0.22
param set-default CA_ROTOR3_PY 0.43
param set-default CA_ROTOR3_AX 0.078
param set-default CA_ROTOR3_AY 0.040
param set-default CA_ROTOR3_AZ -0.996
param set-default CA_ROTOR3_CT 2.0
param set-default CA_ROTOR3_KM -0.04

param set-default PWM_MAIN_FUNC1 101
param set-default PWM_MAIN_FUNC2 102
param set-default PWM_MAIN_FUNC3 103
param set-default PWM_MAIN_FUNC4 104


################################################################################
# PX4XPLANE SENSOR BASELINE
################################################################################

param set-default SENS_EN_GPSSIM 1
param set-default SENS_EN_BAROSIM 1

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

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
param set-default EKF2_GPS_P_NOISE 5.0
param set-default EKF2_GPS_V_NOISE 0.30
param set-default EKF2_GPS_P_GATE 10.0

param set-default EKF2_MAG_TYPE 1
param set-default EKF2_MAG_GATE 5.0
param set-default EKF2_FUSE_BETA 0

param set-default EKF2_ABL_LIM 2.5
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_MULTI_IMU 1
param set-default SENS_IMU_MODE 0
param set-default EKF2_ASP_DELAY 0.0
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 IMU_GYRO_RATEMAX 200


################################################################################
# MULTICOPTER HOVER CONTROL
################################################################################

# Preserve yaw authority at low hover thrust. PX4 requires stick arming to be
# disabled when yaw airmode is enabled.
param set-default MC_AIRMODE 2
param set-default MAN_ARM_GESTURE 0

param set-default MC_ROLL_P 0.9
param set-default MC_PITCH_P 0.58
param set-default MC_YAW_P 0.65
param set-default MC_YAW_WEIGHT 0.35

param set-default MC_ROLLRATE_P 0.10
param set-default MC_ROLLRATE_I 0.02
param set-default MC_ROLLRATE_D 0.0008
param set-default MC_ROLLRATE_MAX 80

param set-default MC_PITCHRATE_P 0.115
param set-default MC_PITCHRATE_I 0.02
param set-default MC_PITCHRATE_D 0.0012
param set-default MC_PITCHRATE_K 0.92
param set-default MC_PITCHRATE_MAX 110

param set-default MC_YAWRATE_I 0.015
param set-default MC_YAWRATE_D 0.025
param set-default MC_YAWRATE_K 1.10
param set-default MC_YAWRATE_MAX 55


################################################################################
# MULTICOPTER POSITION, TAKEOFF, AND LANDING
################################################################################

# Keep autonomous multicopter motion moderate. This vehicle has enough thrust
# margin, but excessive command acceleration couples into yaw/roll during hover
# and after back-transition.
param set-default MPC_XY_P 0.18
param set-default MPC_XY_VEL_P_ACC 0.8
param set-default MPC_XY_VEL_I_ACC 0.1
param set-default MPC_Z_VEL_P_ACC 2.0
param set-default MPC_Z_VEL_I_ACC 0.5
param set-default MPC_Z_VEL_D_ACC 0.6

param set-default MPC_XY_VEL_MAX 4.0
param set-default MPC_XY_CRUISE 3.5
param set-default MPC_VEL_MANUAL 4.0
param set-default MPC_Z_V_AUTO_UP 2.0
param set-default MPC_Z_V_AUTO_DN 1.4
param set-default MPC_Z_VEL_MAX_UP 2.4
param set-default MPC_Z_VEL_MAX_DN 1.4
param set-default MPC_XY_ERR_MAX 10

param set-default MPC_ACC_HOR 0.7
param set-default MPC_ACC_HOR_MAX 1.0
param set-default MPC_ACC_UP_MAX 2.2
param set-default MPC_ACC_DOWN_MAX 1.5
param set-default MPC_JERK_AUTO 0.7
param set-default MPC_JERK_MAX 1.2

param set-default MPC_MAN_TILT_MAX 30
param set-default MPC_TILTMAX_AIR 30
param set-default MPC_TILTMAX_LND 8

param set-default MPC_THR_HOVER 0.22
param set-default MPC_THR_MIN 0.08
param set-default MPC_THR_XY_MARG 0.4

param set-default MPC_TKO_SPEED 1.2
param set-default MPC_TKO_RAMP_T 2.5
param set-default MIS_TAKEOFF_ALT 1.5
param set-default MPC_LAND_ALT1 8
param set-default MPC_LAND_ALT2 3
param set-default MPC_LAND_SPEED 0.9
param set-default MPC_LAND_CRWL 0.36
param set-default MPC_LAND_RADIUS 30

param set-default LNDMC_ALT_GND 1.5
param set-default LNDMC_ROT_MAX 25
param set-default COM_DISARM_LAND 1.5

param set-default MPC_YAW_MODE 0
param set-default MPC_YAWRAUTO_ACC 8
param set-default MPC_YAWRAUTO_MAX 25
param set-default MIS_YAW_ERR 30
param set-default MIS_YAW_TMT 5
param set-default MC_ORBIT_YAW_MOD 1


################################################################################
# FIXED-WING ENVELOPE AND ENERGY CONTROL
################################################################################

# The body-axis X-Plane pitot is used by TECS and transition logic. Keep the
# missing-data check and avoid false innovation/stuck-data failures during the
# high-attitude tailsitter transition.
param set-default ASPD_DO_CHECKS 1
param set-default ASPD_FALLBACK 1
param set-default SYS_HAS_NUM_ASPD 0
param set-default EKF2_ARSP_THR 24.0
param set-default EKF2_GSF_TAS 0.0

param set-default FW_AIRSPD_STALL 16
param set-default FW_AIRSPD_MIN 19
param set-default FW_AIRSPD_TRIM 27
param set-default FW_AIRSPD_MAX 36

param set-default FW_THR_TRIM 0.14
param set-default FW_THR_MAX 0.50
param set-default FW_THR_SLEW_MAX 0.20

param set-default FW_T_SINK_MAX 3
param set-default FW_T_SINK_MIN 1.6
param set-default FW_T_SPDWEIGHT 0.8
param set-default FW_T_RLL2THR 2.0
param set-default FW_T_STE_R_TC 1.0
param set-default FW_T_THR_DAMPING 0.25
param set-default FW_T_PTCH_DAMP 0.25
param set-default FW_T_I_GAIN_PIT 0.25
param set-default FW_T_CLMB_R_SP 2.0

param set-default FW_P_TC 0.6
param set-default FW_PSP_OFF 2.0
param set-default FW_P_LIM_MAX 35
param set-default FW_P_LIM_MIN -15
param set-default FW_PR_P 0.50
param set-default FW_PR_I 0.30

param set-default FW_R_TC 1.5
param set-default FW_R_LIM 16
param set-default FW_RR_P 0.10
param set-default FW_RR_I 0.04
param set-default FW_RR_FF 0.05

param set-default FW_YR_P 0.01
param set-default FW_YR_I 0.0
param set-default FW_YR_FF 0.0


################################################################################
# VTOL TRANSITION
################################################################################

param set-default VT_ARSP_BLEND 20
param set-default VT_ARSP_TRANS 28
param set-default VT_F_TRANS_DUR 10.0
param set-default VT_F_TRANS_THR 0.36
param set-default VT_F_TR_OL_TM 14.0
param set-default VT_TRANS_MIN_TM 8.0
param set-default VT_TRANS_TIMEOUT 30
param set-default VT_B_TRANS_DUR 5.0
param set-default VT_B_DEC_MSS 1.0
param set-default VT_B_DEC_I 0.12
param set-default VT_B_TRANS_RAMP 1.5
param set-default VT_FW_MIN_ALT 30
param set-default VT_QC_T_ALT_LOSS 35
param set-default VT_PITCH_MIN -10

param set-default VT_FW_DIFTHR_EN 7
param set-default VT_FW_DIFTHR_S_R 0.55
param set-default VT_FW_DIFTHR_S_P 0.90
param set-default VT_FW_DIFTHR_S_Y 0.32


################################################################################
# NAVIGATION AND FAILSAFE
################################################################################

param set-default NPFG_PERIOD 55.0
param set-default NPFG_DAMPING 1.00
param set-default NPFG_ROLL_TC 2.4
param set-default NPFG_SW_DST_MLT 0.70
param set-default NAV_ACC_RAD 120
param set-default NAV_FW_ALT_RAD 40
param set-default NAV_MC_ALT_RAD 2
param set-default NAV_LOITER_RAD 1300
param set-default RTL_LOITER_RAD 1300
param set-default RTL_RETURN_ALT 180
param set-default RTL_DESCEND_ALT 150
param set-default RTL_MIN_DIST 50

param set-default FD_FAIL_R 85
param set-default FD_FAIL_P 85
param set-default FD_FAIL_R_TTRI 1.0
param set-default FD_FAIL_P_TTRI 1.0
param set-default WV_EN 0

################################################################################
# END OF FILE
################################################################################
