CollisionAvoidanceSystem/doc/design/data_structure_design.md
2025-04-29 14:30:24 +08:00

205 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 碰撞避免系统数据结构设计文档
## 1. 数据结构概述
本文档描述碰撞避免系统中的核心数据结构设计及其关系。系统采用面向对象设计方法,通过继承和组合实现不同移动物体类型的统一管理。
## 2. 核心数据结构设计
### 2.1 类图
```mermaid
classDiagram
class MovingObject {
+GeoPosition currentPosition
+Velocity velocity
+double heading
+long timestamp
+Deque~MovementState~ stateHistory
+int MAX_HISTORY
+double maxSpeed
+MovingObjectType type
}
class Aircraft {
+String flightNo
+Long trackNumber
}
class SpecialVehicle {
+String vehicleNo
}
class UnmannedVehicle {
+String transId
+String vehicleId
}
class GeoPosition {
+double latitude
+double longitude
+double altitude
}
class Velocity {
+double x, y, z
+double vx, vy, vz
+double confidence
+double cachedAcceleration
+getSpeed()
}
class MovementState {
+GeoPosition position
+Velocity velocity
+double heading
+long timestamp
+DataQuality dataQuality
}
class MovingObjectType {
<<enumeration>>
AIRCRAFT
SPECIAL_VEHICLE
UNMANNED_VEHICLE
}
MovingObject <|-- Aircraft
MovingObject <|-- SpecialVehicle
MovingObject <|-- UnmannedVehicle
MovingObject "1" *-- "1" GeoPosition
MovingObject "1" *-- "1" Velocity
MovingObject "1" *-- "0..*" MovementState
MovingObject "1" *-- "1" MovingObjectType
MovementState "1" *-- "1" GeoPosition
MovementState "1" *-- "1" Velocity
```
## 3. 数据结构详解
### 3.1 基础抽象类 - MovingObject
`MovingObject` 是系统中所有移动物体的基类,定义了共有属性:
- **currentPosition**: 当前地理位置,使用 `GeoPosition` 类表示,包含经度、纬度和高度信息
- **velocity**: 局部坐标系位置消息xy坐标、速度等等使用 `Velocity` 类表示,包含三维速度向量
- **heading**: 航向角度,以度为单位
- **timestamp**: 时间戳,表示数据最后更新时间
- **stateHistory**: 历史状态队列,存储 `MovementState` 对象,用于轨迹分析
- **MAX_HISTORY**: 历史记录最大保存数量默认为30
- **maxSpeed**: 最大速度限制
- **type**: 移动物体类型,使用 `MovingObjectType` 枚举
### 3.2 具体移动物体类型
系统实现了三种具体的移动物体类型,它们都继承自 `MovingObject` 抽象类:
#### 3.2.1 航空器 (Aircraft)
航空器特有属性:
- **flightNo**: 航班号,字符串类型,用于唯一标识航班
- **trackNumber**: 航迹号,长整型,用于雷达跟踪标识
构造函数接收位置参数(纬度、经度、高度)和时间戳,初始化基类属性。
#### 3.2.2 特勤车辆 (SpecialVehicle)
特勤车辆特有属性:
- **vehicleNo**: 车牌号,字符串类型,用于唯一标识车辆
构造函数接收位置参数(纬度、经度)、时间戳、速度和方向,并据此计算速度向量。特勤车辆被标记为"不可控"对象,表示系统只能监控而不能控制其行为。
#### 3.2.3 无人车 (UnmannedVehicle)
无人车特有属性:
- **transId**: 消息唯一ID用于消息跟踪
- **vehicleId**: 车辆ID用于唯一标识无人车
构造函数接收位置参数(经度、纬度)、航向和速度,并据此计算速度向量。无人车被标记为"可控"对象,表示系统可以向其发送控制指令。
### 3.3 辅助数据结构
#### 3.3.1 地理位置 - GeoPosition
`GeoPosition` 表示三维空间中的位置:
- **latitude**: 纬度,单位为度
- **longitude**: 经度,单位为度
- **altitude**: 高度,单位为米
#### 3.3.2 速度 - Velocity
`Velocity` 描述局部坐标系的位置消息:
- **x, y, z**: 三维坐标系中的位置
- **vx, vy, vz**: 三个方向上的速度分量,单位为米/秒
- **confidence**: 速度计算置信度取值范围0-1
- **cachedAcceleration**: 加速度计算结果缓存
- **getSpeed()**: 计算速度标量的方法
#### 3.3.3 运动状态 - MovementState
`MovementState` 封装了移动物体在特定时刻的完整状态:
- **position**: 地理位置GeoPosition类型
- **velocity**: 局部坐标系的位置消息Velocity类型
- **heading**: 航向,度数
- **timestamp**: 时间戳
- **dataQuality**: 数据质量枚举,表示数据可靠性
#### 3.3.4 移动物体类型 - MovingObjectType
`MovingObjectType` 是一个枚举类型,定义了系统支持的移动物体类型:
- **AIRCRAFT**: 航空器(飞机)
- **SPECIAL_VEHICLE**: 特勤车辆(不可控)
- **UNMANNED_VEHICLE**: 无人车(可控)
### 3.4 静态环境数据结构 - 道路网络
除了移动物体,系统还需要处理静态环境信息,特别是机场的道路网络。相关数据结构位于 `com.dongni.collisionavoidance.roads.model` 包下。
#### 3.4.1 道路信息 - RoadInfo
`RoadInfo` 类封装了系统运行时使用的单条道路信息。它由 `RoadNetworkService` 在初始化时根据配置文件 (`airport_roads.yaml`) 创建,包含处理后的属性和用于空间计算的 JTS 几何对象。关键属性包括:
- **id**: 道路的唯一标识符 (String)。
- **name**: 道路名称 (String)。
- **speedLimitMetersPerSecond**: 该道路的限速,已统一为米/秒 (Double)。
- **directionality**: 道路方向性,使用 `RoadDirectionality` 枚举表示。
- **heightLimitMeters**, **widthLimitMeters**: 限高和限宽,已统一为米 (Double)。
- **prohibited**: 是否禁止通行 (boolean)。
- **centerline**: 道路中心线的 JTS `LineString` 对象,用于路径分析和距离计算。
- **boundary**: 道路边界范围的 JTS `Polygon` 对象,通过对中心线进行缓冲计算得到,用于判断车辆是否在道路上。
- **relatedZones**: 与该道路关联的区域 ID 列表 (List<String>)。
#### 3.4.2 道路方向性 - RoadDirectionality
`RoadDirectionality` 是一个枚举类型,定义了道路的通行方向:
- **ONE_WAY**: 单向通行。
- **TWO_WAY**: 双向通行。
- **UNKNOWN**: 未知或未指定。
## 4. 数据流转机制
### 4.1 历史状态存储机制
每个 `MovingObject` 对象维护一个 `stateHistory` 队列,用于存储历史状态:
1. 当对象位置或速度更新时,系统创建新的 `MovementState` 对象
2. 新的状态对象被添加到 `stateHistory` 队列
3. 如果队列长度超过 `MAX_HISTORY`默认30最旧的记录会被移除
4. 历史记录用于轨迹分析、异常检测和预测计算
```mermaid
sequenceDiagram
participant 系统
participant MovingObject
participant stateHistory队列
系统->>MovingObject: 更新位置和速度
MovingObject->>MovingObject: 创建MovementState对象
MovingObject->>stateHistory队列: 添加新状态记录
alt 队列长度 > MAX_HISTORY
stateHistory队列->>stateHistory队列: 移除最旧记录
end
```