CollisionAvoidanceSystem/doc/design/speed_calculation.md

3.5 KiB
Raw Blame History

速度计算系统设计文档

1. 数据结构分析

1.1 当前数据结构

目前系统中已实现的数据结构如下:

MovementState运动状态

public class MovementState {
    public GeoPosition position;  // 位置信息
    public Velocity velocity;     // 速度信息
    public double heading;        // 航向(度)
    public long timestamp;        // 时间戳(毫秒)
}

MovingObject移动对象基类

public abstract class MovingObject {
    public GeoPosition currentPosition;  // 当前位置
    public Velocity velocity;            // 速度
    public double heading;               // 航向(度)
    public long timestamp;               // 时间戳(毫秒)
    public Deque<MovementState> stateHistory;  // 历史状态队列
    public int MAX_HISTORY = 10;         // 最大历史记录数
    public double maxSpeed;              // 最大速度
    public MovingObjectType type;        // 类型枚举
}

1.2 数据结构评估

当前数据结构基本合理,但需要考虑以下几点优化:

  1. 历史状态队列

    • 当前MAX_HISTORY=10可能不足以支持平滑的速度计算
    • 建议增加到30-60以支持更长时间窗口的数据分析
  2. 速度计算相关字段

    • 需要在Velocity类中添加速度计算的置信度字段
    • 考虑添加加速度计算结果的缓存字段
  3. 数据质量标记

    • 建议在MovementState中添加数据质量标记字段
    • 用于标识原始数据是否可靠

2. 速度计算方案

2.1 基本思路

  1. 数据预处理

    • 对原始位置数据进行异常值检测
    • 使用卡尔曼滤波进行数据平滑
  2. 速度计算方法

    • 使用滑动窗口计算平均速度
    • 根据飞机状态(起飞/降落)调整计算参数

2.2 具体实现方案

2.2.1 数据预处理

  1. 异常值检测

    // 检测标准:
    - 位置跳变相邻两点间距离超过合理范围
    - 时间异常时间戳倒退或跳变
    - 速度异常计算得到的速度超过最大限制
    
  2. 卡尔曼滤波

    • 状态向量:[x, y, vx, vy]
    • 观测向量:[x, y]
    • 考虑加速度作为系统噪声

2.2.2 速度计算

  1. 滑动窗口计算

    // 窗口大小:
    - 起飞状态5-10秒
    - 降落状态3-5秒
    
  2. 加速度约束

    // 合理加速度范围:
    - 起飞0.5-2.5 m/s²
    - 降落-2.0-0 m/s²
    

2.3 状态判断

  1. 起飞状态判断

    • 速度持续增加
    • 高度持续增加
    • 位置相对跑道起点的距离增加
  2. 降落状态判断

    • 速度持续减小
    • 高度持续减小
    • 位置接近跑道

3. 实现步骤

  1. 更新数据结构:

    • 修改MAX_HISTORY值
    • 添加数据质量字段
    • 添加速度计算置信度字段
  2. 实现数据预处理:

    • 异常值检测
    • 卡尔曼滤波
  3. 实现速度计算:

    • 滑动窗口机制
    • 状态判断
    • 加速度约束
  4. 添加数据质量监控:

    • 记录异常数据比例
    • 监控速度计算置信度

4. 注意事项

  1. 数据同步

    • 确保位置数据的时间戳准确
    • 处理数据延迟和丢失情况
  2. 计算效率

    • 优化卡尔曼滤波计算
    • 合理设置滑动窗口大小
  3. 异常处理

    • 定义清晰的异常处理流程
    • 保存异常数据用于分析
  4. 参数调优

    • 根据实际运行数据调整参数
    • 建立参数自适应机制