From c1a9ab46b9ad23bd1eae85136fb9778d58bd7823 Mon Sep 17 00:00:00 2001 From: Balduin Date: Mon, 16 Mar 2026 08:54:37 +0100 Subject: [PATCH] fix(control_allocator): fix confusion between decision thresholds The previous version classified a vector as poinging along axis i if component i is above 0.5 and other components are below 0.1. This was erroneously swapped when refactoring. --- .../ActuatorEffectivenessRotors.cpp | 5 ++--- .../ActuatorEffectivenessRotors.hpp | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp index 1669236b34..765d0dba47 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.cpp @@ -265,15 +265,14 @@ ActuatorBitmask ActuatorEffectivenessRotors::getMotors() const return motors; } -// Helper to check if a vector is primarily aligned with a specific axis index bool ActuatorEffectivenessRotors::isAlignedWithAxis(const Vector3f &axis_abs, int primary_idx) { for (int i = 0; i < 3; ++i) { if (i == primary_idx) { - if (axis_abs(i) <= MAX_AXIS_NEGLIGIBLE) { return false; } + if (axis_abs(i) < MIN_AXIS_DOMINANT) { return false; } } else { - if (axis_abs(i) >= MIN_AXIS_DOMINANT) { return false; } + if (axis_abs(i) > MAX_AXIS_NEGLIGIBLE) { return false; } } } diff --git a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp index 23198cea67..7ab4268809 100644 --- a/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp +++ b/src/modules/control_allocator/VehicleActuatorEffectiveness/ActuatorEffectivenessRotors.hpp @@ -141,6 +141,12 @@ private: const AxisConfiguration _axis_config; const bool _tilt_support; ///< if true, tilt servo assignment params are loaded + + /** + * Helper to check if a unit vector is primarily aligned with a specific axis index, meaning: + * | component along that axis | >= MIN_AXIS_DOMINANT + * | component along other axes | <= MAX_AXIS_NEGLIGIBLE + */ bool isAlignedWithAxis(const Vector3f &axis_abs, int primary_idx); struct ParamHandles {