1.0
This commit is contained in:
74
App/Contract/robot_blackboard.h
Normal file
74
App/Contract/robot_blackboard.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#ifndef ROBOT_BLACKBOARD_H
|
||||
#define ROBOT_BLACKBOARD_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#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
|
||||
Reference in New Issue
Block a user