From 4785e9eca56dec11b9af164d929556e24ad81097 Mon Sep 17 00:00:00 2001 From: bnsgeyer Date: Sun, 24 Nov 2024 23:23:08 -0500 Subject: [PATCH] AP_Motors: Make use of heading correction on ground selectable for tradheli --- libraries/AP_Motors/AP_MotorsHeli.cpp | 4 ++-- libraries/AP_Motors/AP_MotorsHeli.h | 6 +++++- libraries/AP_Motors/AP_Motors_Class.h | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libraries/AP_Motors/AP_MotorsHeli.cpp b/libraries/AP_Motors/AP_MotorsHeli.cpp index 506e4af32073bc..57a6856b1132de 100644 --- a/libraries/AP_Motors/AP_MotorsHeli.cpp +++ b/libraries/AP_Motors/AP_MotorsHeli.cpp @@ -108,9 +108,9 @@ const AP_Param::GroupInfo AP_MotorsHeli::var_info[] = { // @Param: OPTIONS // @DisplayName: Heli_Options // @Description: Bitmask of heli options. Bit 0 changes how the pitch, roll, and yaw axis integrator term is managed for low speed and takeoff/landing. In AC 4.0 and earlier, scheme uses a leaky integrator for ground speeds less than 5 m/s and won't let the steady state integrator build above ILMI. The integrator is allowed to build to the ILMI value when it is landed. The other integrator management scheme bases integrator limiting on takeoff and landing. Whenever the aircraft is landed the integrator is set to zero. When the aicraft is airborne, the integrator is only limited by IMAX. - // @Bitmask: 0:Use Leaky I + // @Bitmask: 0:Use Leaky I 1:Heading Error Correction On-Ground // @User: Standard - AP_GROUPINFO("OPTIONS", 28, AP_MotorsHeli, _heli_options, (uint8_t)HeliOption::USE_LEAKY_I), + AP_GROUPINFO("OPTIONS", 28, AP_MotorsHeli, _heli_options, (uint8_t)HeliOption::USE_LEAKY_I + (uint8_t)HeliOption::USE_HDG_CORRECTION), // @Param: COL_ANG_MIN // @DisplayName: Collective Blade Pitch Angle Minimum diff --git a/libraries/AP_Motors/AP_MotorsHeli.h b/libraries/AP_Motors/AP_MotorsHeli.h index 63e13f36ae28c8..431f10805abc73 100644 --- a/libraries/AP_Motors/AP_MotorsHeli.h +++ b/libraries/AP_Motors/AP_MotorsHeli.h @@ -138,12 +138,16 @@ class AP_MotorsHeli : public AP_Motors { // enum for heli optional features enum class HeliOption { - USE_LEAKY_I = (1<<0), // 1 + USE_LEAKY_I = (1<<0), + USE_HDG_CORRECTION = (1<<1), }; // use leaking integrator management scheme bool using_leaky_integrator() const override { return heli_option(HeliOption::USE_LEAKY_I); } + // use heading error correction + bool using_hdg_error_correction() const override { return heli_option(HeliOption::USE_HDG_CORRECTION); } + // Run arming checks bool arming_checks(size_t buflen, char *buffer) const override; diff --git a/libraries/AP_Motors/AP_Motors_Class.h b/libraries/AP_Motors/AP_Motors_Class.h index 71b4de4ebb148a..1fb4394d39bcca 100644 --- a/libraries/AP_Motors/AP_Motors_Class.h +++ b/libraries/AP_Motors/AP_Motors_Class.h @@ -260,6 +260,8 @@ class AP_Motors { virtual bool init_targets_on_arming() const { return true; } // use leaking integrator management scheme virtual bool using_leaky_integrator() const { return false; } + // use heading error correction which is always true for multirotors + virtual bool using_hdg_error_correction() const { return true; } // returns true if the configured PWM type is digital and should have fixed endpoints bool is_digital_pwm_type() const;