更新:1、调整构建脚本,去除扫描模式配置项;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# 雷达数据处理 DLL(data_process_class_dll)
|
||||
|
||||
> X256 雷达数据处理动态链接库:将雷达输出的原始点迹(TWS/TAS)处理为稳定可靠的目标航迹,并给出 TAS 跟踪波束控制指令。
|
||||
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.8**;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143,C++17,x64 目标)。
|
||||
> 仓库 simianzhen256-v1.5.5-ms-vscode(目录名沿用旧版本,当前代码版本为 **V1.5.9**;已由 Qt/qmake 工程迁移为 VS Code + CMake 工程,编译器为 MSVC 2022 / v143,C++17,x64 目标)。
|
||||
>
|
||||
> 版本号由 `parameters.h` 的 `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1.5.8)与体制后缀拼装为 `VERSION_STRING`(相扫 `V1.5.8.PS` / 机扫 `V1.5.8.MS`),实例创建后可从 `Data_Process_Factory::GetB()` 返回对象的公开成员 `version_info`(`const char*`)读取。
|
||||
> 版本号由 `parameters.h` 的 `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION`(当前 1.5.9)与 `VERSION_INFO`(`"GENERIC"`——机扫/相扫版本已合并为同一份 DLL,无体制后缀)拼装为 `VERSION_STRING`(`V1.5.9.GENERIC`),实例创建后可从 `Data_Process_Factory::GetB()` 返回对象的公开成员 `version_info`(`const char*`)读取。
|
||||
>
|
||||
> **工作参数来源(参数配置方式改造后)**:全部雷达工作参数由宿主调用 `parameters_reload(配置文件路径)` 从 **TOML 配置文件**加载到内部 `RDP_parameter`,不再由宿主下发 `struct RadarPara`、也不再由 `parameters.h` 编译期宏配置(见 10)。
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
## 1. 项目简介
|
||||
|
||||
本仓库是一个 **Windows 动态链接库**,实现某型雷达(内部代号 X256,按扫描体制分为 **相扫 X256_PS** 与 **机扫 X256_MS** 两种构建)的 **航迹数据处理** 功能,包括:
|
||||
本仓库是一个 **Windows 动态链接库**,实现某型雷达(内部代号 X256;机扫、相扫两个版本已合并为同一份 DLL,扫描模式由运行期配置项 `[radar_params] scan_mode` 选择,构建不再区分体制)的 **航迹数据处理** 功能,包括:
|
||||
|
||||
- 输入点迹预处理与点迹凝聚(滑窗凝聚)
|
||||
- 边扫描边跟踪(TWS)与边跟踪边扫描(TAS)双通道处理
|
||||
@@ -51,7 +51,7 @@
|
||||
| 点迹类型 | point_type = 0 为 TWS,point_type = 1 为 TAS |
|
||||
| 跟踪模式 | Track_Mode = 0 为 TWS,Track_Mode = 1 为 TAS |
|
||||
| 参数来源 | TOML 配置文件(`config/config_tmp.toml` 为样例)→ 内部 `struct RDP_parameter`,宿主通过 `parameters_reload()` 加载;参数对照见 10 |
|
||||
| 判圈模式 | 由配置项 `[radar_params] scan_mode` 运行时选择:0 相扫(波位号 ≤ 上一帧判满圈)/ 1 机扫(波位号 == 0 判满圈),与构建体制解耦(见 4.2、7.2) |
|
||||
| 判圈模式 | 由配置项 `[radar_params] scan_mode` 运行时选择:0 相扫(波位号 ≤ 上一帧判满圈)/ 1 机扫(波位号 == 0 判满圈);机扫/相扫已合并为同一份构建,不再有编译期体制(见 4.2、7.2) |
|
||||
|
||||
---
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
- **航迹生命周期管理**:外推轮数计数、超时消亡与质量消亡(普通 TWS 航迹)、手动删除、全清空(含各模块 reset,防重连后幽灵航迹)。
|
||||
- **防御性加固**:见 archived_docs/BUG_FIX_REPORT.md——越界防护、时间戳正序校验、方位角 ±π 环绕、asin 定义域钳位、IMM 概率奇异保护等已修复项。
|
||||
- **日志文件输出**:`RDP_LOG_ENABLE` 定义时,首次 `Data_Process_Factory::GetB()` 自动用 `rdbuf()` 将 `std::cout` 重定向到 `RDP_LOG_DIR`(`.\rdp_logs\`)下按日期+时间命名的日志文件,`Destroy()` 时恢复控制台并关闭文件;`RDP_LOG` 日志宏在每条日志前附加 `[时间戳][文件:行号]`。该宏在 `parameters.h` 中**当前为注释状态(默认不启用)**,即默认不做重定向、日志输出到控制台(见 10.4)。
|
||||
- **版本号输出**:`parameters.h` 的 `MAJOR_VERSION`/`MINOR_VERSION`/`PATCH_VERSION`(当前 1.5.8)经两级 `STRINGIFY` 宏拼成 `VERSION_STRING`(`V1.5.8.PS` / `V1.5.8.MS`);`Data_process_class_dll` 基类公开成员 `const char* version_info` 由 `Data_Process_Factory::GetB()` 在创建实例时赋值,宿主可直接读取以核对/上报 DLL 版本(b227ae1)。
|
||||
- **版本号输出**:`parameters.h` 的 `MAJOR_VERSION`/`MINOR_VERSION`/`PATCH_VERSION`(当前 1.5.9)经两级 `STRINGIFY` 宏拼成 `VERSION_STRING`(`V1.5.9.GENERIC`,机扫/相扫共用同一版本、无 PS/MS 后缀);`Data_process_class_dll` 基类公开成员 `const char* version_info` 由 `Data_Process_Factory::GetB()` 在创建实例时赋值,宿主可直接读取以核对/上报 DLL 版本(b227ae1)。
|
||||
- **数据记录调试功能(可选编译、异步批量写入)**:`rdp_record` 模块把结构体按「一个记录实体一张表」写入 SQLite(一次运行一个 db 文件、多张表),结构体到表的映射由内置的 ormpp(`third_party/ormpp`,含 iguana、frozen 与 SQLite 3.49.1 amalgamation)完成;由 CMake 选项 `RDP_DATA_RECORD`(`AUTO`/`ON`/`OFF`)控制,**AUTO 时 Debug 构建启用、Release(交付)构建完全不编译**——记录模块源码不参与编译、记录宏(6 个异步入队宏与遗留 `RDP_RECORD`/`RDP_RECORD_BATCH`)展开为 `((void)0)`(实参不求值),DLL 不新增依赖与导出符号、无性能损失。**V1.5.8 优化后的运行模型**:`GetB()` 建目录、开库(`.\rdp_records\rdp_record_YYYYMMDD_HHMMSS.db`)并启动独立**写线程**;12 个记录点只做「帧/圈内收集源结构体 → 一次入队」(收集代码均在 `#ifdef RDP_RECORD_ENABLE` 内),实体构造(数组转文本)与 SQLite **批量事务**全部在写线程完成;入队队列**有界**(默认 64 MB / 4096 批,满则整批丢弃并计入 `stats().dropped_rows`,不阻塞处理线程),写线程按 4096 行或等待 50 ms 凑批提交,SQLite 使用 WAL + `synchronous=OFF` + 8 MB 缓存,建表后去掉 `AUTOINCREMENT`;`Destroy()` 时停止入队、排空、`wal_checkpoint(TRUNCATE)`、关库并打印统计,支持 `Destroy()`→`GetB()` 重连重新建库(同秒文件名冲突追加 `_1`/`_2` 后缀)。当前内置 **6 个记录实体定义、6 张在用表**(输入点迹、TWS/TAS 凝聚后点迹、临时航迹、可靠航迹、点航关联信息),**可靠航迹与关联信息两通道均覆盖 TWS 与 TAS**(TAS 侧由 5cb67cc 补齐,关联信息以 `tas_flag` 区分来源),临时航迹与可靠航迹表还记录**航迹质量**(1ffb287:`RdpRecTempTrack.quality`、`RdpRecTrustTrack.Quality` 及 `Unupdated_time`/`Point_sum`/`Valid_point_sum`),并新增 `point_id`/`frame_id`/`circle_id`/`temp_track_id`/`track_id` 等关联标识,可把一次处理的点迹→凝聚→临时航迹→可靠航迹→关联信息串成完整链路;新增记录数据按「加记录实体 + 注册 + 加异步入队接口/宏 + 写线程分支 + 业务侧收集调用」四步进行,详见 docs/data_record_debug.md(见 4.3、10.4、11.3)。
|
||||
|
||||
---
|
||||
@@ -80,7 +80,7 @@
|
||||
|
||||
```text
|
||||
.
|
||||
├── CMakeLists.txt # CMake 构建脚本(扫描模式切换、导出宏、输出目录)
|
||||
├── CMakeLists.txt # CMake 构建脚本(构建类型/记录模式、导出宏、输出目录)
|
||||
├── CHANGELOG.md # 变更日志(Keep a Changelog 格式,按 git 提交记录维护)
|
||||
├── README.md # 本文件:项目说明(架构、接口、流程、算法、参数)
|
||||
├── requirements.md # 需求说明:雷达参数配置方式改造(TOML 配置文件 → RDP_parameter、parameters_reload 接口)
|
||||
@@ -95,17 +95,17 @@
|
||||
│ └── data_record_debug.md # 数据记录调试功能说明(开关与构建、异步运行期行为与队列/批事务参数、表结构约定、新增记录点四步配方、6 张在用记录表清单与字段、查询示例、已知限制与验证参考)
|
||||
├── design_docs/ # 设计与讨论资料留档(被 .gitignore 忽略、不入库;含设计讨论、产品介绍与 README/流程报告的导出、渲染版本)
|
||||
├── .vscode/ # VS Code 工程配置
|
||||
│ ├── settings.json # cmake.generator=NMake、MSVC2022 x64 环境变量、构建目录=变体推导、compile_commands
|
||||
│ ├── cmake-variants.yaml # X256_PS / X256_MS × Release / Debug × REC_AUTO / REC_OFF / REC_ON 变体
|
||||
│ ├── tasks.json # 仅 5 个任务:清理全部 + 4 种组合的「配置并构建全部」(原有任务已删除)
|
||||
│ ├── settings.json # cmake.generator=NMake、MSVC2022 x64 环境变量、构建目录=build/<构建类型>/<记录模式>、compile_commands
|
||||
│ ├── cmake-variants.yaml # Release / Debug × REC_AUTO / REC_OFF / REC_ON 变体(机扫/相扫已合并,无体制维度)
|
||||
│ ├── tasks.json # 仅 5 个任务:清理全部 + 4 种组合的「配置并构建」(原有任务已删除)
|
||||
│ └── scripts/ # 构建脚本(纯 ASCII,避免 cmd 代码页问题)
|
||||
│ ├── msvc_env.bat # 共享环境设置:定位 VS2022/cl.exe 并调用 vcvarsall.bat(x64)
|
||||
│ ├── config_paths.bat # 按「扫描体制/构建类型/记录模式」推导构建目录并校验参数
|
||||
│ ├── config_paths.bat # 按「构建类型/记录模式」推导构建目录并校验参数
|
||||
│ ├── configure.bat # 单配置 CMake 配置(含旧工具集构建树自动清理)
|
||||
│ ├── build.bat # 单配置 CMake 构建
|
||||
│ ├── clean.bat # 单配置清理(删除该配置的构建目录)
|
||||
│ ├── build_all.bat # 两种扫描体制依次「配置 + 构建」(4 个构建任务调用)
|
||||
│ └── clean_all.bat # 清理全部配置的构建输出(「清理全部」任务调用)
|
||||
│ ├── build_config.bat # 单配置「配置 + 构建」(4 个构建任务调用)
|
||||
│ └── clean_all.bat # 清理全部配置的构建输出(含旧版 X256_PS/X256_MS 目录)
|
||||
├── backup/
|
||||
│ └── data_process_class_dll/
|
||||
│ ├── data_process_class_dll.pro # 迁移前的 Qt/qmake 工程文件(备份)
|
||||
@@ -124,7 +124,7 @@
|
||||
│ ├── rdp_parameter_loader.h / .cpp # TOML 参数加载器(内部模块,不属于宿主接口):rdp_parameter_load() 严格校验 11 个配置段并写入 RDP_parameter,失败返回 -1 且不改变入参
|
||||
│ ├── data_process.h / .cpp # Data_Process 实现:接口分发、TWS/TAS 主流程、参数加载(parameters_reload)、清空/删除/转跟踪;含 point_id/frame_id/circle_id 自增计数(记录用)
|
||||
│ ├── struct.h # 内部结构体:PointRecv / Trust_Track / Temp_track / Asso_Info / Tracking_Target / RDP_parameter(工作参数,与 TOML 配置一一对应)
|
||||
│ ├── parameters.h # 编译期常量:PI、版本宏、RDP_LOG_*、RDP_RECORD_*、MAX_TRACK_NUM、RDP_TAS_QUEUE_CAPACITY、Round(不再含雷达工作参数宏;扫描体制宏由 CMake 传入,仅用于版本后缀/构建标识)
|
||||
│ ├── parameters.h # 编译期常量:PI、版本宏、RDP_LOG_*、RDP_RECORD_*、MAX_TRACK_NUM、RDP_TAS_QUEUE_CAPACITY、Round(不再含雷达工作参数宏;机扫/相扫合并后构建不再定义体制宏,版本串为 V1.5.9.GENERIC)
|
||||
│ ├── dot_coh.h / .cpp # TWS 点迹凝聚(含两帧滑窗缓冲)
|
||||
│ ├── dot_coh_tas.h / .cpp # TAS 点迹凝聚
|
||||
│ ├── coor_trans.h / .cpp # 极坐标 ↔ 直角坐标转换
|
||||
@@ -140,10 +140,8 @@
|
||||
│ ├── track_index_mangement.h / .cpp # 航迹号 1~500 分配/复用
|
||||
│ └── Eigen/ # 内置 Eigen 3 头文件库(仅用 Eigen/Dense)
|
||||
├── build/ # 构建产物(被 .gitignore 忽略)
|
||||
│ ├── X256_PS/ # 相扫构建根目录(每个完整配置一个子目录)
|
||||
│ │ ├── Debug/ # Debug 配置根:REC_AUTO / REC_OFF / REC_ON
|
||||
│ │ └── Release/ # Release 配置根:REC_AUTO / REC_OFF / REC_ON
|
||||
│ ├── X256_MS/ # 机扫构建根目录(结构同 X256_PS)
|
||||
│ ├── Debug/ # Debug 构建根目录:REC_AUTO / REC_OFF / REC_ON
|
||||
│ ├── Release/ # Release 构建根目录:REC_AUTO / REC_OFF / REC_ON
|
||||
│ └── output/ # 早期打包导出(其中 data_process_class_dll.h 为旧版 32 位时间戳接口,勿作为当前 API 依据)
|
||||
├── rdp_logs/ # 日志输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略)
|
||||
├── rdp_records/ # 数据记录库输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略;仅记录功能启用时产生)
|
||||
@@ -167,43 +165,41 @@
|
||||
| 参数配置 | 无需安装——配置文件为 TOML 格式,解析器 toml++ v3.4.0 已内置在 `third_party/toml/toml.hpp`(仅头文件);样例见 `config/config_tmp.toml`(见 10) |
|
||||
| 数据记录(可选调试功能) | 无需安装——ormpp / iguana / frozen / SQLite amalgamation 已内置在 `third_party/ormpp`(版本与升级方式见该目录 UPSTREAM.md);启用时记录模块以 C++20 独立编译,所需的 C 编译器由同一 VS 2022 工具集提供 |
|
||||
|
||||
### 4.2 扫描体制
|
||||
### 4.2 扫描模式(运行期配置)
|
||||
|
||||
通过 CMake 缓存变量 RADAR_SCAN_MODE 切换构建体制,`CMakeLists.txt` 以 `target_compile_definitions` 定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 宏。该体制现在**只决定**:① `parameters.h` 的 `VERSION_INFO`(`V1.5.8.PS` / `V1.5.8.MS` 版本后缀)与 `#pragma message`;② 构建目录与 VS Code 任务命名(`X256_PS` / `X256_MS`)。**TWS 判圈行为不再由构建体制决定**,而由参数配置项 `[radar_params] scan_mode` 在运行时选择(0 相扫 / 1 机扫,见 7.2);参数统一由配置文件提供(见 10)。
|
||||
机扫与相扫版本已合并为**同一份 DLL**:构建不再有扫描体制维度(`CMakeLists.txt` 不再有 `RADAR_SCAN_MODE` 缓存变量,也不再定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 编译宏;`parameters.h` 的 `VERSION_INFO` 固定为 `"GENERIC"`,版本串为 `V1.5.9.GENERIC`)。扫描模式改由运行期配置项 `[radar_params] scan_mode` 决定(0 相扫 / 1 机扫),随全部工作参数由 TOML 配置文件经 `parameters_reload()` 载入(见 10);同一份 DLL 加载不同配置即可分别用于相扫 / 机扫部署,TWS 判圈行为随之切换(见 7.2)。
|
||||
|
||||
> ⚠ **部署一致性要求**:DLL 不校验 `scan_mode` 与构建体制是否一致。若不一致,`version_info` 版本串反映的是构建体制、而实际判圈行为反映配置(不报错)。**机扫部署应同时使用机扫构建(`MECHANICAL_SCANNING`)与 `scan_mode = 1` 的配置**,并把这 4 项按机扫取值配置:`extrapolate_max_tas=48`、`height_smooth_win=3`、`track_die_round_tas=96`、`tas_track_num_max=1`(样例 `config/config_tmp.toml` 为相扫取值)。
|
||||
> **部署一致性提示**:DLL 不校验配置项 `scan_mode` 与实际雷达体制 / 波位号序列是否一致(不报错)。机扫部署须把 `scan_mode` 配为 1,并把 4 项体制相关参数按机扫取值:`extrapolate_max_tas=48`、`height_smooth_win=3`、`track_die_round_tas=96`、`tas_track_num_max=1`(样例 `config/config_tmp.toml` 为相扫取值,见 10.1)。判圈要求:相扫每圈波位号先增后回到起点、机扫每圈均出现 0。
|
||||
|
||||
每个「扫描体制 × 构建类型 × 记录模式」组合拥有独立构建目录(见 4.3):
|
||||
构建只按「构建类型 × 记录模式」划分目录(见 4.3):
|
||||
|
||||
| 变量值 | 对应宏 | 构建目录 |
|
||||
| 维度 | 取值 | 构建目录 |
|
||||
|---|---|---|
|
||||
| PHASE_SCANNING | 相扫(X256_PS,默认) | build/X256_PS/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON> |
|
||||
| MECHANICAL_SCANNING | 机扫(X256_MS) | build/X256_MS/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON> |
|
||||
| 构建类型 | Debug / Release | build/<Debug\|Release>/… |
|
||||
| 记录模式 | REC_AUTO / REC_OFF / REC_ON | …/<REC_AUTO\|REC_OFF\|REC_ON> |
|
||||
|
||||
### 4.3 命令行构建
|
||||
|
||||
构建目录由「扫描体制 + 构建类型 + 记录模式」三元组唯一确定,构建脚本、VS Code 任务与 CMake Tools 变体使用同一布局:
|
||||
构建目录由「构建类型 + 记录模式」唯一确定(机扫/相扫已合并为同一版本,无扫描体制维度),构建脚本、VS Code 任务与 CMake Tools 变体使用同一布局:
|
||||
|
||||
```text
|
||||
build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>
|
||||
build/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>
|
||||
```
|
||||
|
||||
```bat
|
||||
:: 单配置操作(参数:<PHASE_SCANNING|MECHANICAL_SCANNING> <Debug|Release> [AUTO|ON|OFF])
|
||||
:: 构建目录自动推导,例如 build/X256_PS/Release/REC_OFF
|
||||
.vscode\scripts\configure.bat PHASE_SCANNING Release OFF
|
||||
.vscode\scripts\build.bat PHASE_SCANNING Release OFF
|
||||
.vscode\scripts\clean.bat PHASE_SCANNING Release OFF
|
||||
:: 扫描体制也接受 X256_PS / X256_MS 别名;记录模式缺省为 AUTO
|
||||
.vscode\scripts\configure.bat X256_MS Debug
|
||||
:: 单配置操作(参数:<Debug|Release> [AUTO|ON|OFF],记录模式缺省 AUTO)
|
||||
:: 构建目录自动推导,例如 build/Release/REC_OFF
|
||||
.vscode\scripts\configure.bat Release OFF
|
||||
.vscode\scripts\build.bat Release OFF
|
||||
.vscode\scripts\clean.bat Release OFF
|
||||
```
|
||||
|
||||
```bat
|
||||
:: 一次配置并构建两个扫描体制(VS Code 任务「配置并构建全部(...)」的内部实现)
|
||||
.vscode\scripts\build_all.bat Release OFF
|
||||
.vscode\scripts\build_all.bat Release ON
|
||||
.vscode\scripts\build_all.bat Debug OFF
|
||||
.vscode\scripts\build_all.bat Debug ON
|
||||
:: 配置并构建单个配置(VS Code 任务「配置并构建(...)」的内部实现)
|
||||
.vscode\scripts\build_config.bat Release OFF
|
||||
.vscode\scripts\build_config.bat Release ON
|
||||
.vscode\scripts\build_config.bat Debug OFF
|
||||
.vscode\scripts\build_config.bat Debug ON
|
||||
:: 清理全部配置的构建输出(VS Code 任务「清理全部」的内部实现)
|
||||
.vscode\scripts\clean_all.bat
|
||||
```
|
||||
@@ -214,35 +210,35 @@ build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>
|
||||
|
||||
记录功能的性能参数集中在 `parameters.h` 的「数据记录性能参数」段(均以 `#ifndef` 保护,便于用 `/DRDP_RECORD_...` 编译选项临时覆盖做压测):入队队列上限 `RDP_RECORD_QUEUE_CAP_BYTES`(默认 64 MB)与 `RDP_RECORD_QUEUE_MAX_BATCHES`(默认 4096 批)、写线程批提交 `RDP_RECORD_WRITE_BATCH_ROWS`(默认 4096 行)/ `RDP_RECORD_WRITE_MAX_WAIT_MS`(默认 50 ms)、关联信息分块 `RDP_RECORD_ASSO_CHUNK_ROWS`(默认 131072 行)、SQLite 缓存/忙等待/WAL 开关(`RDP_RECORD_SQLITE_CACHE_KB`=8192、`RDP_RECORD_SQLITE_BUSY_TIMEOUT_MS`=2000、`RDP_RECORD_SQLITE_WAL`=1)、连续错误熔断阈值 `RDP_RECORD_MAX_CONSECUTIVE_ERRORS`(默认 10)与丢弃日志限频 `RDP_RECORD_DROP_LOG_INTERVAL`(默认 1024 行);默认值、语义与运行统计(`rdp_record::Stats`/`stats()`)见 10.4 与 docs/data_record_debug.md 第 3 节。
|
||||
|
||||
VS Code 任务(`.vscode/tasks.json`)只保留以下 5 个(原有任务已全部删除),可在「终端 → 运行任务」中选择,或按 `Ctrl+Shift+B` 运行默认构建任务「配置并构建全部(Release/REC_OFF)」:
|
||||
VS Code 任务(`.vscode/tasks.json`)只保留以下 5 个(原有任务已全部删除),可在「终端 → 运行任务」中选择,或按 `Ctrl+Shift+B` 运行默认构建任务「配置并构建(Release/REC_OFF)」:
|
||||
|
||||
| 任务 | 配置 |
|
||||
|---|---|
|
||||
| 清理全部 | 删除 `build/X256_PS`、`build/X256_MS` 下所有配置的构建输出(`build/output` 留档不动) |
|
||||
| 配置并构建全部(Release/REC_OFF) | Release + `RDP_DATA_RECORD=OFF`,分别构建 PHASE_SCANNING(X256_PS)与 MECHANICAL_SCANNING(X256_MS) |
|
||||
| 配置并构建全部(Release/REC_ON) | Release + `RDP_DATA_RECORD=ON`,两个扫描体制同上 |
|
||||
| 配置并构建全部(Debug/REC_OFF) | Debug + `RDP_DATA_RECORD=OFF`,两个扫描体制同上 |
|
||||
| 配置并构建全部(Debug/REC_ON) | Debug + `RDP_DATA_RECORD=ON`,两个扫描体制同上 |
|
||||
| 清理全部 | 删除 `build/Debug`、`build/Release` 下所有配置的构建输出,并删除旧版 `build/X256_PS`、`build/X256_MS` 目录(`build/output` 留档不动) |
|
||||
| 配置并构建(Release/REC_OFF) | Release + `RDP_DATA_RECORD=OFF`,单次配置并构建 |
|
||||
| 配置并构建(Release/REC_ON) | Release + `RDP_DATA_RECORD=ON`,单次配置并构建 |
|
||||
| 配置并构建(Debug/REC_OFF) | Debug + `RDP_DATA_RECORD=OFF`,单次配置并构建 |
|
||||
| 配置并构建(Debug/REC_ON) | Debug + `RDP_DATA_RECORD=ON`,单次配置并构建 |
|
||||
|
||||
> 注意:`clean_all.bat` / `clean.bat` 会**整体删除**对应的配置目录(不再只做 `cmake --build --target clean`),因此自行放置到 `build/<X256_XX>/<Debug|Release>/<REC_*>/bin/` 的 rdp_playback.exe、Qt5Core.dll、sqlite3.dll 与回放数据也会被删除,清理后需重新放置——这类手工工具与样例数据建议放在 `build/output/` 或仓库之外。`settings.json`、`c_cpp_properties.json` 的默认 `compileCommands` 指向 `build/X256_PS|MS/Debug/REC_ON/compile_commands.json`(便于 IntelliSense 覆盖记录模块代码);未构建该配置时 C/C++ 插件回退到内置 `includePath`/`defines`。
|
||||
> 注意:`clean_all.bat` / `clean.bat` 会**整体删除**对应的配置目录(不再只做 `cmake --build --target clean`),因此自行放置到 `build/<Debug|Release>/<REC_*>/bin/` 的 rdp_playback.exe、Qt5Core.dll、sqlite3.dll 与回放数据也会被删除,清理后需重新放置——这类手工工具与样例数据建议放在 `build/output/` 或仓库之外。`settings.json`、`c_cpp_properties.json` 的默认 `compileCommands` 指向 `build/Debug/REC_ON/compile_commands.json`(便于 IntelliSense 覆盖记录模块代码);未构建该配置时 C/C++ 插件回退到内置 `includePath`/`defines`。
|
||||
>
|
||||
> 若此前用 CMake Tools 选择过变体(旧版本的变体键名为 `ps`/`ms`),升级后请重新执行一次「CMake: Select Variant」——旧的变体选择会持久化在 workspaceStorage 中,重命名键后需要重新选择才能得到 `build/X256_PS/Release/REC_OFF` 这类与任务一致的目录。
|
||||
> 若此前用 CMake Tools 选择过变体(旧版本曾含 `scanMode` 变体、键名为 `ps`/`ms`/`X256_PS`/`X256_MS`),升级后请重新执行一次「CMake: Select Variant」——旧的变体选择会持久化在 workspaceStorage 中,移除扫描体制变体后需要重新选择,构建目录才会落到 `build/<Debug|Release>/<REC_*>`。
|
||||
|
||||
### 4.4 产物
|
||||
|
||||
| 产物 | 位置 |
|
||||
|---|---|
|
||||
| data_process_class_dll.dll(+ .pdb) | build/<X256_XX>/<Debug\|Release>/<REC_*>/bin/ |
|
||||
| 导入库 data_process_class_dll.lib | build/<X256_XX>/<Debug\|Release>/<REC_*>/lib/ |
|
||||
| data_process_class_dll.dll(+ .pdb) | build/<Debug\|Release>/<REC_*>/bin/ |
|
||||
| 导入库 data_process_class_dll.lib | build/<Debug\|Release>/<REC_*>/lib/ |
|
||||
| 安装(cmake --install) | DLL/导入库 → bin、lib,公开头文件 → include |
|
||||
| compile_commands.json | 各配置的构建目录根(供 VS Code IntelliSense 使用) |
|
||||
| rdp_record.lib(仅记录功能启用时) | build/<X256_XX>/<Debug\|Release>/<REC_*>/lib/(仅 `REC_ON`,或 Debug 下的 `REC_AUTO` 才生成)—— 记录模块静态库(含 SQLite),已链接进 DLL,**无需随 DLL 分发** |
|
||||
| rdp_record.lib(仅记录功能启用时) | build/<Debug\|Release>/<REC_*>/lib/(仅 `REC_ON`,或 Debug 下的 `REC_AUTO` 才生成)—— 记录模块静态库(含 SQLite),已链接进 DLL,**无需随 DLL 分发** |
|
||||
|
||||
产物为 **x64(AMD64)** 目标。宿主程序必须是 64 位、且使用与本 DLL 同一版本头文件重新编译——MSVC 2013 → MSVC 2022 同时伴随 x86 → x64 的 ABI 变化,旧的 32 位宿主无法加载该 DLL。
|
||||
|
||||
> **本次参数配置改造后的体积/导出变化**:Release REC_OFF 的 `data_process_class_dll.dll` 为 331,776 字节(约 324 KB),较改造前约 178 KB 增大——原因是纯头文件的 toml++ 解析器随 `rdp_parameter_loader.cpp` 编入 DLL(Debug REC_ON 为 4,694,016 字节)。导出表(Release REC_OFF 共 31 个导出)新增 `parameters_reload`(`?parameters_reload@Data_process_class_dll@@UEAAHPEBD@Z`),`track_process_parameters_initial`/`track_process_parameters_modify` 与 `RadarPara` 相关符号已不存在,`Data_Process_Factory::GetB`/`Destroy` 等其余接口不变。
|
||||
> **本次参数配置改造后的体积/导出变化**:Release REC_OFF 的 `data_process_class_dll.dll` 为 331,776 字节(约 324 KB),较改造前约 178 KB 增大——原因是纯头文件的 toml++ 解析器随 `rdp_parameter_loader.cpp` 编入 DLL。机扫/相扫合并后的四种构建(0 warning、0 error):Release REC_OFF 331,776 字节、Release REC_ON 1,653,248 字节、Debug REC_OFF 1,718,272 字节、Debug REC_ON 4,694,528 字节。导出表(Release REC_OFF 共 31 个导出)新增 `parameters_reload`(`?parameters_reload@Data_process_class_dll@@UEAAHPEBD@Z`),`track_process_parameters_initial`/`track_process_parameters_modify` 与 `RadarPara` 相关符号已不存在,`Data_Process_Factory::GetB`/`Destroy` 等其余接口不变。
|
||||
|
||||
仓库 `build/X256_PS/<Debug|Release>/<REC_*>/bin/` 内原附带 **rdp_playback.exe**(回放测试工具,依赖 Qt5Core.dll、sqlite3.dll,配置样例 RadarConfigParam.ini,可回放 .db 记录的点迹数据验证 DLL 输出),该工具不在本仓库源码范围内、当前构建目录中亦不存在,需自行放置;由于 DLL 已改为 x64,配套的 rdp_playback.exe 必须是 **x64 版本**(同时其自带 Qt5Core.dll / sqlite3.dll 也需为 x64),32 位版本无法加载新版 DLL。
|
||||
仓库 `build/<Debug|Release>/<REC_*>/bin/` 内原附带 **rdp_playback.exe**(回放测试工具,依赖 Qt5Core.dll、sqlite3.dll,配置样例 RadarConfigParam.ini,可回放 .db 记录的点迹数据验证 DLL 输出),该工具不在本仓库源码范围内、当前构建目录中亦不存在,需自行放置;由于 DLL 已改为 x64,配套的 rdp_playback.exe 必须是 **x64 版本**(同时其自带 Qt5Core.dll / sqlite3.dll 也需为 x64),32 位版本无法加载新版 DLL。
|
||||
|
||||
### 4.5 编译警告处理
|
||||
|
||||
@@ -250,9 +246,9 @@ VS Code 任务(`.vscode/tasks.json`)只保留以下 5 个(原有任务已
|
||||
- `CMakeLists.txt` 显式指定 `/W3`:CMake 3.15(策略 CMP0092)起不再把 `/W3` 放进 `CMAKE_CXX_FLAGS`,本工程此前一直以 `/W3` 构建,故显式恢复以保持警告级别不变。
|
||||
- 修复了 `/W3` 下全部 C4819(源文件字符集)、C4018(signed/unsigned 不匹配)、C4244(类型转换可能丢失数据)警告:循环变量按需改为 `size_t`,窄化转换改为 `static_cast` 显式转换,不改变原有计算逻辑。
|
||||
- MSVC 2022 在 `/W3` 下新增报出的 C4267(`size_t` → `int` 窄化)共 17 处已按同一约定修复(`track_asso.cpp`、`track_asso_tas.cpp`、`track_init.cpp`、`track_init_direct_tracking.cpp`、`tas_ctrl.cpp` 中改为 `static_cast<int>(...)`),同样不改变计算逻辑。
|
||||
- 当前 8 种显式配置(X256_PS / X256_MS × Release / Debug × REC_OFF / REC_ON)均以 **0 warning、0 error** 通过编译(REC_AUTO 与「Debug=ON / Release=OFF」等价,未重复单独验证)。
|
||||
- 当前 4 种显式配置(Release / Debug × REC_OFF / REC_ON)均以 **0 warning、0 error** 通过编译(机扫/相扫已合并为同一份构建,不再有 PS/MS 维度;REC_AUTO 与「Debug=ON / Release=OFF」等价,未重复单独验证)。
|
||||
- cl.exe 的诊断信息为中文(跟随 VS 安装语言,`VSLANG=1033` 对 VS2022 的 cl.exe 无效),构建日志中偶见 `注意: 包含文件:` 行泄漏,属 CMake 依赖扫描的显示噪声,头文件依赖(`CMakeFiles/*.dir/**/*.obj.d`)记录完整,不影响增量编译。
|
||||
- **第三方库告警例外(仅记录功能启用时)**:数据记录模块的第三方依赖按上游原样内置在 `third_party/ormpp`(保留上游字节,含换行符,不转 BOM/编码),其中 `third_party/ormpp/thirdparty/sqlite3/sqlite3.c` 以源文件级 `/w` 单独编译,`data_process_class_dll/rdp_record.cpp` 用 `#pragma warning(push, 0)` / `(pop)` 包裹第三方头;参数加载器使用的 toml++ 单头文件(`third_party/toml/toml.hpp`)同样在 `rdp_parameter_loader.cpp` 中以 `#pragma warning(push, 0)` / `(pop)` 包裹。除此之外本工程源码仍按上一条的 `/W3` 零告警标准编译(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON 八种配置实测 0 warning、0 error)。
|
||||
- **第三方库告警例外(仅记录功能启用时)**:数据记录模块的第三方依赖按上游原样内置在 `third_party/ormpp`(保留上游字节,含换行符,不转 BOM/编码),其中 `third_party/ormpp/thirdparty/sqlite3/sqlite3.c` 以源文件级 `/w` 单独编译,`data_process_class_dll/rdp_record.cpp` 用 `#pragma warning(push, 0)` / `(pop)` 包裹第三方头;参数加载器使用的 toml++ 单头文件(`third_party/toml/toml.hpp`)同样在 `rdp_parameter_loader.cpp` 中以 `#pragma warning(push, 0)` / `(pop)` 包裹。除此之外本工程源码仍按上一条的 `/W3` 零告警标准编译(Release/Debug × REC_OFF/REC_ON 四种配置实测 0 warning、0 error)。
|
||||
|
||||
### 4.6 编译器升级说明(MSVC 2013 → MSVC 2022)
|
||||
|
||||
@@ -399,7 +395,7 @@ classDiagram
|
||||
|---|---|---|
|
||||
| Data_Process_Factory::GetB() | 实例指针 | 获取单例(首次调用时创建,并写入 `version_info`) |
|
||||
| Data_Process_Factory::Destroy() | — | 销毁实例并将指针置空 |
|
||||
| version_info(基类公开成员) | `const char*` | DLL 版本字符串,由 `GetB()` 赋值为 `VERSION_STRING`(相扫 `V1.5.8.PS` / 机扫 `V1.5.8.MS`);只读使用,不要释放(b227ae1) |
|
||||
| version_info(基类公开成员) | `const char*` | DLL 版本字符串,由 `GetB()` 赋值为 `VERSION_STRING`(`V1.5.9.GENERIC`——机扫/相扫已合并,无体制后缀);只读使用,不要释放(b227ae1) |
|
||||
| parameters_reload(const char* path) | 0 成功 / -1 失败 | **加载全部工作参数**:解析 TOML 配置文件并校验,成功后整体替换内部 `RDP_parameter`;失败时当前参数保持不变并打印原因。建议 `GetB()` 后立即调用一次,重连/换配置时再次调用即可热重载(见 10.1) |
|
||||
| data_preprocess(DataRev[150]) | 0/1/2/3 | 输入一帧点迹并缓存,返回处理模式(见下表) |
|
||||
| track_process(Track[][10], &num, dieIdx[], &dieNum, model) | 1 | 按 data_preprocess 的返回值执行 TWS/TAS 处理 |
|
||||
@@ -428,7 +424,7 @@ classDiagram
|
||||
| 2 | **TWS 未满一圈,继续蓄数据** | point_type==0 且上述判圈条件不成立;调用 track_process(model=2) 做滑窗凝聚 |
|
||||
| 3 | **TAS 处理** | point_type==1;同时记录 TAS_track_idx 与最新时间戳 |
|
||||
|
||||
> **判圈由配置项 `scan_mode` 运行时选择**:`data_process.cpp` 不再使用 `#ifdef PHASE_SCANNING` 编译期分支,而是按 `rdp_parameter.scan_mode` 选择两条判据——`scan_mode==0`(相扫)走「波位号不变大(当前 ≤ 上一帧)即为新一圈」(`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**相扫首帧即返回 1**);`scan_mode==1`(机扫)走 7d5a56f 的「方位波位号 == 0」判据(机扫转台反转时波位号会变小但并未扫完一圈,用波位号比较会误判;此时 `last_beam_num` 仍被更新但不参与判断)。两种模式下 `last_beam_num` 每帧都会更新,仅判满圈时 `circle_id++` 并返回 1。因此同一份 DLL 的判圈行为取决于加载的配置而非构建体制,调用方需保证 `scan_mode` 与实际波位号序列/部署体制一致:相扫要求每圈波位号先增后回到起点、机扫要求每圈均出现 0。
|
||||
> **判圈由配置项 `scan_mode` 运行时选择**:`data_process.cpp` 不再使用 `#ifdef PHASE_SCANNING` 编译期分支,而是按 `rdp_parameter.scan_mode` 选择两条判据——`scan_mode==0`(相扫)走「波位号不变大(当前 ≤ 上一帧)即为新一圈」(`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**相扫首帧即返回 1**);`scan_mode==1`(机扫)走 7d5a56f 的「方位波位号 == 0」判据(机扫转台反转时波位号会变小但并未扫完一圈,用波位号比较会误判;此时 `last_beam_num` 仍被更新但不参与判断)。两种模式下 `last_beam_num` 每帧都会更新,仅判满圈时 `circle_id++` 并返回 1。因此同一份 DLL 的判圈行为只取决于加载的配置(构建已不区分扫描体制),调用方需保证 `scan_mode` 与实际波位号序列/部署体制一致:相扫要求每圈波位号先增后回到起点、机扫要求每圈均出现 0。
|
||||
|
||||
### 7.3 典型调用序列
|
||||
|
||||
@@ -1012,7 +1008,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
5. 屏蔽区:`*_num∈[0,30]`;4 个数组的元素个数必须**等于** `*_num`(`*_num=0` 时数组可省略,存在时必须为空数组);并逐区校验距离 `0≤min<max`、方位 `0≤min<max≤360`;
|
||||
6. 失败语义:返回 -1,并经可选 `std::string* error_msg` 给出**首条**可读原因(`Data_Process::parameters_reload` 会打印到 `RDP_LOG`),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
|
||||
|
||||
> 兼容性提示:改造前 `TRACK_DIE_ROUND_TAS`、`MAX_EXTRAPOLATE_NUM_TAS`、`H_F_WIN_LEN`、`TAS_QUEUE_LENGTH`/`MAX_TAS_NUM` 按扫描体制取不同宏值;现在同一份配置对所有体制生效。`config/config_tmp.toml` 是**相扫**取值(`scan_mode=0` + 下列 4 项相扫值),机扫部署需配为 `scan_mode=1`、`track_die_round_tas=96`、`extrapolate_max_tas=48`、`height_smooth_win=3`、`tas_track_num_max=1`(其余参数两体制相同)。**判圈逻辑由配置项 `scan_mode` 决定**(0 相扫 / 1 机扫,见 7.2),不再由编译期 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 区分;构建体制只决定版本后缀与构建目录/产物命名,两者应保持一致(见 4.2)。
|
||||
> 兼容性提示:改造前 `TRACK_DIE_ROUND_TAS`、`MAX_EXTRAPOLATE_NUM_TAS`、`H_F_WIN_LEN`、`TAS_QUEUE_LENGTH`/`MAX_TAS_NUM` 按扫描体制取不同宏值;现在同一份配置对所有体制生效。`config/config_tmp.toml` 是**相扫**取值(`scan_mode=0` + 下列 4 项相扫值),机扫部署需配为 `scan_mode=1`、`track_die_round_tas=96`、`extrapolate_max_tas=48`、`height_smooth_win=3`、`tas_track_num_max=1`(其余参数两体制相同)。**判圈逻辑由配置项 `scan_mode` 决定**(0 相扫 / 1 机扫,见 7.2);机扫/相扫已合并为同一份构建,不再有编译期体制或版本后缀(见 4.2)。
|
||||
|
||||
### 10.2 参数表(`RDP_parameter` 字段 ↔ TOML 键 ↔ 样例值)
|
||||
|
||||
@@ -1021,7 +1017,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| 配置段 | 键(=结构体字段) | 样例值 | 含义 / 影响 |
|
||||
|---|---|---|---|
|
||||
| radar_params | `radar_work_mode` | 0 | 工作模式:0 近程 / 1 中程 / 2 远程(当前影响凝聚是否带速度维约束;TWS 外推已改为固定 `data_rate_tws`、不再按模式三选一;原 `RadarPara.work_mode`) |
|
||||
| radar_params | `scan_mode` | 0 | **扫描模式:0 相扫 / 1 机扫**(加载器校验仅允许 0/1),决定 `data_preprocess()` 的 TWS 判圈逻辑(见 7.2);与构建体制解耦,部署时应与构建体制保持一致(见 4.2) |
|
||||
| radar_params | `scan_mode` | 0 | **扫描模式:0 相扫 / 1 机扫**(加载器校验仅允许 0/1),决定 `data_preprocess()` 的 TWS 判圈逻辑(见 7.2);构建不区分体制,同一份 DLL 通过该配置切换扫描模式(见 4.2) |
|
||||
| radar_params | `freq_0_GHz` | 9.2 | 载波频点(GHz,盲速计算基准;原 `FREQ0`) |
|
||||
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height`) |
|
||||
| radar_params | `radar_system_delay` | 0 | 系统延迟(s,输出位置按 `x + vx·delay` 补偿;原 `Sys_delay`) |
|
||||
@@ -1136,8 +1132,8 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| `MAX_TRACK_NUM` | 500 | 输出航迹数组 `Track[500][10]` 的固定容量(宿主接口维度) |
|
||||
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 跟踪队列容量上限;运行期配置项 `tas_track_num_max` 不得超过该值 |
|
||||
| `PI` | 3.1415926f | 圆周率常量 |
|
||||
| `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION` | 1 / 5 / 8 | 版本号(拼装为 `VERSION_STRING`,见 7.1) |
|
||||
| `VERSION_INFO` / `VERSION_STRING` | `PS`/`MS`、`V1.5.8.PS`/`V1.5.8.MS` | 扫描体制后缀与完整版本串(由 `GetB()` 写入 `version_info`) |
|
||||
| `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION` | 1 / 5 / 9 | 版本号(拼装为 `VERSION_STRING`,见 7.1) |
|
||||
| `VERSION_INFO` / `VERSION_STRING` | `"GENERIC"`、`V1.5.9.GENERIC` | 版本后缀(机扫/相扫已合并为同一版本,无体制后缀)与完整版本串(由 `GetB()` 写入 `version_info`) |
|
||||
| `Round(x)` | 宏 | 四舍五入取整(盲速折叠用) |
|
||||
| RDP_LOG_ENABLE | 注释停用(默认不启用) | 日志文件输出开关:定义时将 `std::cout` 重定向到日志文件;**当前源码中该宏为注释状态**(parameters.h 注释文字仍写「定义(默认)」,以代码实际状态为准),不重定向、日志输出到标准输出/控制台 |
|
||||
| RDP_LOG_DIR | `.\rdp_logs\` | 日志文件输出目录(相对宿主进程当前工作目录,目录不存在时自动创建) |
|
||||
@@ -1156,7 +1152,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| RDP_RECORD_DROP_LOG_INTERVAL | 1024 | 队列丢弃日志限频:每累计丢弃该行数提示一次 |
|
||||
| rdp_record::Stats / stats()(非宏) | — | 运行统计结构体(定义于 `rdp_record.h`,任意时刻线程安全读取、`Shutdown()` 时自动打印):`enqueued_rows`/`dropped_rows`/`written_rows`/`transactions`/`write_errors`/`queue_peak_bytes`/`queue_peak_rows` |
|
||||
|
||||
> **构建体制宏(不在 parameters.h 中定义)**:`PHASE_SCANNING` / `MECHANICAL_SCANNING` 由 CMake 缓存变量 `RADAR_SCAN_MODE` 经 `target_compile_definitions` 传入,仅用于 `parameters.h` 的 `VERSION_INFO`(`V1.5.8.PS` / `V1.5.8.MS`)与 `#pragma message`,以及构建目录/任务命名;**不参与 `data_process.cpp` 判圈**(判圈由配置项 `scan_mode` 决定,见 7.2)。源码中已无「按体制编译的判圈分支」。
|
||||
> **构建期扫描体制宏已移除(机扫/相扫版本合并)**:`CMakeLists.txt` 不再有 `RADAR_SCAN_MODE` 缓存变量,也不再定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING` 编译宏;`parameters.h` 的 `VERSION_INFO` 为固定字符串 `"GENERIC"`。扫描模式只由运行期配置项 `[radar_params] scan_mode` 决定(见 4.2、7.2),同一份 DLL 同时适用于两种体制的部署。
|
||||
|
||||
---
|
||||
|
||||
@@ -1194,7 +1190,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
- **起批质量门限取的是临时航迹「末点」质量**:`tmp_track_to_trust_track()` 用 `(*Iter)[L-1].quality` 与按长度取的门限比较,而临时航迹质量只在 L=3 时写过所有点、L>3 时只更新末点,因此门限表实际是针对「最新一点的质量」,不是整条航迹的平均质量。
|
||||
- **质量长度项含整数除法**:`1 − Valid_point_sum/Point_sum` 中两操作数均为 `int`,先做整数除法截断再乘 0.5,`Valid_point_sum/Point_sum` 的精度损失最大约 1/Point_sum;对点数很多的航迹影响可忽略,但精确复现公式时需注意。
|
||||
- **数据记录未采用关联信息裁剪与记录策略(P0-a / P2,V1.5.8 优化时明确不做)**:⑥ 关联信息仍按「每个候选一行」写入(单圈 ≈ 点迹数 × 航迹数),未裁剪为只记录取中候选,也未做按容量/时长切库与旧库清理;因此高航迹密度场景下判圈帧仍有可观记录开销(200 目标/150 点压测 p99 ≈ 13~24 ms),记录库也可能很大(60 圈约 1.06 GB)。属本轮刻意取舍,评价实时性时需区分普通帧(p99 ≈ 0.1 ms)与判圈帧。
|
||||
- **`scan_mode` 与构建体制不校验一致性(参数配置方式改造)**:DLL 不检查配置项 `scan_mode` 与编译期 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 是否一致;两者不一致时不会报错,`version_info`(PS/MS)反映构建体制、实际判圈行为反映配置,存在版本串与实际行为不符的风险。部署时应保证「构建体制 = 配置 `scan_mode` = 实际雷达体制」三者一致(机扫需 `scan_mode=1` 且 4 项数值按机扫取值,见 4.2)。
|
||||
- **`scan_mode` 与实际雷达体制需一致(部署约束)**:DLL 不校验配置项 `scan_mode` 与实际雷达体制/波位号序列是否一致(不报错);机扫部署须把 `scan_mode` 配为 1 且 4 项数值按机扫取值(见 4.2)。机扫/相扫已合并为同一份构建,不再有编译期体制可作交叉校验。
|
||||
|
||||
### 11.3 未启用功能
|
||||
|
||||
@@ -1221,18 +1217,19 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
|
||||
## 12. 版本历史
|
||||
|
||||
当前代码版本:**V1.5.8**(`parameters.h` 的 `PATCH_VERSION`;版本号提交为 3088ce4,2026-10-20)。版本号自 1.5.6 起可运行时读取(`version_info`,见 7.1)。中间状态 b4aed8a 曾把版本号置为 7,但未单独发布/记录,本文档按 1.5.8 汇总。**1.5.8 之后又有若干未发版的代码改动**(构建脚本重构、记录性能优化、TAS 消亡圈数与高度平滑调整、质量入库、**参数配置方式改造**),版本号未升级(仍为 1.5.8),已记入 CHANGELOG 的 `[Unreleased]`,下表前 6 行为其提交/工作区状态。
|
||||
当前代码版本:**V1.5.9**(`parameters.h` 的 `PATCH_VERSION` = 9、`VERSION_INFO` = `"GENERIC"`,版本串 `V1.5.9.GENERIC`——机扫/相扫已合并为同一份构建,无体制后缀;对应提交 019af7a,2026-10-27)。版本号自 1.5.6 起可运行时读取(`version_info`,见 7.1)。中间状态 b4aed8a 曾把版本号置为 7,但未单独发布/记录。**1.5.8 之后又有若干未发版的代码改动**(构建脚本重构、记录性能优化、TAS 消亡圈数与高度平滑调整、质量入库、参数配置方式改造、机扫/相扫版本合并与构建脚本适配),已记入 CHANGELOG 的 `[Unreleased]`,下表前列为其提交/工作区状态。
|
||||
|
||||
近期提交(git log --oneline,新→旧;仅列代码改动,纯文档提交略):
|
||||
|
||||
| 提交 | 内容 |
|
||||
|---|---|
|
||||
| 工作区(本次改造,未提交) | **参数配置方式改造:TOML 配置文件 → `RDP_parameter`**。新增 `rdp_parameter_loader.h/.cpp`(严格校验 11 个配置段、标量键必填、类型/范围校验、未知段/键拒绝、屏蔽区数组长度等于 `*_num`,失败 -1 且不改变当前参数)与示例 `config/config_tmp.toml`;内置 toml++ v3.4.0 单头文件 `third_party/toml/toml.hpp`;公开头删除 `struct RadarPara` 与 `track_process_parameters_initial/modify`,新增 `virtual int parameters_reload(const char*)`(`Data_Process` 实现为加载成功后整体替换 `rdp_parameter`);`data_process.h` 删除 `Work_Parameter`,各模块(kalman 11 个方法、dot_coh、dot_coh_tas、track_asso(_tas/_direct_tracking)、track_init(_direct_tracking)、track_die(_tas)、track_index_mangement、tas_ctrl)改为 `const RDP_parameter& rdp_parameter`,宏与旧字段按映射等价替换;**新增配置项 `scan_mode`(0 相扫 / 1 机扫)**,`data_process.cpp` 的 TWS 判圈由编译期 `#ifdef PHASE_SCANNING` 改为按 `scan_mode` 运行时选择(行为逐分支等价),`PHASE_SCANNING`/`MECHANICAL_SCANNING` 仅剩构建体制/版本后缀用途;`parameters.h` 仅保留 PI、版本/日志/记录宏、`MAX_TRACK_NUM`、`RDP_TAS_QUEUE_CAPACITY`、`Round`(`UNCONF_TARGET` 已删除,起批处 `Target_Type` 直接写 0);`track_index_mangement` 航迹号表改按 `track_index_max` 分配,TAS 队列容量用 `RDP_TAS_QUEUE_CAPACITY`、运行期上限用 `tas_track_num_max`,波束类型用 `default_track_beam_type`。验证(Lead 实测,2026-10-27):8 配置重建成功且 0 warning 0 error;Release REC_OFF DLL 331,776 字节(Debug REC_ON 4,694,016 字节,与 scan_mode 改动前一致)、导出表 31 项(新增 `parameters_reload`,旧参数接口与 `RadarPara` 符号消失);加载器单测 233 项断言、公开接口运行期测试(8 配置各 38 项断言,含判圈运行时切换)全部通过;`RDP_parameter` 成员 / 加载器键 / TOML 键均为 63 个,11 个配置段不变。详见 CHANGELOG `[Unreleased]` |
|
||||
| 工作区(构建脚本适配机扫/相扫合并,未提交) | 构建不再区分 `PHASE_SCANNING` / `MECHANICAL_SCANNING`:`CMakeLists.txt` 删除 `RADAR_SCAN_MODE` 缓存变量与体制编译宏;构建目录改为 `build/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON>`(去掉 PS/MS 维度);`config_paths.bat`/`configure.bat`/`build.bat`/`clean.bat` 参数改为 `<Debug\|Release> [AUTO\|ON\|OFF]`,新增 `build_config.bat`(单配置配置+构建,取代 `build_all.bat`),`clean_all.bat` 同时清理旧版 `build/X256_PS`、`build/X256_MS`;`tasks.json` 5 个任务改为「清理全部」+ 4 个「配置并构建(...)」;`settings.json`(buildDirectory 去掉 scanMode 维度)、`cmake-variants.yaml`(移除 scanMode 变体)、`c_cpp_properties.json`(合并为单个 X256 配置)、`launch.json` 同步。验证:5 个任务返回 0,4 种配置(Release/Debug × REC_OFF/REC_ON)0 warning 0 error,编译命令无体制宏,增量重建 0 编译步骤 |
|
||||
| 423c200 / 019af7a(参数配置方式改造 + 机扫/相扫版本合并) | **参数配置方式改造:TOML 配置文件 → `RDP_parameter`**。新增 `rdp_parameter_loader.h/.cpp`(严格校验 11 个配置段、标量键必填、类型/范围校验、未知段/键拒绝、屏蔽区数组长度等于 `*_num`,失败 -1 且不改变当前参数)与示例 `config/config_tmp.toml`;内置 toml++ v3.4.0 单头文件 `third_party/toml/toml.hpp`;公开头删除 `struct RadarPara` 与 `track_process_parameters_initial/modify`,新增 `virtual int parameters_reload(const char*)`(`Data_Process` 实现为加载成功后整体替换 `rdp_parameter`);`data_process.h` 删除 `Work_Parameter`,各模块(kalman 11 个方法、dot_coh、dot_coh_tas、track_asso(_tas/_direct_tracking)、track_init(_direct_tracking)、track_die(_tas)、track_index_mangement、tas_ctrl)改为 `const RDP_parameter& rdp_parameter`,宏与旧字段按映射等价替换;**新增配置项 `scan_mode`(0 相扫 / 1 机扫)**,`data_process.cpp` 的 TWS 判圈由编译期 `#ifdef PHASE_SCANNING` 改为按 `scan_mode` 运行时选择(行为逐分支等价);019af7a 进一步把机扫/相扫合并为**同一份代码与同一份构建**(版本号 1.5.9、`VERSION_INFO` 改为 `GENERIC`,`PHASE_SCANNING`/`MECHANICAL_SCANNING` 不再参与任何功能);`parameters.h` 仅保留 PI、版本/日志/记录宏、`MAX_TRACK_NUM`、`RDP_TAS_QUEUE_CAPACITY`、`Round`(`UNCONF_TARGET` 已删除,起批处 `Target_Type` 直接写 0);`track_index_mangement` 航迹号表改按 `track_index_max` 分配,TAS 队列容量用 `RDP_TAS_QUEUE_CAPACITY`、运行期上限用 `tas_track_num_max`,波束类型用 `default_track_beam_type`。验证(Lead 实测,2026-10-27):合并前 8 配置、合并后 4 配置均 0 warning 0 error;Release REC_OFF DLL 331,776 字节、Debug REC_ON 4,694,528 字节、导出表 31 项(新增 `parameters_reload`,旧参数接口与 `RadarPara` 符号消失);加载器单测 233 项断言、公开接口运行期测试(含判圈运行时切换)全部通过;`RDP_parameter` 成员 / 加载器键 / TOML 键均为 63 个,11 个配置段不变。详见 CHANGELOG `[Unreleased]` |
|
||||
| 1ffb287 | 增加航迹质量记录到数据库:`RdpRecTempTrack` 增 `quality`,`RdpRecTrustTrack` 增 `Quality`/`Unupdated_time`/`Point_sum`/`Valid_point_sum` 并同步注册 |
|
||||
| 6284f3f | 修改 TAS 模式高度平滑点数:`track_asso_tas.cpp` 分段偏移 `+2/+3/+4/+6` → `+6/+8/+10/+12`,相扫 `H_F_WIN_LEN` 3→6(相扫 TAS 窗口 12/14/16/18、机扫 9/11/13/15;TWS 相扫随之 8/9/10/12) |
|
||||
| 5d105d2 | 修改相扫模式下 TAS 航迹消亡圈数:`TRACK_DIE_ROUND_TAS` 10→20(机扫保持 96),相扫 TAS 实际连续 21 圈无实点才消亡 |
|
||||
| 17a3d99 | 数据记录调试功能性能优化:`rdp_record.h` 新增 `Stats`/`stats()` 与 6 个异步入队接口及对应宏(旧 `RDP_RECORD`/`RDP_RECORD_BATCH` 保留为遗留同步接口);`Init()` 启动**异步写线程**,处理线程只入队、实体构造与批量事务由写线程完成;有界队列(64 MB / 4096 批,满则丢弃并计数);WAL + `synchronous=OFF` + 8 MB 缓存 + 去除 `AUTOINCREMENT`;写失败每表提示一次、连续 10 次熔断;`Shutdown()` 排空后 `wal_checkpoint(TRUNCATE)`;12 个记录点改为「收集 → 一次入队」,记录行数与表列不变;`parameters.h` 新增 10 个可调宏。验证与完整条目见 CHANGELOG `[Unreleased]` |
|
||||
| 3dee734 | 优化配置构建脚本:构建目录改为按完整配置隔离 `build/<X256_PS\|X256_MS>/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON>`;新增 `config_paths.bat`(目录推导与参数校验)、`build_all.bat`(两种扫描体制依次配置+构建)、`clean_all.bat`(清理全部配置);`configure.bat`/`build.bat`/`clean.bat` 参数改为「扫描体制 + 构建类型 + 记录模式」并自动推导目录;`tasks.json` 原有 15 个任务全部删除,仅保留 5 个任务(清理全部 + Release/Debug × REC_OFF/REC_ON 的「配置并构建全部」);`settings.json`/`cmake-variants.yaml`/`c_cpp_properties.json`/`launch.json` 同步;验证:5 个任务实际执行均返回 0,8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)0 warning、0 error,产物位于各配置目录的 `bin/`、`lib/` |
|
||||
| 3dee734 | 优化配置构建脚本:构建目录改为按完整配置隔离 `build/<X256_PS\|X256_MS>/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON>`;新增 `config_paths.bat`(目录推导与参数校验)、`build_all.bat`(两种扫描体制依次配置+构建)、`clean_all.bat`(清理全部配置);`configure.bat`/`build.bat`/`clean.bat` 参数改为「扫描体制 + 构建类型 + 记录模式」并自动推导目录;`tasks.json` 原有 15 个任务全部删除,仅保留 5 个任务(清理全部 + Release/Debug × REC_OFF/REC_ON 的「配置并构建全部」);`settings.json`/`cmake-variants.yaml`/`c_cpp_properties.json`/`launch.json` 同步;验证:5 个任务实际执行均返回 0,8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)0 warning、0 error,产物位于各配置目录的 `bin/`、`lib/`(**该 PS/MS 双构建布局已由工作区的「构建脚本适配机扫/相扫合并」取代**) |
|
||||
| 3088ce4(**V1.5.8** 版本号来源) | 更新版本号至 V1.5.8(`PATCH_VERSION` 7→8) |
|
||||
| 782bff5 | 调整航迹质量下降逻辑(改为按未更新时长的二次函数衰减,系数 −0.0008 / −0.0025);**普通 TWS 航迹消亡条件改为由航迹质量确定**(`Quality < TRACK_DIE_QUALITY` = 0.3),重点航迹与 TAS 仍按外推圈数 |
|
||||
| 4b70b24 | 航迹质量下降策略改为按点迹未更新时间计算:`Trust_Track` 新增 `Unupdated_time`,外推 ΔT 计算移到外推上限判断之外,超限后质量继续下降 |
|
||||
@@ -1297,4 +1294,4 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| third_party/toml/toml.hpp | 内置 toml++ v3.4.0 单头文件(MIT,上游原样保存);仅参数加载器 `rdp_parameter_loader.cpp` 以 `#pragma warning(push, 0)` 包裹使用,来源与许可证信息见文件头 |
|
||||
| backup/data_process_class_dll/data_process_class_dll.pro | 迁移前的 Qt/qmake 工程文件(源文件清单参考) |
|
||||
| .vscode/tasks.json、.vscode/cmake-variants.yaml、.vscode/scripts/*.bat | VS Code 任务、构建变体与构建脚本(构建目录布局见 4.3) |
|
||||
| build/X256_PS/<Debug\|Release>/<REC_*>/bin/RadarConfigParam.ini | 回放测试工具(rdp_playback.exe)配置样例(需自行放置) |
|
||||
| build/<Debug\|Release>/<REC_*>/bin/RadarConfigParam.ini | 回放测试工具(rdp_playback.exe)配置样例(需自行放置) |
|
||||
|
||||
Reference in New Issue
Block a user