From 98d07ad1f3af7b7d53ff0336290b5a927e3534c5 Mon Sep 17 00:00:00 2001 From: Silvan Fuhrer Date: Tue, 21 Mar 2023 17:25:42 +0100 Subject: [PATCH] disable side slip fusion for tailsitters The attitude frame is wrong for tailsitters doing side slip fusion for wind estimation. It doesn't take into account that the frames is 90deg tilted in FW flight. Signed-off-by: Silvan Fuhrer --- .../px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert | 2 ++ .../init.d-posix/airframes/1041_gazebo-classic_tailsitter | 2 ++ .../init.d/airframes/1102_tailsitter_duo_sih.hil | 2 ++ .../init.d/airframes/13200_generic_vtol_tailsitter | 2 ++ src/modules/ekf2/EKF2.cpp | 6 ++++++ src/modules/ekf2/ekf2_params.c | 1 + 6 files changed, 15 insertions(+) diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert index 1409d90094..c09d24a8bf 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/10042_sihsim_xvert @@ -11,6 +11,8 @@ PX4_SIMULATOR=${PX4_SIMULATOR:=sihsim} PX4_SIM_MODEL=${PX4_SIM_MODEL:=xvert} +param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters + param set-default SENS_EN_GPSSIM 1 param set-default SENS_EN_BAROSIM 1 param set-default SENS_EN_MAGSIM 1 diff --git a/ROMFS/px4fmu_common/init.d-posix/airframes/1041_gazebo-classic_tailsitter b/ROMFS/px4fmu_common/init.d-posix/airframes/1041_gazebo-classic_tailsitter index 454ff8b8b2..efcff63995 100644 --- a/ROMFS/px4fmu_common/init.d-posix/airframes/1041_gazebo-classic_tailsitter +++ b/ROMFS/px4fmu_common/init.d-posix/airframes/1041_gazebo-classic_tailsitter @@ -9,6 +9,8 @@ param set-default MAV_TYPE 20 +param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters + param set-default CA_AIRFRAME 4 param set-default CA_ROTOR_COUNT 4 diff --git a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil index 9ba9822367..9003e546cb 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil +++ b/ROMFS/px4fmu_common/init.d/airframes/1102_tailsitter_duo_sih.hil @@ -17,6 +17,8 @@ . ${R}etc/init.d/rc.vtol_defaults +param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters + param set UAVCAN_ENABLE 0 param set-default VT_ELEV_MC_LOCK 0 param set-default VT_MOT_COUNT 2 diff --git a/ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter b/ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter index 8e0ca8e0b6..fccaee8cf5 100644 --- a/ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter +++ b/ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter @@ -12,6 +12,8 @@ . ${R}etc/init.d/rc.vtol_defaults +param set-default EKF2_FUSE_BETA 0 # side slip fusion is currently not supported for tailsitters + param set-default CA_AIRFRAME 4 param set-default CA_ROTOR_COUNT 2 param set-default CA_ROTOR0_KM -0.05 diff --git a/src/modules/ekf2/EKF2.cpp b/src/modules/ekf2/EKF2.cpp index f7fefd4412..129c4bfdcf 100644 --- a/src/modules/ekf2/EKF2.cpp +++ b/src/modules/ekf2/EKF2.cpp @@ -2360,6 +2360,12 @@ void EKF2::UpdateSystemFlagsSample(ekf2_timestamps_s &ekf2_timestamps) // let the EKF know if the vehicle motion is that of a fixed wing (forward flight only relative to wind) flags.is_fixed_wing = (vehicle_status.vehicle_type == vehicle_status_s::VEHICLE_TYPE_FIXED_WING); + + if (vehicle_status.is_vtol_tailsitter && _params->beta_fusion_enabled) { + PX4_WARN("Disable EKF beta fusion as unsupported for tailsitter"); + _param_ekf2_fuse_beta.set(0); + _param_ekf2_fuse_beta.commit_no_notification(); + } } // vehicle_land_detected diff --git a/src/modules/ekf2/ekf2_params.c b/src/modules/ekf2/ekf2_params.c index 6f58740372..0e3e21b3ea 100644 --- a/src/modules/ekf2/ekf2_params.c +++ b/src/modules/ekf2/ekf2_params.c @@ -1073,6 +1073,7 @@ PARAM_DEFINE_FLOAT(EKF2_EV_POS_Z, 0.0f); * value will determine the minimum airspeed which will still be fused. Set to about 90% of the vehicles stall speed. * Both airspeed fusion and sideslip fusion must be active for the EKF to continue navigating after loss of GPS. * Use EKF2_FUSE_BETA to activate sideslip fusion. +* Note: side slip fusion is currently not supported for tailsitters. * * @group EKF2 * @min 0.0