Files
ASER/App/preproc/corridor_msgs.h

75 lines
2.8 KiB
C
Raw Normal View History

2026-03-31 23:30:33 +08:00
#ifndef CORRIDOR_MSGS_H
#define CORRIDOR_MSGS_H
#include <stdint.h>
#include <stdbool.h>
/* =========================================================
* EKF
* ========================================================= */
#define EKF_STATE_DIM 3 // [e_y, e_th, s]
2026-04-04 23:24:36 +08:00
/* [改进I] 观测维度 (与实际实现对齐):
* : 1DOF (z_ey)
* IMU : 1DOF (z_eth_imu) Update
* (z_eth_L/z_eth_R) VL53
* 3 [z_ey, z_eth_L, z_eth_R]
*/
#define EKF_OBS_DIM 1 // 实际: 侧墙 1DOF (z_ey)
2026-03-31 23:30:33 +08:00
/* χ² 检验门限 (95% 置信度) */
/* 1 DOF: 3.84, 2 DOF: 5.99, 3 DOF: 7.81 */
#define CHI2_THRESHOLD_1DOF 3.84f
#define CHI2_THRESHOLD_2DOF 5.99f
#define CHI2_THRESHOLD_3DOF 7.81f
/**
* @brief ( Blackboard )
* @note (m)
*/
typedef struct {
uint32_t t_ms; // 观测时间戳
float d_lf, d_lr; // 左侧前后距离 (m)
float d_rf, d_rr; // 右侧前后距离 (m)
float d_front, d_back; // 前后防撞/到端距离 (m)
uint8_t valid_mask; // 位域掩码:标记哪些雷达数据是当前存活且合法的
} CorridorObs_t;
/**
* @brief (EKF )
*/
typedef struct {
uint32_t t_ms; // 状态更新时间戳
float e_y; // 横向偏差 (m),向左偏为正
float e_th; // 航向偏差 (rad),车头偏左为正
float s; // 沿走廊进度里程 (m)
float conf; // 置信度/健康度 (0.0~1.0),用于触发降级
/* EKF 扩展输出 */
float P[EKF_STATE_DIM][EKF_STATE_DIM]; // 状态协方差矩阵
float innovation[EKF_OBS_DIM]; // 新息向量 (观测残差)
float mahalanobis_d2; // 马氏距离平方
uint8_t obs_reject_mask; // 被拒绝的观测位掩码
} CorridorState_t;
/**
* @brief ()
*/
typedef struct {
uint32_t t_ms;
float v; // 期望线速度 (m/s)
float w; // 期望角速度 (rad/s)
uint8_t flags; // 控制特殊标志位
} RawCmd_t;
2026-04-03 08:56:26 +08:00
/* =========================================================
* ( )
* ========================================================= */
typedef enum {
SAFETY_MODE_IDLE = 0, // 零速,不做任何裁剪
SAFETY_MODE_CORRIDOR, // 沟内: 前向减速/停车/E-STOP 全开
SAFETY_MODE_TURN, // 转向: 允许 v=0+w!=0, 前向不全停, 不检查 conf
SAFETY_MODE_STRAIGHT // 直行段: 前后激光防撞, 不检查 conf
} SafetyMode_t;
2026-03-31 23:30:33 +08:00
#endif // CORRIDOR_MSGS_H