From b885c2d7e90a75654aab6646550fdd28452b1a50 Mon Sep 17 00:00:00 2001 From: Alireza Ghaderi Date: Wed, 1 Jul 2026 08:42:33 +0000 Subject: [PATCH] feat(sim): add X-Plane SITL airframes (#22493) --- .../airframes/5001_xplane_cessna172 | 280 +++++++++++ .../init.d-posix/airframes/5002_xplane_tb2 | 273 +++++++++++ .../airframes/5010_xplane_ehang184 | 328 +++++++++++++ .../airframes/5020_xplane_alia250 | 447 ++++++++++++++++++ .../airframes/5021_xplane_qtailsitter | 309 ++++++++++++ .../init.d-posix/airframes/CMakeLists.txt | 6 + .../init.d-posix/px4-rc.mavlinksim | 14 +- .../init.d-posix/px4-rc.simulator | 11 +- docs/en/SUMMARY.md | 3 +- docs/en/sim_xplane/index.md | 95 ++++ .../community_supported_simulators.md | 1 + .../simulator_mavlink/CMakeLists.txt | 2 +- .../sitl_targets_xplane.cmake | 17 + 13 files changed, 1777 insertions(+), 9 deletions(-) create mode 100644 ROMFS/px4fmu_common/init.d-posix/airframes/5001_xplane_cessna172 create mode 100644 ROMFS/px4fmu_common/init.d-posix/airframes/5002_xplane_tb2 create mode 100644 ROMFS/px4fmu_common/init.d-posix/airframes/5010_xplane_ehang184 create mode 100644 ROMFS/px4fmu_common/init.d-posix/airframes/5020_xplane_alia250 create mode 100644 ROMFS/px4fmu_common/init.d-posix/airframes/5021_xplane_qtailsitter create mode 100644 docs/en/sim_xplane/index.md create mode 100644 src/modules/simulation/simulator_mavlink/sitl_targets_xplane.cmake diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/5001_xplane_cessna172 b/ROMFS/px4fmu_common/init.d-posix/airframes/5001_xplane_cessna172 new file mode 100644 index 00000000000..57e8a58506a --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/5001_xplane_cessna172 @@ -0,0 +1,280 @@ +#!/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 +# @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 +################################################################################ diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/5002_xplane_tb2 b/ROMFS/px4fmu_common/init.d-posix/airframes/5002_xplane_tb2 new file mode 100644 index 00000000000..8a7bc200112 --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/5002_xplane_tb2 @@ -0,0 +1,273 @@ +#!/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 +# @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 +################################################################################ diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/5010_xplane_ehang184 b/ROMFS/px4fmu_common/init.d-posix/airframes/5010_xplane_ehang184 new file mode 100644 index 00000000000..7068ab638ce --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/5010_xplane_ehang184 @@ -0,0 +1,328 @@ +#!/bin/sh +################################################################################ +# PX4 SITL Configuration for Ehang 184 Airtaxi (Quadcopter) in X-Plane +################################################################################ +# +# Aircraft: Ehang 184 Electric Airtaxi +# Type: Quadrotor Wide (X configuration) +# Compatible Sim: X-Plane 11/12 +# Rotor Diameter: 5.2m (large manned aircraft) +# MTOW: ~600kg (2 passengers + batteries) +# +# USAGE: +# make px4_sitl_default xplane_ehang184 +# +# CONFIGURATION NOTES: +# This airframe starts from conservative large-multicopter SITL values focused on: +# - Smooth flight and gentle commanded accelerations +# - Passenger-scale multicopter margins +# - Robust sensor fusion for variable X-Plane FPS +# +# Key values: +# - Barometer noise: 1.0 m to avoid overconfident frame-limited X-Plane fusion +# - Innovation gates: 5.0-10.0 to tolerate simulator timing variability +# - Navigation radii: 12 m horizontal, 2 m vertical for smooth but useful tracking +# - Cruise speed: 6 m/s (~22 km/h) +# - Jerk/acceleration limits kept near PX4-valid comfort-oriented minimums +# +# @name Ehang 184 X-Plane SITL +# @type Quadrotor Wide +# @class Copter +# @maintainer Alireza Ghaderi +# @url https://github.com/alireza787b/px4xplane/ +. ${R}etc/init.d/rc.mc_defaults + + +################################################################################ +# CONTROL ALLOCATION - Motor Configuration +################################################################################ +# Quadcopter X configuration with 5.2m diameter rotors +# +# Motor Layout: Front +# ^ +# 1 0 (CW/CCW) +# \ / +# \ / +# \ / +# / \ +# / \ +# / \ +# 2 3 +# +# Motor 0: Front-Right (CCW) - Position: (+1.4, -1.4, 0)m from CG +# Motor 1: Front-Left (CW) - Position: (+1.4, +1.4, 0)m from CG +# Motor 2: Rear-Left (CCW) - Position: (-1.4, -1.4, 0)m from CG +# Motor 3: Rear-Right (CW) - Position: (-1.4, +1.4, 0)m from CG +# +# Default thrust and moment coefficients are used unless overridden below. + +param set-default CA_ROTOR_COUNT 4 + +# Motor 0: Front-Right (CCW) +param set-default CA_ROTOR0_PX 1.4 +param set-default CA_ROTOR0_PY -1.4 +param set-default CA_ROTOR0_KM -0.05 + +# Motor 1: Front-Left (CW) +param set-default CA_ROTOR1_PX 1.4 +param set-default CA_ROTOR1_PY 1.4 + +# Motor 2: Rear-Left (CCW) +param set-default CA_ROTOR2_PX -1.4 +param set-default CA_ROTOR2_PY -1.4 + +# Motor 3: Rear-Right (CW) +param set-default CA_ROTOR3_PX -1.4 +param set-default CA_ROTOR3_PY 1.4 +param set-default CA_ROTOR3_KM -0.05 + +# PWM Output Mapping +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 + + +################################################################################ +# EKF2 SENSOR FUSION +################################################################################ +# Optimized for X-Plane SITL with variable FPS (30-150 Hz) +# +# BAROMETER TUNING: +# - BARO_NOISE: 1.0 m, matching the Alia SITL lesson that X-Plane baro should +# not be treated as centimeter-class when frame timing and physics vary. +# - BARO_GATE: 10.0 (increased from default 3.0) +# * Tolerates FPS-induced timing gaps and altitude transients +# * Prevents false "BARO switch" errors during mission climbs +# +# GPS TUNING: +# - GPS_P_NOISE: 0.15 m, kept conservative for this X-Plane model. +# * Barometer remains the primary smooth height source, but not centimeter-class. +# - Horizontal noise: 0.01m (GPS horizontal is more accurate) +# +# INNOVATION GATES: +# All gates increased from default values for FPS variability tolerance. +# Prevents false sensor faults during: +# - X-Plane FPS drops (timing jitter) +# - Mission altitude changes (pressure transients) +# - Waypoint transitions (acceleration spikes) +# +# TROUBLESHOOTING: +# If "BARO switch" errors occur: +# 1. Verify CAL_BARO1_PRIO=0 (backup sensor disabled) +# 2. Check only one barometer message per frame in px4xplane plugin +# 3. Increase EKF2_BARO_GATE if needed (max 10.0) + +# Simulation mode enablement +param set-default SENS_EN_GPSSIM 1 +param set-default SENS_EN_BAROSIM 1 + +# Barometer priority (single sensor for SITL simplicity) +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 # Backup disabled (prevents mid-mission switching) + +# EKF2 core configuration +param set-default EKF2_MULTI_IMU 1 +param set-default SENS_IMU_MODE 0 + +# Accelerometer bias estimation for X-Plane SITL. +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 # Better accelerometer trust +param set-default EKF2_ACC_B_NOISE 0.001 # Accel bias damping for frame-paced SITL updates + +# X-PLANE SITL NOTE: EKF2_ABL_LIM = 2.5 (vs Gazebo/jMAVSim default 0.4) +# Required because X-Plane sensor updates are frame-paced and can vary with +# rendering load, which can make EKF2 estimate higher acceleration bias. +# This does NOT affect flight performance - only the preflight arming check. + +# Barometer parameters. +param set-default EKF2_BARO_NOISE 1.0 # Baro height noise in m; avoids overconfident fusion during X-Plane transients +param set-default EKF2_BARO_GATE 10.0 # Increased for FPS variability tolerance + +# 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 1.5 # X-Plane HIL position covariance +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 8.0 # Innovation gate + +# Magnetometer parameters +param set-default EKF2_MAG_TYPE 1 +param set-default EKF2_MAG_GATE 5.0 # Increased for FPS tolerance + +# Additional sensors +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 + +# IMU configuration +param set-default IMU_GYRO_RATEMAX 200 + + +################################################################################ +# MULTICOPTER RATE CONTROL (Inner Loop PID) +################################################################################ +# Attitude rate controllers for roll, pitch, yaw. +# +# TUNING GUIDE: +# - P gain: Responsiveness (higher = faster, can cause oscillation) +# - I gain: Steady-state error correction (too high = overshoot) +# - D gain: Damping (reduces oscillation, sensitive to noise) +# - FF: Feedforward (improves tracking, reduces lag) +# - K: Loop gain multiplier +# +# For new airframes: +# 1. Start with these conservative values +# 2. Increase P until slight oscillation, then back off 20-30% +# 3. Add D for damping (typically P/10) +# 4. Add I last (typically P/15) + +# Roll rate +param set-default MC_ROLLRATE_I 0.1 +param set-default MC_ROLLRATE_D 0.01 +param set-default MC_ROLLRATE_K 3.0 + +# Pitch rate +param set-default MC_PITCHRATE_I 0.1 +param set-default MC_PITCHRATE_D 0.01 +param set-default MC_PITCHRATE_K 2.05 + +# Yaw rate +param set-default MC_YAWRATE_P 2 +param set-default MC_YAWRATE_I 0 +param set-default MC_YAWRATE_FF 0.2 +param set-default MC_YAWRATE_K 0.6 +param set-default MC_YAWRATE_MAX 100 + + +################################################################################ +# MULTICOPTER ATTITUDE CONTROL (Outer Loop) +################################################################################ +# Attitude controllers for orientation angles. + +param set-default MC_ROLL_P 1.0 +param set-default MC_PITCH_P 1.0 +param set-default MC_YAW_P 0.6 + + +################################################################################ +# POSITION & VELOCITY CONTROL +################################################################################ +# Outermost control loops for position and velocity. +# +# LARGE AIRCRAFT TUNING: +# Conservative speeds and gentle accelerations for passenger comfort. + +# Position control +param set-default MPC_XY_P 0.05 # Conservative large-multicopter position P +param set-default MPC_Z_P 0.25 # Vertical position P + +# 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 0.8 +param set-default MPC_Z_VEL_P_ACC 3 +param set-default MPC_Z_VEL_D_ACC 0.2 + +# Velocity limits (passenger comfort priority) +param set-default MPC_XY_VEL_MAX 6.5 # Max horizontal (m/s) ~23 km/h +param set-default MPC_Z_V_AUTO_UP 2.0 +param set-default MPC_Z_V_AUTO_DN 1.2 +param set-default MPC_VEL_MANUAL 5 # Manual horizontal speed below MPC_XY_VEL_MAX + +# Trajectory & jerk limits (reduced for smooth ride) +param set-default MPC_ACC_HOR 1.5 +param set-default MPC_ACC_HOR_MAX 1.8 +param set-default MPC_ACC_UP_MAX 2.0 +param set-default MPC_ACC_DOWN_MAX 2.0 +param set-default MPC_JERK_AUTO 1.0 # PX4-valid low jerk for smooth auto motion +param set-default MPC_JERK_MAX 2.0 # Smooth manual acceleration changes + +# Error limits +param set-default MPC_XY_ERR_MAX 10 + + +################################################################################ +# MANUAL FLIGHT MODE +################################################################################ +# Manual flight characteristics and feel. + +# Tilt & attitude limits +param set-default MPC_MAN_TILT_MAX 25 +param set-default MPC_TILTMAX_AIR 30 + +# Yaw control +param set-default MPC_MAN_Y_MAX 15 +param set-default MPC_YAWRAUTO_MAX 20 + +# Advanced options +param set-default MPC_ALT_MODE 0 + + +################################################################################ +# TAKEOFF & LANDING +################################################################################ + +# Takeoff +param set-default MPC_TKO_SPEED 2.0 # Smooth takeoff climb rate (m/s) + +# Landing +param set-default MPC_LAND_ALT1 8 # Start slowing close to ground (m) +param set-default MPC_LAND_ALT2 3 # Final landing speed below this height (m) +param set-default MPC_LAND_SPEED 0.6 # PX4 minimum landing descend rate (m/s) +param set-default MPC_LAND_RADIUS 25 +param set-default MPC_LAND_RC_HELP 1 + +# Land detector +param set-default LNDMC_Z_VEL_MAX 0.24 +param set-default COM_DISARM_LAND 1.5 + + +################################################################################ +# NAVIGATION & MISSION +################################################################################ +# LARGE MULTICOPTER CONFIGURATION +# +# Design philosophy: this X-Plane Ehang-style multicopter is not a small racing +# drone. Parameters prioritize smooth motion and stable commanded response +# over aggressive point capture. +# +# TUNING BY AIRCRAFT SIZE: +# - Small drone (<2kg): NAV_ACC_RAD=5m, ALT_RAD=0.8m, JERK=2.0 +# - Medium drone (2-25kg): NAV_ACC_RAD=10m, ALT_RAD=1.5m, JERK=1.5 +# - Large multicopter (>100kg): NAV_ACC_RAD=12m, ALT_RAD=2m, JERK=1.0 <-- Current +# - Heavy cargo (>500kg): NAV_ACC_RAD=50m, ALT_RAD=5m, JERK=0.5 + +# Mission parameters +param set-default MIS_YAW_ERR 30 # Max yaw error (deg) - gentle corrections +param set-default MIS_YAW_TMT 5 + +# Navigation acceptance radii +# Large enough for smooth waypoint capture while preserving useful tracking. +param set-default NAV_ACC_RAD 12 # Horizontal acceptance radius (m) +param set-default NAV_MC_ALT_RAD 2 # Vertical acceptance radius (m) + +# Return to launch +param set-default RTL_DESCEND_ALT 30 + + +# GPS configuration +param set-default GPS_UBX_DYNMODEL 6 # Airborne <1g + +################################################################################ +# END OF CONFIGURATION +################################################################################ +# Maintainer: px4xplane project - https://github.com/alireza787b/px4xplane/ +################################################################################ diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/5020_xplane_alia250 b/ROMFS/px4fmu_common/init.d-posix/airframes/5020_xplane_alia250 new file mode 100644 index 00000000000..6a7476b6eef --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/5020_xplane_alia250 @@ -0,0 +1,447 @@ +#!/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 +# @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 +################################################################################ diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/5021_xplane_qtailsitter b/ROMFS/px4fmu_common/init.d-posix/airframes/5021_xplane_qtailsitter new file mode 100644 index 00000000000..e43d3e2dac9 --- /dev/null +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/5021_xplane_qtailsitter @@ -0,0 +1,309 @@ +#!/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 +# @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 +################################################################################ diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt b/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt index a2e2a4d290b..ce93573d155 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/CMakeLists.txt @@ -89,6 +89,12 @@ px4_add_romfs_files( 4020_gz_tiltrotor 4021_gz_x500_flow + 5001_xplane_cessna172 + 5002_xplane_tb2 + 5010_xplane_ehang184 + 5020_xplane_alia250 + 5021_xplane_qtailsitter + 6011_gazebo-classic_typhoon_h480 6011_gazebo-classic_typhoon_h480.post diff --git a/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim b/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim index 195952eaf8b..42b8cada71f 100644 --- a/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim +++ b/ROMFS/px4fmu_common/init.d-posix/px4-rc.mavlinksim @@ -1,11 +1,15 @@ #!/bin/sh # shellcheck disable=SC2154 -# EKF2 specifics -param set-default SENS_GPS0_DELAY 10 -param set-default SENS_GPS1_DELAY 10 -param set-default EKF2_MULTI_IMU 3 -param set-default SENS_IMU_MODE 0 +# EKF2 specifics. X-Plane targets tune these in their airframe files because +# the bridge sensor timing and IMU topology differ from the classic mavlink +# simulator defaults. +if [ "$PX4_SIMULATOR" != "xplane" ]; then + param set-default SENS_GPS0_DELAY 10 + param set-default SENS_GPS1_DELAY 10 + param set-default EKF2_MULTI_IMU 3 + param set-default SENS_IMU_MODE 0 +fi simulator_tcp_port=$((4560+px4_instance)) diff --git a/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator b/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator index ccc11ea6071..d1d91f837fe 100644 --- a/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator +++ b/ROMFS/px4fmu_common/init.d-posix/px4-rc.simulator @@ -1,8 +1,11 @@ #!/bin/sh # shellcheck disable=SC2154 -# Simulator IMU data provided at 250 Hz -param set-default IMU_INTEG_RATE 250 +# Most mavlink simulator models provide IMU data at 250 Hz. X-Plane airframes +# set their own bridge cadence in the airframe file. +if [ "$PX4_SIMULATOR" != "xplane" ]; then + param set-default IMU_INTEG_RATE 250 +fi # For simulation, allow registering modes while armed for developer convenience param set-default COM_MODE_ARM_CHK 1 @@ -24,6 +27,10 @@ elif [ "$PX4_SIM_MODEL" = "jmavsim_iris" ] || [ "$(param show -q SYS_AUTOSTART)" # Run jMAVSim . px4-rc.jmavsim +elif [ "$PX4_SIMULATOR" = "xplane" ]; then + # Run X-Plane through the mavlink simulator bridge + . px4-rc.mavlinksim + else # Run simulator_mavlink module for interface with gazebo-classic . px4-rc.mavlinksim diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index e15d8bf748c..fdfb9df1631 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -885,14 +885,15 @@ - [Windows Cygwin Toolchain Maintenance](dev_setup/dev_env_windows_cygwin_packager_setup.md) - [Qt Creator IDE](dev_setup/qtcreator.md) - [Simulators](simulation/community_supported_simulators.md) + - [AirSim Simulation](sim_airsim/index.md) - [FlightGear Simulation](sim_flightgear/index.md) - [FlightGear Vehicles](sim_flightgear/vehicles.md) - [Multi-Vehicle Sim with FlightGear](sim_flightgear/multi_vehicle.md) - [jMAVSim Simulation](sim_jmavsim/index.md) - [Multi-Vehicle Sim with JMAVSim](sim_jmavsim/multi_vehicle.md) - [JSBSim Simulation](sim_jsbsim/index.md) - - [AirSim Simulation](sim_airsim/index.md) - [RotorPy Simulation](sim_rotorpy/index.md) + - [X-Plane Simulation](sim_xplane/index.md) - [Hardware Simulation](simulation/hardware.md) - [HITL Simulation](simulation/hitl.md) - [SIH on Hardware](sim_sih/hardware.md) diff --git a/docs/en/sim_xplane/index.md b/docs/en/sim_xplane/index.md new file mode 100644 index 00000000000..78e9b7b9444 --- /dev/null +++ b/docs/en/sim_xplane/index.md @@ -0,0 +1,95 @@ +# X-Plane Simulation + +:::warning +This simulator is [community supported and maintained](../simulation/community_supported_simulators.md). +It may or may not work with current versions of PX4 and may be removed in future releases. +See [Toolchain Installation](../dev_setup/dev_env.md) for information about the environments and tools supported by the core development team. +::: + +[X-Plane](https://www.x-plane.com/) can be used with PX4 for [Software-In-The-Loop (SITL)](../simulation/index.md#sitl-simulation-environment) simulation through the community-supported [px4xplane](https://github.com/alireza787b/px4xplane) bridge plugin. +PX4 runs as the flight controller, while X-Plane provides the vehicle dynamics, visual scene, and simulated sensor inputs. +The px4xplane bridge is an X-Plane plugin: it runs inside X-Plane, accepts PX4's simulator MAVLink connection, publishes simulated sensors to PX4, and writes PX4 actuator outputs to X-Plane datarefs. + +## Supported Vehicles + +PX4 includes X-Plane SITL airframes for the following vehicles: + +| Vehicle | Type | PX4 target | +| -------------- | --------------- | ------------------------------------------ | +| Cessna 172 | Plane | `make px4_sitl_default xplane_cessna172` | +| TB2 | Plane | `make px4_sitl_default xplane_tb2` | +| Ehang 184 | Multicopter | `make px4_sitl_default xplane_ehang184` | +| Alia-250 | VTOL quadplane | `make px4_sitl_default xplane_alia250` | +| QuadTailsitter | VTOL tailsitter | `make px4_sitl_default xplane_qtailsitter` | + +The matching X-Plane aircraft files and bridge configuration are distributed by the px4xplane project. +Additional X-Plane aircraft or vehicle models can also be integrated when PX4 has a matching SITL-capable control path and px4xplane can map the required actuator outputs to writable X-Plane datarefs. + +## Installation + +1. Install the [PX4 development environment](../dev_setup/dev_env.md) on the machine, container, or WSL2 environment that will run PX4 SITL. +2. Install X-Plane 11 or X-Plane 12. +3. Download the latest OS-specific px4xplane release package from the [px4xplane releases page](https://github.com/alireza787b/px4xplane/releases). +4. The release package is an archive, not an installer. + Extract it and copy the complete `px4xplane` plugin folder into: + + ```sh + X-Plane/Resources/plugins/px4xplane + ``` + +5. Copy the matching X-Plane aircraft folders from the same extracted package into an X-Plane aircraft directory. + Keep the packaged `64/config.ini` with the `px4xplane` plugin unless the release notes say otherwise. + +The [px4xplane build and installation guide](https://github.com/alireza787b/px4xplane/blob/master/docs/BUILD.md#installation) has more detail on the plugin folder layout. + +## Network Setup + +PX4 connects to the X-Plane bridge on TCP port `4560`. +The default host is `localhost`, which is suitable when PX4 and X-Plane run on the same Linux or macOS machine. + +For Windows, the usual setup is X-Plane running natively on Windows and PX4 running in WSL2. +In that case, set `PX4_SIM_HOSTNAME` in the WSL2 shell to the Windows host IP before starting PX4. +This variable is set on the PX4/SITL side and points to the host where X-Plane and the px4xplane plugin are running: + +```sh +export PX4_SIM_HOSTNAME=$(ip route | awk '/default/ {print $3; exit}') +``` + +Then start the desired PX4 target from the same shell. +If PX4 runs in Docker or on another computer, set `PX4_SIM_HOSTNAME` to the reachable IP address or hostname of the X-Plane machine instead. +Make sure inbound TCP port `4560` is allowed by the firewall on the X-Plane host. + +## Running SITL + +1. Start X-Plane and load the aircraft that matches the PX4 target. +2. Confirm the px4xplane plugin is loaded in the X-Plane plugin menu. +3. Start PX4 SITL. For example: + + ```sh + cd PX4-Autopilot + make px4_sitl_default xplane_alia250 + ``` + +4. Connect QGroundControl to PX4 as usual. + +PX4 prints `Simulator connected on TCP port 4560` when the bridge is connected. + +## Custom Aircraft + +To add another X-Plane aircraft: + +1. Create a PX4 airframe file in `ROMFS/px4fmu_common/init.d-posix/airframes`. +2. Add a matching SITL target in `src/modules/simulation/simulator_mavlink/sitl_targets_xplane.cmake`. +3. Configure the px4xplane bridge to map PX4 actuator outputs to the aircraft datarefs. +4. Tune the PX4 parameters from ULog data and X-Plane truth logs. + +See the [px4xplane custom airframe guide](https://github.com/alireza787b/px4xplane/blob/master/docs/custom-airframe-config.md) for bridge configuration details. +For X-Plane-side aircraft design and dataref mapping, see the official [Plane Maker manual](https://developer.x-plane.com/manuals/planemaker/index.html) and [X-Plane datarefs reference](https://developer.x-plane.com/datarefs/). + +## Troubleshooting + +If PX4 waits for the simulator, verify that X-Plane is running, the px4xplane plugin is loaded, `PX4_SIM_HOSTNAME` points to the X-Plane host, and TCP port `4560` is not blocked. + +If the aircraft loads but does not respond correctly, verify that the X-Plane aircraft, PX4 target, and px4xplane configuration all refer to the same vehicle. + +If estimator warnings appear, keep the simulator frame rate stable, check that the intended airframe parameters were loaded, and inspect the ULog sensor and estimator topics before changing bridge or airframe parameters. diff --git a/docs/en/simulation/community_supported_simulators.md b/docs/en/simulation/community_supported_simulators.md index c3716fa50a9..e111edd6ffb 100644 --- a/docs/en/simulation/community_supported_simulators.md +++ b/docs/en/simulation/community_supported_simulators.md @@ -19,6 +19,7 @@ Questions about these tools should be raised on the [discussion forums](../contr | [JSBSim](../sim_jsbsim/index.md) |

A simulator that provides advanced flight dynamics models. This can be used to model realistic flight dynamics based on wind tunnel data.

Supported Vehicles: Plane, Quad, Hex

| | [AirSim](../sim_airsim/index.md) |

A cross platform simulator that provides physically and visually realistic simulations. This simulator is resource intensive, and requires a significantly more powerful computer than the other simulators described here.

Supported Vehicles: Iris (MultiRotor model and a configuration for PX4 QuadRotor in the X configuration).

| | [RotorPy](../sim_rotorpy/index.md) |

A Python-based multirotor simulation environment with aerodynamic forces and moments, actuator limits, sensor noise, wind, obstacles, and a Gymnasium interface for research workflows.

Supported Vehicles: Quad

| +| [X-Plane](../sim_xplane/index.md) |

A commercial flight simulator using blade element theory for flight dynamics. The PX4 integration uses the community-supported px4xplane bridge plugin.

Preconfigured PX4 targets: Plane, Multicopter, VTOL. Additional X-Plane aircraft or vehicle models can be integrated when PX4 has a matching SITL-capable control path and px4xplane can map the required actuator outputs to writable X-Plane datarefs.

| :::tip [Gazebo](../sim_gazebo_gz/index.md) and [SIH](../sim_sih/index.md) are the officially supported simulators. See the [Simulation](index.md) page for more information. diff --git a/src/modules/simulation/simulator_mavlink/CMakeLists.txt b/src/modules/simulation/simulator_mavlink/CMakeLists.txt index f0e1dce5004..05a28429f55 100644 --- a/src/modules/simulation/simulator_mavlink/CMakeLists.txt +++ b/src/modules/simulation/simulator_mavlink/CMakeLists.txt @@ -59,7 +59,7 @@ include(sitl_targets_flightgear.cmake) include(sitl_targets_gazebo-classic.cmake) include(sitl_targets_jmavsim.cmake) include(sitl_targets_jsbsim.cmake) - +include(sitl_targets_xplane.cmake) # none_iris (legacy compatibility launch helper) add_custom_target(none_iris diff --git a/src/modules/simulation/simulator_mavlink/sitl_targets_xplane.cmake b/src/modules/simulation/simulator_mavlink/sitl_targets_xplane.cmake new file mode 100644 index 00000000000..b8dfa1674e7 --- /dev/null +++ b/src/modules/simulation/simulator_mavlink/sitl_targets_xplane.cmake @@ -0,0 +1,17 @@ +macro(add_xplane_target TARGET_NAME SYS_AUTOSTART AIRFRAME_FILE) + add_custom_target(${TARGET_NAME} + COMMAND ${CMAKE_COMMAND} -E env PX4_SIMULATOR=xplane PX4_SYS_AUTOSTART=${SYS_AUTOSTART} $ + WORKING_DIRECTORY ${SITL_WORKING_DIR} + USES_TERMINAL + DEPENDS + px4 + ${PX4_SOURCE_DIR}/ROMFS/px4fmu_common/init.d-posix/airframes/${AIRFRAME_FILE} + COMMENT "Launching PX4 with X-Plane airframe (SYS_AUTOSTART=${SYS_AUTOSTART})" + ) +endmacro() + +add_xplane_target(xplane_cessna172 5001 5001_xplane_cessna172) +add_xplane_target(xplane_tb2 5002 5002_xplane_tb2) +add_xplane_target(xplane_ehang184 5010 5010_xplane_ehang184) +add_xplane_target(xplane_alia250 5020 5020_xplane_alia250) +add_xplane_target(xplane_qtailsitter 5021 5021_xplane_qtailsitter)