From 336d055923e291e6f8f9c5f3f0fdf923027e02c9 Mon Sep 17 00:00:00 2001 From: Niklas Hauser <121870655+niklaut@users.noreply.github.com> Date: Fri, 28 Feb 2025 21:14:32 +0100 Subject: [PATCH] Robustify Ulanding Radar (#24333) * [ulanding_radar] Fix comms error perf counter usage * [ulanding_radar] Workaround for lost messages by lowering sampling rate The current implementation of the Aerotenna uLanding radar driver assumes that the UART frames are received in full. If the driver polls with 10ms this is not always the case and the driver will fail to parse the frame leading to significant packet loss. This workaround polls at 12ms which ensures that at least one entire frame is received. --- .../distance_sensor/ulanding_radar/AerotennaULanding.cpp | 7 ++++++- .../distance_sensor/ulanding_radar/AerotennaULanding.hpp | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.cpp b/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.cpp index 6558aef348..ffd2c81a7a 100644 --- a/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.cpp +++ b/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.cpp @@ -125,10 +125,15 @@ int AerotennaULanding::collect() index--; } + + } else { + return -EAGAIN; } if (!checksum_passed) { - return -EAGAIN; + perf_count(_comms_errors); + perf_end(_sample_perf); + return -EBADMSG; } _px4_rangefinder.update(timestamp_sample, distance_m); diff --git a/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.hpp b/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.hpp index dc133254bf..98d1c0ab90 100644 --- a/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.hpp +++ b/src/drivers/distance_sensor/ulanding_radar/AerotennaULanding.hpp @@ -56,7 +56,7 @@ using namespace time_literals; -#define ULANDING_MEASURE_INTERVAL 10_ms +#define ULANDING_MEASURE_INTERVAL 12_ms #define ULANDING_MAX_DISTANCE 50.0f #define ULANDING_MIN_DISTANCE 0.315f #define ULANDING_VERSION 1