mecha10_core/
sensor.rs

1//! Shared sensor message types
2//!
3//! This module contains common sensor message types used across drivers and nodes.
4//! Previously these were duplicated in each driver, now they are centralized here.
5
6use crate::messages::Message;
7use serde::{Deserialize, Serialize};
8
9// ============================================================================
10// Camera Types
11// ============================================================================
12
13/// RGB image message
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct RgbImage {
16    pub timestamp: u64,
17    pub frame_id: u64,
18    pub width: u32,
19    pub height: u32,
20    pub encoding: String,
21    pub data: Vec<u8>,
22}
23
24impl Message for RgbImage {}
25
26/// Depth image message
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct DepthImage {
29    pub timestamp: u64,
30    pub frame_id: u64,
31    pub width: u32,
32    pub height: u32,
33    pub data: Vec<f32>,
34}
35
36impl Message for DepthImage {}
37
38/// Camera info message
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct CameraInfo {
41    pub timestamp: u64,
42    pub width: u32,
43    pub height: u32,
44    pub fps: f32,
45}
46
47impl Message for CameraInfo {}
48
49// ============================================================================
50// LiDAR Types
51// ============================================================================
52
53/// Laser scan message (2D LiDAR)
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct LaserScan {
56    pub timestamp: u64,
57    pub scan_id: u64,
58    pub angle_min: f32,
59    pub angle_max: f32,
60    pub angle_increment: f32,
61    pub range_min: f32,
62    pub range_max: f32,
63    pub ranges: Vec<f32>,
64    pub intensities: Vec<f32>,
65}
66
67impl Message for LaserScan {}
68
69// ============================================================================
70// Odometry Types
71// ============================================================================
72
73/// Odometry message
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct Odometry {
76    pub timestamp: u64,
77    pub x: f32,
78    pub y: f32,
79    pub theta: f32,
80    pub linear_vel: f32,
81    pub angular_vel: f32,
82}
83
84impl Message for Odometry {}
85
86// ============================================================================
87// IMU Types
88// ============================================================================
89
90/// IMU data message
91#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct ImuData {
93    pub timestamp: u64,
94    // Orientation (Euler angles in radians)
95    pub roll: f32,
96    pub pitch: f32,
97    pub yaw: f32,
98    // Angular velocity (rad/s)
99    pub angular_velocity_x: f32,
100    pub angular_velocity_y: f32,
101    pub angular_velocity_z: f32,
102    // Linear acceleration (m/s²)
103    pub linear_acceleration_x: f32,
104    pub linear_acceleration_y: f32,
105    pub linear_acceleration_z: f32,
106}
107
108impl Message for ImuData {}