From 8170e113fde866f8b46003e7520a876cb2da66d4 Mon Sep 17 00:00:00 2001 From: Jacob Dahl Date: Tue, 31 Mar 2026 14:48:02 -0800 Subject: [PATCH] fix(bmp581): correct timestamp_sample to integration midpoint The BMP581 pressure measurement is integrated over a configurable window (~23ms at 32x pressure / 2x temperature oversampling). The read time corresponds to the end of the integration window, introducing a systematic timing bias. Correct timestamp_sample to the midpoint by subtracting measurement_time / 2. --- src/drivers/barometer/bmp581/bmp581.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/drivers/barometer/bmp581/bmp581.cpp b/src/drivers/barometer/bmp581/bmp581.cpp index 69d30ecfd3..2c4c469d79 100644 --- a/src/drivers/barometer/bmp581/bmp581.cpp +++ b/src/drivers/barometer/bmp581/bmp581.cpp @@ -137,8 +137,12 @@ int BMP581::collect() perf_begin(_sample_perf); - /* this should be fairly close to the end of the conversion, so the best approximation of the time */ - const hrt_abstime timestamp_sample = hrt_absolute_time(); + /* Correct for measurement integration delay: the pressure was + * integrated over the preceding measurement_time window, so the + * effective sample midpoint is half the measurement time before now. */ + const hrt_abstime now = hrt_absolute_time(); + const hrt_abstime half_meas = get_measurement_time() / 2; + const hrt_abstime timestamp_sample = (now > half_meas) ? (now - half_meas) : now; int_status = get_interrupt_status();