From 86dee4500069ca4ebf5e239e59210009d80b8ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Onur=20=C3=96zkan?= Date: Sat, 1 Aug 2026 20:53:19 +0300 Subject: [PATCH] libs/kaptan-sensor: add optical-flow observations --- libs/kaptan-sensor/src/lib.rs | 2 ++ libs/kaptan-sensor/src/optical_flow.rs | 37 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 libs/kaptan-sensor/src/optical_flow.rs diff --git a/libs/kaptan-sensor/src/lib.rs b/libs/kaptan-sensor/src/lib.rs index d10ec66..ae9d59f 100644 --- a/libs/kaptan-sensor/src/lib.rs +++ b/libs/kaptan-sensor/src/lib.rs @@ -8,5 +8,7 @@ /// Inertial measurement unit observations. pub mod imu; +/// Optical-flow observations. +pub mod optical_flow; /// Distance sensor observations. pub mod range; diff --git a/libs/kaptan-sensor/src/optical_flow.rs b/libs/kaptan-sensor/src/optical_flow.rs new file mode 100644 index 0000000..dc142de --- /dev/null +++ b/libs/kaptan-sensor/src/optical_flow.rs @@ -0,0 +1,37 @@ +//! Optical-flow observations. + +use kaptan_time::Timestamp; + +/// Coherent ground-referenced optical-flow observation in the sensor frame. +/// +/// Linear velocity and ground distance use integer SI subunits so acquisition +/// remains independent of the floating-point representation required by some +/// outbound wire protocols. +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub struct OpticalFlowSnapshot { + /// Flight-controller monotonic time at observation reception. + pub timestamp: Timestamp, + /// Ground-referenced velocity along sensor X/Y, in millimetres per second. + pub velocity_millimetres_per_second: [i32; 2], + /// Ground distance, in millimetres. + pub ground_distance_millimetres: u32, + /// Device-reported observation quality, from 0 through 255. + pub quality: u8, +} + +impl OpticalFlowSnapshot { + /// Creates one valid optical-flow observation. + pub const fn new( + timestamp: Timestamp, + velocity_millimetres_per_second: [i32; 2], + ground_distance_millimetres: u32, + quality: u8, + ) -> Self { + Self { + timestamp, + velocity_millimetres_per_second, + ground_distance_millimetres, + quality, + } + } +}