Files
radar_data_process/BUG_FIX_REPORT.md
T
waiwaylee 01d28e0d28 更新:1、使用VS code+cmake重新编译,编译器保持不变;
2、修复若干逻辑bug,具体参考BUG_FIX_REPORT.md

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
2026-08-18 11:26:19 +08:00

187 lines
8.7 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.
# Bug 修复报告
根据 `BUG_REPORT.md` 中的“是否修复”指示,本次完成了所有标记为“按建议修改/按建议修复”的项;标记为“暂不修复/暂不修改/暂不处理”的项保持原样未改动。
---
## 修复状态汇总
| 编号 | 标题 | 指示 | 状态 |
|---|---|---|---|
| BUG-01 | 基类无虚析构函数 | 暂不修复 | 未修改 |
| BUG-02 | Hight_smooth 无限增长 | 暂不修复 | 未修改 |
| BUG-03 | 工厂单例非线程安全 | 暂不修复 | 未修改 |
| BUG-04 | TAS Point_Sum 未限幅 | 按建议修复 | ✅ 已修复 |
| BUG-05 | Track_to_start.size()-1 下溢 | 按建议修复 | ✅ 已修复 |
| BUG-06 | track_start_point_num 未校验 | 按建议修复 | ✅ 已修复 |
| BUG-07 | 禁止区域个数未限制 | 暂不修复 | 未修改 |
| BUG-08 | 消亡航迹输出无容量检查 | 暂不修改 | 未修改 |
| BUG-09 | Beam_Ctrl 输出计数越界风险 | 按建议修改 | ✅ 已修复 |
| BUG-10 | 航迹号数组下标未校验 | 按建议修改 | ✅ 已修复 |
| BUG-11 | TAS model_filter 未初始化变量 | 按建议修改 | ✅ 已修复 |
| BUG-12 | tas_beam_output 未初始化变量 | 按建议修改 | ✅ 已修复 |
| BUG-13 | Work_Parameter 未初始化 | 暂不修复 | 未修改 |
| BUG-14 | lastest_index 未初始化 | 按建议修改 | ✅ 已修复 |
| BUG-15 | TWS delta_T<=0 仍关联 | 按建议修改 | ✅ 已修复 |
| BUG-16 | TAS 无 delta_T>0 检查 | 按建议修改 | ✅ 已修复 |
| BUG-17 | TAS 外推负时间差 | 按建议修改 | ✅ 已修复 |
| BUG-18 | 卡尔曼时间差除零 | 暂不修改 | 未修改 |
| BUG-19 | Bind_speed prt=0 除零 | 按建议修改 | ✅ 已修复 |
| BUG-20 | 门限重复平方 | 暂不修改 | 未修改 |
| BUG-21 | 近程模型 3 门限整数除法 | 按建议修改 | ✅ 已修复 |
| BUG-22 | EKF/凝聚方位角未环绕 | 按建议修改 | ✅ 已修复 |
| BUG-23 | IMM 概率零分母/奇异矩阵 | 按建议修改 | ✅ 已修复 |
| BUG-24 | EKF 似然只取 2x2 S | 按建议修改 | ✅ 已修复 |
| BUG-25 | TWS 处理 TAS 航迹 | 暂不处理 | 未修改 |
| BUG-26 | 输出航向角使用 atan | 按建议修改 | ✅ 已修复 |
| BUG-27 | asin(height/range) 未保护 | 按建议修改 | ✅ 已修复 |
| BUG-28 | track_clear_all 清理不彻底 | 按建议修改 | ✅ 已修复 |
| BUG-29 | tracking_stop 队列延迟 | 暂不修改 | 未修改 |
| BUG-30 | work_mode 注释不一致 | 注释有误 | ✅ 已修复注释 |
| BUG-31 | tracking_point/引导跟踪空实现 | 注释明确 | ✅ 已加注释 |
| BUG-32 | 凝聚内层未跳过已用点 | 按建议修改 | ✅ 已修复 |
| BUG-33 | 起批 delta_T 未校验 | 暂不修改 | 未修改 |
| BUG-34 | tmp_track_die 空向量越界 | 按建议修改 | ✅ 已修复 |
| BUG-35 | 航迹号 500 不复用 | 按建议修改 | ✅ 已修复 |
| BUG-36 | TAS 波束关闭字段未清 | 暂不修改 | 未修改 |
| BUG-37 | 局部结构体未完整初始化 | 按建议修改 | ✅ 已修复 |
---
## 已修复项明细
### BUG-04
- 文件:`data_process.cpp`
- 修改:TAS 分支 `data_num = min(max(Point_Sum,0), 150)`,避免 `Point_Sum > 150` 时越界读取输入数组。
### BUG-05
- 文件:`track_init.cpp`
- 修改:重复航迹去重循环改为 `for (size_t i = 0; i + 1 < Track_to_start.size(); ++i)`,避免空容器时 `size()-1` 下溢。
### BUG-06
- 文件:`data_process.cpp``track_init.cpp``track_init_direct_tracking.cpp`
- 修改:
- `track_process_parameters_initial/modify` 校验 `3 <= track_start_point_num <= 9`,非法参数返回 `-1`
- 起批转可靠航迹前增加 `Track_to_start.empty()` 和每条航迹 `size() >= 3` 防御。
- 直接跟踪的 `tmp_track_to_trust_track` 也增加 `L >= 3` 保护。
### BUG-09
- 文件:`tas_ctrl.cpp`
- 修改:
- `tas_ctrl_process` 开始时校验 `Trust_track_num_Output` 非空并清零。
- `tas_target_add` 写入输出数组前检查 `*Trust_track_num_Output < MAX_TRACK_NUM`
### BUG-10
- 文件:`track_index_mangement.cpp`
- 修改:写入 `List[]` 前校验 `Track_Index``[1, MAX_TRACK_INDEX]`
### BUG-11
- 文件:`track_asso_tas.cpp`
- 修改:`model_filter` 增加 `found_tas_track` 标记;找不到目标时直接返回,局部变量均初始化。
### BUG-12
- 文件:`tas_ctrl.cpp`
- 修改:`tas_beam_output` 初始化 `H_track/X_now/CPI_time`,找不到目标时 `open_flag=0` 并返回。
### BUG-14
- 文件:`track_index_mangement.h`
- 修改:`lastest_index` 声明时初始化为 `0`
### BUG-15
- 文件:`track_asso.cpp`
- 修改:TWS 关联中 `delta_T <= 0` 时从候选列表移除该无效配对并 `continue`,不再标记点迹已使用、不刷新航迹状态。
### BUG-16
- 文件:`track_asso_tas.cpp`
- 修改:TAS 关联点循环中 `delta_T <= 0` 时跳过该点。
### BUG-17
- 文件:`track_asso_tas.cpp`
- 修改:TAS 外推时 `delta_T <= 0` 直接跳过,避免航迹时间回退和负时间预测。
### BUG-19
- 文件:`kalman.cpp``data_process_class_dll.h`
- 修改:`Bind_speed``prt <= 0``freq <= 0` 返回安全非零值;接口注释改为“PRI 不允许为 0”。
### BUG-21
- 文件:`track_asso.cpp`
- 修改:近程门限中 `/1000``/100` 改为浮点除法,避免整数除零恒不成立;保留 `d*d` 比较方式(未修改 BUG-20)。
### BUG-22
- 文件:`kalman.cpp``dot_coh.cpp``dot_coh_tas.cpp`
- 修改:
- 新增 `wrapAnglePi()`EKF 各残差计算后对方位角分量做 `[-π,π]` 环绕。
- 点迹凝聚 `work_mode==0` 分支和 TAS 凝聚统一使用最小角度差 `delta_F`
### BUG-23
- 文件:`track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:
- IMM 交互中 `c[0..2]` 为 0/负时钳位到 `1e-12`
- 模型概率更新增加分母保护,分母异常时保持上一拍概率。
- 似然计算对 `det_S <= 0` 返回 0,避免 NaN。
### BUG-24
- 文件:`kalman.h``kalman.cpp``track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:
- `kalman_filter_EKF``S_filter``[2][2]` 改为 `[3][3]`
- 调用侧使用 `Matrix3f` 和 3x3 行列式,似然归一化改为 `1/sqrt(pow(2*PI,3)*detS)`
### BUG-26
- 文件:`track_asso.cpp``track_asso_tas.cpp``track_asso_direct_tracking.cpp`
- 修改:航向角改用 `atan2(X[4], X[1])` 并归一化到 `[0,2π)`
### BUG-27
- 文件:`track_asso_tas.cpp``track_asso_direct_tracking.cpp``track_init.cpp`
- 修改:计算 `asin` 前对 `height/range` 做定义域钳位,`range <= 0` 时按 0 处理。
### BUG-28
- 文件:`data_process.cpp``dot_coh.h/cpp``track_asso.h/cpp``track_asso_tas.h/cpp``track_init.h/cpp``tas_ctrl.h/cpp``track_index_mangement.h/cpp`
- 修改:
-`Dot_Coh``Track_Asso``Track_Asso_Tas``Track_Init``TAS_Ctrl``Track_Ind_Mangement` 增加 `reset()`
- `track_clear_all()` 调用上述 reset,并恢复 `last_beam_num = INT_MAX`
- 直接跟踪相关类也补充了 `reset()`
### BUG-30
- 文件:`data_process_class_dll.h`
- 修改:`work_mode` 注释由“0进程 1中程 3远程”改为“0进程 1中程 2远程”。
### BUG-31
- 文件:`data_process_class_dll.h``data_process.cpp``track_init_direct_tracking.cpp`
- 修改:在 `direct_tracking_process``tracking_point`、直接跟踪入口处注释明确“当前接口未启用,保留空实现”。
### BUG-32
- 文件:`dot_coh.cpp``dot_coh_tas.cpp`
- 修改:内层凝聚比较增加对 `i``Use_Flag` 的检查,已使用点不再参与凝聚。
### BUG-34
- 文件:`track_init.cpp``track_init_direct_tracking.cpp`
- 修改:`tmp_track_die` 先判断 `n <= 0`,空向量直接删除。
### BUG-35
- 文件:`track_index_mangement.cpp`
- 修改:两处回绕循环由 `i < MAX_TRACK_INDEX` 改为 `i <= MAX_TRACK_INDEX`,使 500 号可复用。
### BUG-37
- 文件:`track_init.cpp``track_init_direct_tracking.cpp`
- 修改:`Temp_track``Trust_Track` 局部变量改为 `= {}` 值初始化,避免未初始化字段。
---
## 编译与运行验证
使用 **MSVC 2013 (Visual Studio 12) x86** 实际编译:
| 配置 | 结果 |
|---|---|
| X256_PS Release | ✅ 编译链接通过 |
| X256_MS Release | ✅ 编译链接通过 |
| X256_PS Debug | ✅ 编译链接通过 |
| MSVC `/W4` Release | ✅ 编译通过,未再出现 C4700/C4701 未初始化变量告警 |
另编写临时宿主程序验证 DLL
- 初始化 `RadarPara`,调用 `track_process_parameters_initial` 成功。
- 调用 `track_process`,返回 `1`,输出计数正常。
- 工厂创建/销毁流程正常。
> 说明:当前构建仍会输出原有代码的 C4244 转换告警、C4018 有符号/无符号比较告警、C4819 编码告警,均非本次修复引入,不影响链接和运行。