#ifndef ROBOT_BLACKBOARD_H #define ROBOT_BLACKBOARD_H #include #include #include "IMU/hwt101.h" // 引用 IMU 接口 #include "laser/laser_manager.h" // 引用前后雷达接口 #include "vl53_board.h" // 引用侧向雷达接口 /** * @brief 标准原子数据,自带时间戳,专治“传感器偷偷掉线” */ typedef struct { float value; // 数据本体 (距离、角度、速度等) uint32_t timestamp_ms; // 数据更新时的系统时间 (HAL_GetTick) bool is_valid; // 驱动层判定的有效性 (如是否超量程、是否报警) } SensorItem_t; /** * @brief 机器人全局情报中心 (System Context) * @note 对齐抽象后的数据,算法层不需要再关心这是 1 号雷达还是 2 号雷达 */ typedef struct { /* --- 1. 空间姿态 (整合自 HWT101) --- */ SensorItem_t imu_yaw; // 原始航向角 (deg),范围 [-180, +180),跨界时跳变 SensorItem_t imu_yaw_continuous; // unwrap 后的连续航向角 (deg),无跳变,可直接做差计算转角 SensorItem_t imu_wz; // Z轴角速度 (deg/s,上层使用前需转 rad/s) /* --- 2. 侧向走廊观测 (整合自 Vl53Board) --- */ SensorItem_t dist_left_f; // 左前侧向距离 (mm) SensorItem_t dist_left_r; // 左后侧向距离 (mm) SensorItem_t dist_right_f; // 右前侧向距离 (mm) SensorItem_t dist_right_r; // 右后侧向距离 (mm) /* --- 3. 前后到端/防撞观测 (整合自 Laser Manager) --- */ SensorItem_t dist_front_stp; // 前方 STP 激光测距 (mm) SensorItem_t dist_front_atk; // 前方 ATK 激光测距 (mm) SensorItem_t dist_rear_stp; // 后方 STP 激光测距 (mm) SensorItem_t dist_rear_atk; // 后方 ATK 激光测距 (mm) /* --- 4. 底盘反馈 (整合自 CAN 0x181 & 0x200) --- */ float odom_vx; // 基于 ticks 积分推算的当前线速度 (m/s) float odom_wz; // 基于 ticks 积分推算的当前角速度 (rad/s) uint32_t chassis_diag; // 底盘硬诊断位图 [cite: 669] uint8_t chassis_state; // 0=BOOTING, 1=OPERATIONAL, 2=SAFE_FAULT [cite: 665] bool chassis_online; // 底盘 CAN 通讯是否正常 } RobotBlackboard_t; /* ========================================================= * 生产者 API (各种中断/驱动采集任务调用) * ========================================================= */ void Blackboard_UpdateIMU(const HWT101_Data_t *imu_data); void Blackboard_UpdateVl53(const Vl53BoardSnapshot_t *vl_data); void Blackboard_UpdateLaser(const laser_simple_snapshot_t *ls_data); // 由你的里程计解算函数调用 (传入算好的实时速度) void Blackboard_UpdateOdom(float vx, float wz); // 由 CAN 0x181 接收回调调用 void Blackboard_UpdateChassisState(uint8_t state, uint32_t diag, bool online); /* ========================================================= * 消费者 API (算法/控制任务调用) * ========================================================= */ /** * @brief 拍一张极速快照,获取全部对齐的传感器数据 * @note 内部自带临界区保护,绝对防撕裂 */ void Blackboard_GetSnapshot(RobotBlackboard_t *out_snapshot); #endif // ROBOT_BLACKBOARD_H