7.0 KiB
7.0 KiB
碰撞避免系统数据结构设计文档
1. 数据结构概述
本文档描述碰撞避免系统中的核心数据结构设计及其关系。系统采用面向对象设计方法,通过继承和组合实现不同移动物体类型的统一管理。
2. 核心数据结构设计
2.1 类图
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
AIRPORT_VEHICLE
UNMANNED_VEHICLE
}
MovingObject <|-- Aircraft
MovingObject <|-- AirportVehicle
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: 航空器(飞机)
- AIRPORT_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)。
3.4.2 道路方向性 - RoadDirectionality
RoadDirectionality 是一个枚举类型,定义了道路的通行方向:
- ONE_WAY: 单向通行。
- TWO_WAY: 双向通行。
- UNKNOWN: 未知或未指定。
4. 数据流转机制
4.1 历史状态存储机制
每个 MovingObject 对象维护一个 stateHistory 队列,用于存储历史状态:
- 当对象位置或速度更新时,系统创建新的
MovementState对象 - 新的状态对象被添加到
stateHistory队列 - 如果队列长度超过
MAX_HISTORY(默认30),最旧的记录会被移除 - 历史记录用于轨迹分析、异常检测和预测计算
sequenceDiagram
participant 系统
participant MovingObject
participant stateHistory队列
系统->>MovingObject: 更新位置和速度
MovingObject->>MovingObject: 创建MovementState对象
MovingObject->>stateHistory队列: 添加新状态记录
alt 队列长度 > MAX_HISTORY
stateHistory队列->>stateHistory队列: 移除最旧记录
end