更新:1、修复配置文件加载时范围判断错误导致参数加载失败的问题;
2、新增4份配置文件; 3、修复单跟踪模式下,会偶尔发送TWS波束的问题; 4、新增手动取消目标TAS跟踪时输出航迹更新信息,修复手动取消目标TAS跟踪航迹状态不更新的问题; 5、新增用户操作日志输出; Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -930,7 +930,7 @@ $$
|
||||
|
||||
- **入队条件**(仅手动):manual_tracking_flag==1 且 Track_Mode==0 且队列未满(配置项 `tas_track_num_max`,样例为相扫 4;机扫需配 1,上限 `RDP_TAS_QUEUE_CAPACITY`=30)且不在 TAS 禁止区内。入队即置 Track_Mode=1、以航迹时间初始化 last_track_time,并输出一次航迹更新。
|
||||
- **出队**:队列中目标在航迹表中不存在、或不再处于手动 TAS 状态时清除。(自动转 TAS / 自动退出的 tas_auto_start/tas_auto_end 逻辑全部注释停用——只支持手动。)
|
||||
- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time`)的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 大于配置项 `data_rate_tas` 秒(单位 s,1521592 起由 Hz 改为 s,加载器校验须 >0),保证 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track`,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp:
|
||||
- **波束输出**:在 TAS 队列内遍历,逐个目标先按**数据率门控**筛选——仅要求目标距上次波束输出(`last_track_time`)的时间 `delta_T_last_track = (latest_timestamp − last_track_time)/1000` 大于配置项 `data_rate_tas` 秒(单位 s,1521592 起由 Hz 改为 s;加载器校验须 ≥0,**0 表示不做 DLL 内部 TAS 波束限速、输出间隔改由宿主 `Beam_Ctrl` 调用频率决定**),保证 TAS 目标输出间隔不随波束时间(Beam_Ctrl 调用频率)变化;对通过门控的目标再比较航迹时间 `T_track`,取 CPI 时间最早者,选中后按其 CPI 时间与最新时间戳之差外推到 latest_timestamp:
|
||||
|
||||
$$
|
||||
\Delta T=(latest\_timestamp-CPI\_time)/1000,\qquad
|
||||
@@ -1055,7 +1055,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
1. 11 个配置段**全部必填**,且必须是 TOML 表;顶层出现未知配置段直接拒绝;
|
||||
2. 所有**标量键必填**,类型必须匹配(浮点参数接受整数或浮点,整数参数只接受整数),且不得超出 C++ `float`/`int` 可表示范围;
|
||||
3. 每个段内只允许登记过的键,**拼错的键按未知参数拒绝**(不会静默忽略);
|
||||
4. 取值范围校验:如 `radar_work_mode∈[0,2]`、`scan_mode∈{0,1}`、`freq_0_GHz>0`、`data_rate_tws/data_rate_tas>0`、`sigma_*>0`、`associate_threshold>0`、`height_smooth_win≥1`、`track_init_point_num_min∈[3,9]`、`track_init_angle∈(0,180]`、`track_init_quality_L3~L7∈[0,1]`、`track_init_velocity_max>min≥0`、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]`、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]`、Singer 模型 Q>0 等(完整清单以源码为准);
|
||||
4. 取值范围校验:如 `radar_work_mode∈[0,2]`、`scan_mode∈{0,1}`、`freq_0_GHz>0`、`data_rate_tws>0`、`data_rate_tas≥0`(**0 表示不做 DLL 内部 TAS 波束限速、由宿主 `Beam_Ctrl` 调用频率决定**)、`sigma_*>0`、`associate_threshold>0`、`height_smooth_win≥1`、`track_init_point_num_min∈[3,9]`、`track_init_angle∈(0,180]`、`track_init_quality_L3~L7∈[0,1]`、`track_init_velocity_max>min≥0`、消亡圈数≥0、质量门限∈[0,1]、质量衰减系数≤0、`track_index_max∈[1, MAX_TRACK_NUM]`、`tas_track_num_max∈[0, RDP_TAS_QUEUE_CAPACITY]`、Singer 模型 Q>0 等(完整清单以源码为准);
|
||||
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_ERROR` 打印到日志),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
|
||||
|
||||
@@ -1073,7 +1073,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height`) |
|
||||
| radar_params | `radar_system_delay` | 0 | 系统延迟(s,输出位置按 `x + vx·delay` 补偿;原 `Sys_delay`) |
|
||||
| radar_params | `data_rate_tws` | 3 | TWS 数据率/外推步长(s;原按 `work_mode` 在 `DATA_RATE_SHORT/MIDDLE/FAR` 中三选一) |
|
||||
| radar_params | `data_rate_tas` | 1 | TAS 波束输出间隔(s,校验 >0;原 `DATA_RATE_TAS`,1521592 起单位由 Hz 改为 s) |
|
||||
| radar_params | `data_rate_tas` | 1 | TAS 波束输出间隔(s,校验 ≥0;**0 表示不做 DLL 内部限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**;原 `DATA_RATE_TAS`,1521592 起单位由 Hz 改为 s) |
|
||||
| radar_params | `data_rate_track_only` | 0.2 | 纯跟踪模式数据率(s;当前实现保留未用) |
|
||||
| cohesion | `point_cohesion_range` | 80 | 距离凝聚门限(m;原 `DOT_COH_RANGE`) |
|
||||
| cohesion | `point_cohesion_velocity` | 2 | 速度凝聚门限(m/s;原 `DOT_COH_V`) |
|
||||
@@ -1278,6 +1278,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
||||
|
||||
| 提交 | 内容 |
|
||||
|---|---|
|
||||
| 工作区(`data_rate_tas=0` 加载修复,未提交) | 放宽 `data_rate_tas` 校验为 `≥0`:`rdp_parameter_loader.cpp` 原要求 `data_rate_tas > 0`,导致 `config/X256_MS_4S.toml` / `config/X1024_MS_4.8S.toml`(`data_rate_tas = 0`)经 `parameters_reload()` 加载返回 -1;现允许 0(代码中该值仅用于 `delta_T_last_track > data_rate_tas` 比较,无除法),**0 表示不做 DLL 内部 TAS 波束限速、输出间隔由宿主 `Beam_Ctrl` 调用频率决定**;`data_rate_tws` 仍要求 >0。验证(Lead 实测,2026-10-30):加载器单测 240 项断言全通过(新增 0 允许 / 负值拒绝 / data_rate_tws=0 拒绝);4 配置重建 0 warning 0 error;5 份配置经 DLL 公开接口 `parameters_reload()` 全部返回 0;公开接口运行期测试 4 配置 × 38 项断言通过。详见 CHANGELOG `[1.5.9]` |
|
||||
| eb9f30c | 修复手动转 TAS 时输出航迹更新信息不完整:`tas_target_add()` 的即时输出行改为与常规关联输出同一套字段(含 `Quality`/`Direction_Angle`/`Flag_Direction`/关联点信息/`x,y,v_x,v_y`/十字星数据等),并补写 `point_type=0` |
|
||||
| 0f3da99 | 增加航迹指纹:`Trust_Track::Track_fingerprint`(16 bit,起批时按末点 `r`/`azi`/`vr`/`RCS`/`CPI_time` 量化 + splitmix64 + 折叠生成);TAS 波束改为下发指纹、TAS 数据帧按指纹匹配航迹(不再按批号),实现 TAS 回放(见 9.12) |
|
||||
| 24ce1e6 | **日志组件由 `std::cout` 重定向改为内置 spdlog v1.17.0**:新增内置第三方库 `third_party/spdlog`(`include/` + `src/` + `LICENSE` + `UPSTREAM.md`,MIT,spdlog v1.17.0 上游快照,含随库内置的 {fmt} 12.1.0);根 `CMakeLists.txt` 新增静态库目标 `spdlog`(`SPDLOG_COMPILED_LIB`,第三方源码以 `/w` 编译)与缓存变量 `RDP_LOG_LEVEL`(`AUTO`/`TRACE`/`DEBUG`/`INFO`/`WARN`/`ERROR`/`CRITICAL`/`OFF`,AUTO 时 Debug=TRACE、其它构建=INFO),映射为 PUBLIC 编译定义 `SPDLOG_ACTIVE_LEVEL` 同时提供给 `data_process_class_dll` 与 `rdp_record`;`data_process_class_dll/rdp_log.h/.cpp` 重写:不再重定向 `std::cout`,`rdp_log::Init()` 创建 `RDP_LOG_DIR`(`.\rdp_logs\`)下 `rdp_YYYYMMDD_HHMMSS.log`(每次 `GetB()` 一个文件,同秒冲突追加 `_1`~`_999`),默认 logger 同时输出到标准输出与文件,行格式 `"[%Y-%m-%d %H:%M:%S.%e] [%l] [%s:%#] %v"`(毫秒时间戳、级别、文件名:行号、内容),所有级别逐条 flush,文件创建失败时降级为仅标准输出并返回 false;`rdp_log::Shutdown()` flush 并关闭日志文件;原流式 `RDP_LOG` 宏改为 `RDP_LOG_TRACE` / `RDP_LOG_DEBUG` / `RDP_LOG_INFO` / `RDP_LOG_WARN` / `RDP_LOG_ERROR` / `RDP_LOG_CRITICAL`(`RDP_LOG_ERR` 为 ERROR 别名)的 fmt 风格调用;`RDP_LOG_ENABLE` 宏已删除,日志级别改由 `SPDLOG_ACTIVE_LEVEL` 在编译期控制(OFF = 编译期关闭且不创建日志文件);`Data_Process_Factory::GetB()` 中启用 `rdp_log::Init()`(在 `rdp_record::Init()` 之前)、`Destroy()` 中在 `rdp_record::Shutdown()` 之后调用 `rdp_log::Shutdown()`;调用点迁移(`data_process.cpp` 参数重载成功 INFO / 失败 ERROR、`track_asso_tas.cpp` ΔT≤0 告警 WARN、`rdp_record.cpp` 19 处 info/warn/error 分级;其余注释代码中的旧宏同步改写);`parameters.h` 删除 `RDP_LOG_ENABLE`、保留 `RDP_LOG_DIR`,注释改为说明 spdlog + `SPDLOG_ACTIVE_LEVEL`。验证(Lead 实测,2026-10-28):4 配置(Release/Debug × REC_OFF/REC_ON)0 warning 0 error;公开接口测试 38 项断言全部通过;运行期实测日志同时写入标准输出与文件、文件名/行格式正确、`Destroy()`→`GetB()` 同秒重连生成 `_1` 后缀新文件。详见 CHANGELOG `[1.5.9]` |
|
||||
|
||||
Reference in New Issue
Block a user