205 lines
7.0 KiB
Markdown
205 lines
7.0 KiB
Markdown
# 碰撞避免系统数据结构设计文档
|
||
|
||
## 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
|
||
```
|