更新:1、调整构建脚本,去除扫描模式配置项;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
Vendored
+3
-26
@@ -12,38 +12,15 @@
|
|||||||
"UNICODE",
|
"UNICODE",
|
||||||
"_UNICODE",
|
"_UNICODE",
|
||||||
"NOMINMAX",
|
"NOMINMAX",
|
||||||
"DATA_PROCESS_CLASS_DLL_LIBRARY",
|
"DATA_PROCESS_CLASS_DLL_LIBRARY"
|
||||||
"PHASE_SCANNING"
|
|
||||||
],
|
],
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${workspaceFolder}/data_process_class_dll",
|
"${workspaceFolder}/data_process_class_dll",
|
||||||
"${workspaceFolder}/data_process_class_dll/Eigen",
|
"${workspaceFolder}/data_process_class_dll/Eigen",
|
||||||
"${workspaceFolder}/**"
|
"${workspaceFolder}/**"
|
||||||
],
|
],
|
||||||
"name": "X256_PS (MSVC2022 x64)",
|
"name": "X256 (MSVC2022 x64)",
|
||||||
"compileCommands": "${workspaceFolder}/build/X256_PS/Debug/REC_ON/compile_commands.json"
|
"compileCommands": "${workspaceFolder}/build/Debug/REC_ON/compile_commands.json"
|
||||||
},
|
|
||||||
{
|
|
||||||
"compilerPath": "D:\\APP\\VisualStudio2022\\VC\\Tools\\MSVC\\14.44.35207\\bin\\Hostx64\\x64\\cl.exe",
|
|
||||||
"cStandard": "c17",
|
|
||||||
"cppStandard": "c++17",
|
|
||||||
"intelliSenseMode": "windows-msvc-x64",
|
|
||||||
"defines": [
|
|
||||||
"WIN32",
|
|
||||||
"_WINDOWS",
|
|
||||||
"UNICODE",
|
|
||||||
"_UNICODE",
|
|
||||||
"NOMINMAX",
|
|
||||||
"DATA_PROCESS_CLASS_DLL_LIBRARY",
|
|
||||||
"MECHANICAL_SCANNING"
|
|
||||||
],
|
|
||||||
"includePath": [
|
|
||||||
"${workspaceFolder}/data_process_class_dll",
|
|
||||||
"${workspaceFolder}/data_process_class_dll/Eigen",
|
|
||||||
"${workspaceFolder}/**"
|
|
||||||
],
|
|
||||||
"name": "X256_MS (MSVC2022 x64)",
|
|
||||||
"compileCommands": "${workspaceFolder}/build/X256_MS/Debug/REC_ON/compile_commands.json"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
-14
@@ -28,17 +28,3 @@ recordMode:
|
|||||||
long: REC_ON - RDP_DATA_RECORD=ON (强制启用记录模块)
|
long: REC_ON - RDP_DATA_RECORD=ON (强制启用记录模块)
|
||||||
settings:
|
settings:
|
||||||
RDP_DATA_RECORD: ON
|
RDP_DATA_RECORD: ON
|
||||||
|
|
||||||
scanMode:
|
|
||||||
default: X256_PS
|
|
||||||
choices:
|
|
||||||
X256_PS:
|
|
||||||
short: X256_PS
|
|
||||||
long: X256_PS - PHASE_SCANNING
|
|
||||||
settings:
|
|
||||||
RADAR_SCAN_MODE: PHASE_SCANNING
|
|
||||||
X256_MS:
|
|
||||||
short: X256_MS
|
|
||||||
long: X256_MS - MECHANICAL_SCANNING
|
|
||||||
settings:
|
|
||||||
RADAR_SCAN_MODE: MECHANICAL_SCANNING
|
|
||||||
|
|||||||
Vendored
+4
-4
@@ -5,14 +5,14 @@
|
|||||||
"name": "调试 DLL",
|
"name": "调试 DLL",
|
||||||
"type": "cppvsdbg",
|
"type": "cppvsdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"program": "${workspaceFolder}/build/X256_PS/Debug/REC_ON/bin/rdp_playback.exe",
|
"program": "${workspaceFolder}/build/Debug/REC_ON/bin/rdp_playback.exe",
|
||||||
"args": ["-d", "${workspaceFolder}/build/X256_PS/Debug/REC_ON/bin/2026-07-18/15-34-32", "-i", "${workspaceFolder}/build/X256_PS/Debug/REC_ON/bin/RadarConfigParam.ini", "-c", "${workspaceFolder}/build/X256_PS/Debug/REC_ON/bin/2026-07-18/15-34-32/track.csv"],
|
"args": ["-d", "${workspaceFolder}/build/Debug/REC_ON/bin/2026-07-18/15-34-32", "-i", "${workspaceFolder}/build/Debug/REC_ON/bin/RadarConfigParam.ini", "-c", "${workspaceFolder}/build/Debug/REC_ON/bin/2026-07-18/15-34-32/track.csv"],
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"environment": [],
|
"environment": [],
|
||||||
"externalConsole": false,
|
"externalConsole": false,
|
||||||
"preLaunchTask": "配置并构建全部(Debug/REC_ON)",
|
"preLaunchTask": "配置并构建(Debug/REC_ON)",
|
||||||
"symbolSearchPath": "${workspaceFolder}/build/X256_PS/Debug/REC_ON/bin"
|
"symbolSearchPath": "${workspaceFolder}/build/Debug/REC_ON/bin"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "附加到宿主进程(调试 DLL)",
|
"name": "附加到宿主进程(调试 DLL)",
|
||||||
|
|||||||
Vendored
+6
-8
@@ -3,23 +3,21 @@ rem ===========================================================================
|
|||||||
rem CMake build script (MSVC 2022 / v143, C++17, x64)
|
rem CMake build script (MSVC 2022 / v143, C++17, x64)
|
||||||
rem
|
rem
|
||||||
rem Usage:
|
rem Usage:
|
||||||
rem build.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
rem build.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
||||||
rem
|
rem
|
||||||
rem Examples:
|
rem Examples:
|
||||||
rem build.bat PHASE_SCANNING Release OFF
|
rem build.bat Release OFF
|
||||||
rem build.bat MECHANICAL_SCANNING Debug ON
|
rem build.bat Debug ON
|
||||||
rem
|
rem
|
||||||
rem The build tree must have been configured by configure.bat first (same
|
rem The build tree must have been configured by configure.bat first (same
|
||||||
rem configuration tuple):
|
rem configuration): build\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
||||||
rem build\<X256_PS^|X256_MS^>\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
|
||||||
rem
|
rem
|
||||||
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
rem ===========================================================================
|
rem ===========================================================================
|
||||||
setlocal
|
setlocal
|
||||||
if "%~1"=="" goto :usage
|
if "%~1"=="" goto :usage
|
||||||
if "%~2"=="" goto :usage
|
|
||||||
|
|
||||||
call "%~dp0config_paths.bat" "%~1" "%~2" "%~3"
|
call "%~dp0config_paths.bat" "%~1" "%~2"
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
|
|
||||||
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
||||||
@@ -40,5 +38,5 @@ popd
|
|||||||
exit /b %CMAKE_EXIT%
|
exit /b %CMAKE_EXIT%
|
||||||
|
|
||||||
:usage
|
:usage
|
||||||
echo Usage: build.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
echo Usage: build.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
|||||||
Vendored
-49
@@ -1,49 +0,0 @@
|
|||||||
@echo off
|
|
||||||
rem ===========================================================================
|
|
||||||
rem Configure and build both scan modes for one build type / record mode.
|
|
||||||
rem
|
|
||||||
rem Usage:
|
|
||||||
rem build_all.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
|
||||||
rem
|
|
||||||
rem Examples:
|
|
||||||
rem build_all.bat Release OFF
|
|
||||||
rem build_all.bat Debug ON
|
|
||||||
rem build_all.bat Release AUTO
|
|
||||||
rem
|
|
||||||
rem Runs configure.bat + build.bat for both scan modes:
|
|
||||||
rem PHASE_SCANNING -^> build\X256_PS\<Debug^|Release^>\<REC_*>
|
|
||||||
rem MECHANICAL_SCANNING -^> build\X256_MS\<Debug^|Release^>\<REC_*>
|
|
||||||
rem The run stops at the first failing configuration and returns non-zero.
|
|
||||||
rem
|
|
||||||
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
|
||||||
rem ===========================================================================
|
|
||||||
setlocal EnableExtensions
|
|
||||||
set "BUILD_TYPE=%~1"
|
|
||||||
set "RECORD_MODE=%~2"
|
|
||||||
if not defined BUILD_TYPE goto :usage
|
|
||||||
if not defined RECORD_MODE set "RECORD_MODE=AUTO"
|
|
||||||
|
|
||||||
rem Validate + normalize the tuple once (also resolves the X256_* aliases).
|
|
||||||
call "%~dp0config_paths.bat" PHASE_SCANNING "%BUILD_TYPE%" "%RECORD_MODE%"
|
|
||||||
if errorlevel 1 exit /b 1
|
|
||||||
|
|
||||||
for %%S in (PHASE_SCANNING MECHANICAL_SCANNING) do (
|
|
||||||
echo.
|
|
||||||
echo [build_all] ==================== %%S / %BUILD_TYPE% / %RECORD_MODE% ====================
|
|
||||||
call "%~dp0configure.bat" %%S "%BUILD_TYPE%" "%RECORD_MODE%"
|
|
||||||
if errorlevel 1 goto :failed
|
|
||||||
call "%~dp0build.bat" %%S "%BUILD_TYPE%" "%RECORD_MODE%"
|
|
||||||
if errorlevel 1 goto :failed
|
|
||||||
)
|
|
||||||
echo.
|
|
||||||
echo [build_all] all done: %BUILD_TYPE% / %RECORD_MODE%
|
|
||||||
exit /b 0
|
|
||||||
|
|
||||||
:failed
|
|
||||||
echo.
|
|
||||||
echo [build_all] FAILED - stopped at the first failing configuration, see the log above
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:usage
|
|
||||||
echo Usage: build_all.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
|
||||||
exit /b 1
|
|
||||||
Vendored
+49
@@ -0,0 +1,49 @@
|
|||||||
|
@echo off
|
||||||
|
rem ===========================================================================
|
||||||
|
rem Configure and build one build configuration (build type + record mode).
|
||||||
|
rem
|
||||||
|
rem Usage:
|
||||||
|
rem build_config.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
||||||
|
rem
|
||||||
|
rem Examples:
|
||||||
|
rem build_config.bat Release OFF
|
||||||
|
rem build_config.bat Debug ON
|
||||||
|
rem build_config.bat Release AUTO
|
||||||
|
rem
|
||||||
|
rem Runs configure.bat + build.bat for the same configuration:
|
||||||
|
rem build\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
||||||
|
rem The mechanical-scanning and phase-scanning variants are merged into one
|
||||||
|
rem build; the scan mode is a runtime config item (TOML [radar_params] scan_mode).
|
||||||
|
rem The run stops at the first failure and returns non-zero.
|
||||||
|
rem
|
||||||
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
|
rem ===========================================================================
|
||||||
|
setlocal EnableExtensions
|
||||||
|
set "BUILD_TYPE=%~1"
|
||||||
|
set "RECORD_MODE=%~2"
|
||||||
|
if not defined BUILD_TYPE goto :usage
|
||||||
|
if not defined RECORD_MODE set "RECORD_MODE=AUTO"
|
||||||
|
|
||||||
|
rem Validate + normalize the configuration once.
|
||||||
|
call "%~dp0config_paths.bat" "%BUILD_TYPE%" "%RECORD_MODE%"
|
||||||
|
if errorlevel 1 exit /b 1
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [build_config] ==================== %BUILD_TYPE% / %RECORD_MODE% ====================
|
||||||
|
call "%~dp0configure.bat" "%BUILD_TYPE%" "%RECORD_MODE%"
|
||||||
|
if errorlevel 1 goto :failed
|
||||||
|
call "%~dp0build.bat" "%BUILD_TYPE%" "%RECORD_MODE%"
|
||||||
|
if errorlevel 1 goto :failed
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [build_config] all done: %BUILD_TYPE% / %RECORD_MODE%
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:failed
|
||||||
|
echo.
|
||||||
|
echo [build_config] FAILED - stopped at the first failure, see the log above
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:usage
|
||||||
|
echo Usage: build_config.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
||||||
|
exit /b 1
|
||||||
Vendored
+6
-7
@@ -3,23 +3,22 @@ rem ===========================================================================
|
|||||||
rem CMake clean script - remove the build output of one configuration.
|
rem CMake clean script - remove the build output of one configuration.
|
||||||
rem
|
rem
|
||||||
rem Usage:
|
rem Usage:
|
||||||
rem clean.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
rem clean.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
||||||
rem
|
rem
|
||||||
rem Examples:
|
rem Examples:
|
||||||
rem clean.bat PHASE_SCANNING Release OFF
|
rem clean.bat Release OFF
|
||||||
rem clean.bat MECHANICAL_SCANNING Debug ON
|
rem clean.bat Debug ON
|
||||||
rem
|
rem
|
||||||
rem The directory removed is the same one configure.bat/build.bat use:
|
rem The directory removed is the same one configure.bat/build.bat use:
|
||||||
rem build\<X256_PS^|X256_MS^>\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
rem build\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
||||||
rem Use clean_all.bat to clean every configuration at once.
|
rem Use clean_all.bat to clean every configuration at once.
|
||||||
rem
|
rem
|
||||||
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
rem ===========================================================================
|
rem ===========================================================================
|
||||||
setlocal
|
setlocal
|
||||||
if "%~1"=="" goto :usage
|
if "%~1"=="" goto :usage
|
||||||
if "%~2"=="" goto :usage
|
|
||||||
|
|
||||||
call "%~dp0config_paths.bat" "%~1" "%~2" "%~3"
|
call "%~dp0config_paths.bat" "%~1" "%~2"
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
|
|
||||||
pushd "%~dp0..\.."
|
pushd "%~dp0..\.."
|
||||||
@@ -40,5 +39,5 @@ popd
|
|||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
:usage
|
:usage
|
||||||
echo Usage: clean.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
echo Usage: clean.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
|||||||
Vendored
+16
-14
@@ -6,10 +6,10 @@ rem Usage:
|
|||||||
rem clean_all.bat
|
rem clean_all.bat
|
||||||
rem
|
rem
|
||||||
rem Build layout (see config_paths.bat):
|
rem Build layout (see config_paths.bat):
|
||||||
rem build\<X256_PS^|X256_MS^>\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
rem build\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
||||||
rem
|
rem
|
||||||
rem A legacy single-configuration build tree (build\X256_PS or build\X256_MS
|
rem The legacy per-scan-mode roots build\X256_PS and build\X256_MS (used before
|
||||||
rem containing CMakeCache.txt directly) is removed as a whole as well.
|
rem the mechanical/phase variants were merged) are removed as a whole as well.
|
||||||
rem build\output (archived package export) is never touched.
|
rem build\output (archived package export) is never touched.
|
||||||
rem
|
rem
|
||||||
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
@@ -17,19 +17,21 @@ rem ===========================================================================
|
|||||||
setlocal EnableExtensions
|
setlocal EnableExtensions
|
||||||
pushd "%~dp0..\.."
|
pushd "%~dp0..\.."
|
||||||
set "FAILED="
|
set "FAILED="
|
||||||
|
|
||||||
|
rem legacy layout: one root per scan mode (contains its own build tree directly)
|
||||||
for %%S in (X256_PS X256_MS) do (
|
for %%S in (X256_PS X256_MS) do (
|
||||||
if exist "build\%%S\CMakeCache.txt" (
|
call :remove "build\%%S"
|
||||||
call :remove "build\%%S"
|
|
||||||
) else (
|
|
||||||
for %%T in (Debug Release) do (
|
|
||||||
for %%R in (REC_AUTO REC_OFF REC_ON) do (
|
|
||||||
call :remove "build\%%S\%%T\%%R"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
rem drop the directory root when every configuration is gone
|
|
||||||
rmdir "build\%%S" 2>nul
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
rem current layout: build\<Debug|Release>\<REC_*>
|
||||||
|
for %%T in (Debug Release) do (
|
||||||
|
for %%R in (REC_AUTO REC_OFF REC_ON) do (
|
||||||
|
call :remove "build\%%T\%%R"
|
||||||
|
)
|
||||||
|
rem drop the build type root when every configuration is gone
|
||||||
|
rmdir "build\%%T" 2>nul
|
||||||
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo [clean_all] archived package export "build\output" left untouched
|
echo [clean_all] archived package export "build\output" left untouched
|
||||||
if defined FAILED (
|
if defined FAILED (
|
||||||
|
|||||||
Vendored
+13
-28
@@ -3,54 +3,39 @@ rem ===========================================================================
|
|||||||
rem Derive the build directory of one build configuration.
|
rem Derive the build directory of one build configuration.
|
||||||
rem
|
rem
|
||||||
rem Internal helper, called by configure.bat / build.bat / clean.bat /
|
rem Internal helper, called by configure.bat / build.bat / clean.bat /
|
||||||
rem build_all.bat as:
|
rem build_config.bat as:
|
||||||
rem call config_paths.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
rem call config_paths.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
||||||
rem
|
rem
|
||||||
rem Accepted aliases: X256_PS = PHASE_SCANNING, X256_MS = MECHANICAL_SCANNING.
|
rem The mechanical-scanning and phase-scanning variants are merged into one
|
||||||
|
rem build since V1.5.9, so a configuration is only build type + record mode.
|
||||||
|
rem The scan mode is a runtime config item (TOML [radar_params] scan_mode).
|
||||||
rem
|
rem
|
||||||
rem On success the following variables are exported into the caller scope:
|
rem On success the following variables are exported into the caller scope:
|
||||||
rem SCAN_MODE PHASE_SCANNING / MECHANICAL_SCANNING
|
|
||||||
rem SCAN_TAG X256_PS / X256_MS
|
|
||||||
rem BUILD_TYPE Debug / Release
|
rem BUILD_TYPE Debug / Release
|
||||||
rem RECORD_MODE AUTO / ON / OFF
|
rem RECORD_MODE AUTO / ON / OFF
|
||||||
rem REC_TAG REC_AUTO / REC_OFF / REC_ON
|
rem REC_TAG REC_AUTO / REC_OFF / REC_ON
|
||||||
rem BUILD_DIR build\<SCAN_TAG>\<BUILD_TYPE>\<REC_TAG>
|
rem BUILD_DIR build\<BUILD_TYPE>\<REC_TAG>
|
||||||
rem
|
rem
|
||||||
rem Exit code: 0 = ok, 1 = invalid configuration.
|
rem Exit code: 0 = ok, 1 = invalid configuration.
|
||||||
rem
|
rem
|
||||||
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
||||||
rem ===========================================================================
|
rem ===========================================================================
|
||||||
set "SCAN_MODE="
|
|
||||||
set "SCAN_TAG="
|
|
||||||
set "BUILD_TYPE="
|
set "BUILD_TYPE="
|
||||||
set "RECORD_MODE="
|
set "RECORD_MODE="
|
||||||
set "REC_TAG="
|
set "REC_TAG="
|
||||||
set "BUILD_DIR="
|
set "BUILD_DIR="
|
||||||
|
|
||||||
if "%~1"=="" goto :usage
|
if "%~1"=="" goto :usage
|
||||||
if "%~2"=="" goto :usage
|
|
||||||
|
|
||||||
if /i "%~1"=="PHASE_SCANNING" set "SCAN_MODE=PHASE_SCANNING"
|
if /i "%~1"=="Debug" set "BUILD_TYPE=Debug"
|
||||||
if /i "%~1"=="X256_PS" set "SCAN_MODE=PHASE_SCANNING"
|
if /i "%~1"=="Release" set "BUILD_TYPE=Release"
|
||||||
if /i "%~1"=="MECHANICAL_SCANNING" set "SCAN_MODE=MECHANICAL_SCANNING"
|
|
||||||
if /i "%~1"=="X256_MS" set "SCAN_MODE=MECHANICAL_SCANNING"
|
|
||||||
if not defined SCAN_MODE (
|
|
||||||
echo [ERROR] invalid scan mode: "%~1"
|
|
||||||
echo expected PHASE_SCANNING / X256_PS or MECHANICAL_SCANNING / X256_MS
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
if "%SCAN_MODE%"=="PHASE_SCANNING" set "SCAN_TAG=X256_PS"
|
|
||||||
if "%SCAN_MODE%"=="MECHANICAL_SCANNING" set "SCAN_TAG=X256_MS"
|
|
||||||
|
|
||||||
if /i "%~2"=="Debug" set "BUILD_TYPE=Debug"
|
|
||||||
if /i "%~2"=="Release" set "BUILD_TYPE=Release"
|
|
||||||
if not defined BUILD_TYPE (
|
if not defined BUILD_TYPE (
|
||||||
echo [ERROR] invalid build type: "%~2"
|
echo [ERROR] invalid build type: "%~1"
|
||||||
echo expected Debug or Release
|
echo expected Debug or Release
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
if not "%~3"=="" set "RECORD_MODE=%~3"
|
if not "%~2"=="" set "RECORD_MODE=%~2"
|
||||||
if not defined RECORD_MODE set "RECORD_MODE=AUTO"
|
if not defined RECORD_MODE set "RECORD_MODE=AUTO"
|
||||||
if /i "%RECORD_MODE%"=="AUTO" set "RECORD_MODE=AUTO"
|
if /i "%RECORD_MODE%"=="AUTO" set "RECORD_MODE=AUTO"
|
||||||
if /i "%RECORD_MODE%"=="ON" set "RECORD_MODE=ON"
|
if /i "%RECORD_MODE%"=="ON" set "RECORD_MODE=ON"
|
||||||
@@ -59,14 +44,14 @@ if "%RECORD_MODE%"=="AUTO" set "REC_TAG=REC_AUTO"
|
|||||||
if "%RECORD_MODE%"=="ON" set "REC_TAG=REC_ON"
|
if "%RECORD_MODE%"=="ON" set "REC_TAG=REC_ON"
|
||||||
if "%RECORD_MODE%"=="OFF" set "REC_TAG=REC_OFF"
|
if "%RECORD_MODE%"=="OFF" set "REC_TAG=REC_OFF"
|
||||||
if not defined REC_TAG (
|
if not defined REC_TAG (
|
||||||
echo [ERROR] invalid record mode: "%~3"
|
echo [ERROR] invalid record mode: "%~2"
|
||||||
echo expected AUTO or ON or OFF
|
echo expected AUTO or ON or OFF
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
set "BUILD_DIR=build\%SCAN_TAG%\%BUILD_TYPE%\%REC_TAG%"
|
set "BUILD_DIR=build\%BUILD_TYPE%\%REC_TAG%"
|
||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
:usage
|
:usage
|
||||||
echo Usage: config_paths.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
echo Usage: config_paths.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
|||||||
Vendored
+11
-12
@@ -3,17 +3,18 @@ rem ===========================================================================
|
|||||||
rem CMake configure script (MSVC 2022 / v143, C++17, x64, NMake Makefiles)
|
rem CMake configure script (MSVC 2022 / v143, C++17, x64, NMake Makefiles)
|
||||||
rem
|
rem
|
||||||
rem Usage:
|
rem Usage:
|
||||||
rem configure.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
rem configure.bat ^<Debug^|Release^> [AUTO^|ON^|OFF]
|
||||||
rem
|
rem
|
||||||
rem Examples:
|
rem Examples:
|
||||||
rem configure.bat PHASE_SCANNING Release OFF
|
rem configure.bat Release OFF
|
||||||
rem configure.bat MECHANICAL_SCANNING Debug ON
|
rem configure.bat Debug ON
|
||||||
rem
|
rem
|
||||||
rem The build directory is derived from the configuration tuple (see
|
rem The build directory is derived from the configuration (see
|
||||||
rem config_paths.bat), so every configuration has its own build tree:
|
rem config_paths.bat): build\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
||||||
rem build\<X256_PS^|X256_MS^>\<Debug^|Release^>\<REC_AUTO^|REC_OFF^|REC_ON^>
|
rem The mechanical-scanning and phase-scanning variants are merged into one
|
||||||
|
rem build; the scan mode is a runtime config item (TOML [radar_params] scan_mode).
|
||||||
rem
|
rem
|
||||||
rem The 3rd argument selects the optional data-recording debug feature
|
rem The 2nd argument selects the optional data-recording debug feature
|
||||||
rem (CMake cache variable RDP_DATA_RECORD). When it is omitted, CMake's AUTO
|
rem (CMake cache variable RDP_DATA_RECORD). When it is omitted, CMake's AUTO
|
||||||
rem default applies: Debug = enabled, Release = disabled.
|
rem default applies: Debug = enabled, Release = disabled.
|
||||||
rem See docs/data_record_debug.md.
|
rem See docs/data_record_debug.md.
|
||||||
@@ -26,13 +27,12 @@ rem Encoding: keep this file ASCII-only (see msvc_env.bat).
|
|||||||
rem ===========================================================================
|
rem ===========================================================================
|
||||||
setlocal
|
setlocal
|
||||||
if "%~1"=="" goto :usage
|
if "%~1"=="" goto :usage
|
||||||
if "%~2"=="" goto :usage
|
|
||||||
|
|
||||||
call "%~dp0config_paths.bat" "%~1" "%~2" "%~3"
|
call "%~dp0config_paths.bat" "%~1" "%~2"
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
|
|
||||||
echo [configure] build dir : %BUILD_DIR%
|
echo [configure] build dir : %BUILD_DIR%
|
||||||
echo [configure] settings : %SCAN_MODE% / %BUILD_TYPE% / RDP_DATA_RECORD=%RECORD_MODE%
|
echo [configure] settings : %BUILD_TYPE% / RDP_DATA_RECORD=%RECORD_MODE%
|
||||||
|
|
||||||
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
rem Load the MSVC 2022 environment (vcvarsall.bat + cl.exe existence check).
|
||||||
call "%~dp0msvc_env.bat"
|
call "%~dp0msvc_env.bat"
|
||||||
@@ -56,7 +56,6 @@ if exist "%BUILD_DIR%" (
|
|||||||
echo [configure] compiler : %MSVC_CXX_COMPILER%
|
echo [configure] compiler : %MSVC_CXX_COMPILER%
|
||||||
cmake -S . -B "%BUILD_DIR%" -G "NMake Makefiles" ^
|
cmake -S . -B "%BUILD_DIR%" -G "NMake Makefiles" ^
|
||||||
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
|
-DCMAKE_BUILD_TYPE=%BUILD_TYPE% ^
|
||||||
-DRADAR_SCAN_MODE=%SCAN_MODE% ^
|
|
||||||
-DRDP_DATA_RECORD=%RECORD_MODE% ^
|
-DRDP_DATA_RECORD=%RECORD_MODE% ^
|
||||||
-DCMAKE_CXX_COMPILER="%MSVC_CXX_COMPILER%"
|
-DCMAKE_CXX_COMPILER="%MSVC_CXX_COMPILER%"
|
||||||
set "CMAKE_EXIT=%errorlevel%"
|
set "CMAKE_EXIT=%errorlevel%"
|
||||||
@@ -71,5 +70,5 @@ popd
|
|||||||
exit /b 0
|
exit /b 0
|
||||||
|
|
||||||
:usage
|
:usage
|
||||||
echo Usage: configure.bat ^<PHASE_SCANNING^|MECHANICAL_SCANNING^> ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
echo Usage: configure.bat ^<Debug^|Release^> [AUTO^|ON^|OFF^]
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
|||||||
Vendored
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"cmake.configureOnOpen": false,
|
"cmake.configureOnOpen": false,
|
||||||
"cmake.generator": "NMake Makefiles",
|
"cmake.generator": "NMake Makefiles",
|
||||||
"cmake.buildDirectory": "${workspaceFolder}/build/${variant:scanMode}/${buildType}/${variant:recordMode}",
|
"cmake.buildDirectory": "${workspaceFolder}/build/${buildType}/${variant:recordMode}",
|
||||||
"cmake.configureArgs": [
|
"cmake.configureArgs": [
|
||||||
"-DCMAKE_CXX_COMPILER=D:/APP/VisualStudio2022/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
|
"-DCMAKE_CXX_COMPILER=D:/APP/VisualStudio2022/VC/Tools/MSVC/14.44.35207/bin/Hostx64/x64/cl.exe"
|
||||||
],
|
],
|
||||||
@@ -12,5 +12,5 @@
|
|||||||
},
|
},
|
||||||
"C_Cpp.default.cppStandard": "c++17",
|
"C_Cpp.default.cppStandard": "c++17",
|
||||||
"C_Cpp.default.intelliSenseMode": "windows-msvc-x64",
|
"C_Cpp.default.intelliSenseMode": "windows-msvc-x64",
|
||||||
"C_Cpp.default.compileCommands": "${workspaceFolder}/build/X256_PS/Debug/REC_ON/compile_commands.json"
|
"C_Cpp.default.compileCommands": "${workspaceFolder}/build/Debug/REC_ON/compile_commands.json"
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+13
-13
@@ -6,7 +6,7 @@
|
|||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
"label": "清理全部",
|
"label": "清理全部",
|
||||||
"detail": "删除 build/<X256_PS|X256_MS>/<Debug|Release>/<REC_*> 下所有配置的构建输出(build/output 打包留档不动)",
|
"detail": "删除 build/<Debug|Release>/<REC_*> 下所有配置的构建输出(含旧版 build/X256_PS、build/X256_MS;build/output 打包留档不动)",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "${workspaceFolder}\\.vscode\\scripts\\clean_all.bat",
|
"command": "${workspaceFolder}\\.vscode\\scripts\\clean_all.bat",
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "配置并构建全部(Release/REC_OFF)",
|
"label": "配置并构建(Release/REC_OFF)",
|
||||||
"detail": "Release + RDP_DATA_RECORD=OFF:X256_PS 与 X256_MS 分别配置并构建",
|
"detail": "Release + RDP_DATA_RECORD=OFF(机扫/相扫已合并为同一版本,单次构建一个配置)",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "${workspaceFolder}\\.vscode\\scripts\\build_all.bat",
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build_config.bat",
|
||||||
"args": [
|
"args": [
|
||||||
"Release",
|
"Release",
|
||||||
"OFF"
|
"OFF"
|
||||||
@@ -38,10 +38,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "配置并构建全部(Release/REC_ON)",
|
"label": "配置并构建(Release/REC_ON)",
|
||||||
"detail": "Release + RDP_DATA_RECORD=ON:X256_PS 与 X256_MS 分别配置并构建",
|
"detail": "Release + RDP_DATA_RECORD=ON(机扫/相扫已合并为同一版本,单次构建一个配置)",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "${workspaceFolder}\\.vscode\\scripts\\build_all.bat",
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build_config.bat",
|
||||||
"args": [
|
"args": [
|
||||||
"Release",
|
"Release",
|
||||||
"ON"
|
"ON"
|
||||||
@@ -56,10 +56,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "配置并构建全部(Debug/REC_OFF)",
|
"label": "配置并构建(Debug/REC_OFF)",
|
||||||
"detail": "Debug + RDP_DATA_RECORD=OFF:X256_PS 与 X256_MS 分别配置并构建",
|
"detail": "Debug + RDP_DATA_RECORD=OFF(机扫/相扫已合并为同一版本,单次构建一个配置)",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "${workspaceFolder}\\.vscode\\scripts\\build_all.bat",
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build_config.bat",
|
||||||
"args": [
|
"args": [
|
||||||
"Debug",
|
"Debug",
|
||||||
"OFF"
|
"OFF"
|
||||||
@@ -74,10 +74,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "配置并构建全部(Debug/REC_ON)",
|
"label": "配置并构建(Debug/REC_ON)",
|
||||||
"detail": "Debug + RDP_DATA_RECORD=ON:X256_PS 与 X256_MS 分别配置并构建",
|
"detail": "Debug + RDP_DATA_RECORD=ON(机扫/相扫已合并为同一版本,单次构建一个配置)",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"command": "${workspaceFolder}\\.vscode\\scripts\\build_all.bat",
|
"command": "${workspaceFolder}\\.vscode\\scripts\\build_config.bat",
|
||||||
"args": [
|
"args": [
|
||||||
"Debug",
|
"Debug",
|
||||||
"ON"
|
"ON"
|
||||||
|
|||||||
+16
-14
@@ -15,10 +15,10 @@
|
|||||||
- **示例配置文件 `config/config_tmp.toml`(参数配置方式改造)**:11 个配置段与 `RDP_parameter` 的注释分组一一对应,键名与结构体成员名完全一致(`[radar_params]`、`[cohesion]`、`[track_associate]`、`[track_init]`、`[track_die]`、`[track_quality]`、`[track_index]`、`[beam_control]`、`[singer_model]` 为标量段,两个屏蔽区段用与成员同名的 TOML 数组,样例为 `*_num = 0` + 空数组);数值与改造前的宏/`RadarPara` 默认值一致。
|
- **示例配置文件 `config/config_tmp.toml`(参数配置方式改造)**:11 个配置段与 `RDP_parameter` 的注释分组一一对应,键名与结构体成员名完全一致(`[radar_params]`、`[cohesion]`、`[track_associate]`、`[track_init]`、`[track_die]`、`[track_quality]`、`[track_index]`、`[beam_control]`、`[singer_model]` 为标量段,两个屏蔽区段用与成员同名的 TOML 数组,样例为 `*_num = 0` + 空数组);数值与改造前的宏/`RadarPara` 默认值一致。
|
||||||
- **内置 toml++ v3.4.0 单头文件(参数配置方式改造)**:新增 `third_party/toml/toml.hpp`(MIT,上游单头文件原样保存);`CMakeLists.txt` 的 `SOURCES` 增加 `data_process_class_dll/rdp_parameter_loader.cpp`、`target_include_directories` 增加 `third_party/toml`;`rdp_parameter_loader.cpp` 用 `#pragma warning(push, 0)` / `(pop)` 包裹第三方头,维持 `/W3` 零告警约定。
|
- **内置 toml++ v3.4.0 单头文件(参数配置方式改造)**:新增 `third_party/toml/toml.hpp`(MIT,上游单头文件原样保存);`CMakeLists.txt` 的 `SOURCES` 增加 `data_process_class_dll/rdp_parameter_loader.cpp`、`target_include_directories` 增加 `third_party/toml`;`rdp_parameter_loader.cpp` 用 `#pragma warning(push, 0)` / `(pop)` 包裹第三方头,维持 `/W3` 零告警约定。
|
||||||
- 文档同步(参数配置方式改造):更新 `README.md`(1/2/3/4/5/6/7/8/9/10/11/12/13 节)与 `docs/data_process_flow_report.md` 第 9 节、`docs/track_init_readme.md` 第 13 节等——参数来源改为「TOML 配置文件 → `RDP_parameter`」、宿主调用改为 `parameters_reload`、新增旧参数→新字段对照表、编译期宏清单仅保留非配置常量、已知问题与版本历史同步。
|
- 文档同步(参数配置方式改造):更新 `README.md`(1/2/3/4/5/6/7/8/9/10/11/12/13 节)与 `docs/data_process_flow_report.md` 第 9 节、`docs/track_init_readme.md` 第 13 节等——参数来源改为「TOML 配置文件 → `RDP_parameter`」、宿主调用改为 `parameters_reload`、新增旧参数→新字段对照表、编译期宏清单仅保留非配置常量、已知问题与版本历史同步。
|
||||||
- 新增 `.vscode/scripts/config_paths.bat`:按「扫描体制 / 构建类型 / 记录模式」推导并校验构建目录 `build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`(接受 `X256_PS`/`X256_MS` 别名),供所有构建脚本共用。
|
- 新增 `.vscode/scripts/config_paths.bat`:按「构建类型 / 记录模式」推导并校验构建目录 `build/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`(机扫/相扫合并后不再有扫描体制维度),供所有构建脚本共用。
|
||||||
- 新增 `.vscode/scripts/build_all.bat`:对 `PHASE_SCANNING` 与 `MECHANICAL_SCANNING` 依次「配置 + 构建」,任一配置失败即中止并返回非 0。
|
- 新增 `.vscode/scripts/build_config.bat`:对单个配置「配置 + 构建」,失败即中止并返回非 0(取代原 `build_all.bat`)。
|
||||||
- 新增 `.vscode/scripts/clean_all.bat`:删除全部配置的构建输出(含旧版单一构建目录;`build/output` 打包留档不动)。
|
- 新增 `.vscode/scripts/clean_all.bat`:删除全部配置的构建输出,并清理旧版 `build/X256_PS`、`build/X256_MS` 目录(`build/output` 打包留档不动)。
|
||||||
- `.vscode/tasks.json` 重建为 5 个任务:「清理全部」「配置并构建全部(Release/REC_OFF)」「配置并构建全部(Release/REC_ON)」「配置并构建全部(Debug/REC_OFF)」「配置并构建全部(Debug/REC_ON)」;后 4 个任务内部调用 `build_all.bat`,分别对两种扫描体制配置并构建,默认构建任务为「配置并构建全部(Release/REC_OFF)」。
|
- `.vscode/tasks.json` 重建为 5 个任务:「清理全部」「配置并构建(Release/REC_OFF)」「配置并构建(Release/REC_ON)」「配置并构建(Debug/REC_OFF)」「配置并构建(Debug/REC_ON)」;后 4 个任务内部调用 `build_config.bat` 单次配置并构建,默认构建任务为「配置并构建(Release/REC_OFF)」。
|
||||||
- **数据记录改为异步写线程 + 有界队列(数据记录性能优化,工作区未提交)**:`rdp_record.h` 新增 `rdp_record::Stats`(`enqueued_rows`/`dropped_rows`/`written_rows`/`transactions`/`write_errors`/`queue_peak_bytes`/`queue_peak_rows`)与 `stats()`,新增 6 个异步入队接口 `WritePoints`/`WriteCohesionTWS`/`WriteCohesionTAS`/`WriteTempTracks`/`WriteTrustTracks`/`WriteAssoInfos`(参数为源结构体 `std::vector` 按值、调用点 `std::move`)及对应宏 `RDP_RECORD_POINTS`/`RDP_RECORD_COHESION_TWS`/`RDP_RECORD_COHESION_TAS`/`RDP_RECORD_TEMP_TRACKS`/`RDP_RECORD_TRUST_TRACKS`/`RDP_RECORD_ASSO_INFOS`;`rdp_record.cpp` 的 `Init()` 建库后启动独立写线程(Windows 下 `THREAD_PRIORITY_BELOW_NORMAL`),处理线程只做「收集源结构体 → 一次入队」,实体构造(数组转文本)与写库全部迁移到写线程。
|
- **数据记录改为异步写线程 + 有界队列(数据记录性能优化,工作区未提交)**:`rdp_record.h` 新增 `rdp_record::Stats`(`enqueued_rows`/`dropped_rows`/`written_rows`/`transactions`/`write_errors`/`queue_peak_bytes`/`queue_peak_rows`)与 `stats()`,新增 6 个异步入队接口 `WritePoints`/`WriteCohesionTWS`/`WriteCohesionTAS`/`WriteTempTracks`/`WriteTrustTracks`/`WriteAssoInfos`(参数为源结构体 `std::vector` 按值、调用点 `std::move`)及对应宏 `RDP_RECORD_POINTS`/`RDP_RECORD_COHESION_TWS`/`RDP_RECORD_COHESION_TAS`/`RDP_RECORD_TEMP_TRACKS`/`RDP_RECORD_TRUST_TRACKS`/`RDP_RECORD_ASSO_INFOS`;`rdp_record.cpp` 的 `Init()` 建库后启动独立写线程(Windows 下 `THREAD_PRIORITY_BELOW_NORMAL`),处理线程只做「收集源结构体 → 一次入队」,实体构造(数组转文本)与写库全部迁移到写线程。
|
||||||
- **批量事务与 SQLite 配置(数据记录性能优化)**:写线程按表累积待提交数据,达到 `RDP_RECORD_WRITE_BATCH_ROWS`(默认 4096 行)或等待 `RDP_RECORD_WRITE_MAX_WAIT_MS`(默认 50 ms)后以事务批量提交;SQLite 启用 `journal_mode=WAL`(失败回退默认 journal)、`synchronous=OFF`、`cache_size=-8192`(8 MB)、`busy_timeout=2000`;建表后读取 `sqlite_master` 去掉 `AUTOINCREMENT` 重建为普通 `INTEGER PRIMARY KEY`(重建失败时回退并告警)。
|
- **批量事务与 SQLite 配置(数据记录性能优化)**:写线程按表累积待提交数据,达到 `RDP_RECORD_WRITE_BATCH_ROWS`(默认 4096 行)或等待 `RDP_RECORD_WRITE_MAX_WAIT_MS`(默认 50 ms)后以事务批量提交;SQLite 启用 `journal_mode=WAL`(失败回退默认 journal)、`synchronous=OFF`、`cache_size=-8192`(8 MB)、`busy_timeout=2000`;建表后读取 `sqlite_master` 去掉 `AUTOINCREMENT` 重建为普通 `INTEGER PRIMARY KEY`(重建失败时回退并告警)。
|
||||||
- **有界队列与丢弃计数(数据记录性能优化)**:队列上限 `RDP_RECORD_QUEUE_CAP_BYTES`(默认 64 MB)与 `RDP_RECORD_QUEUE_MAX_BATCHES`(默认 4096 批),写线程跟不上时整批丢弃并累计 `dropped_rows`,日志按 `RDP_RECORD_DROP_LOG_INTERVAL`(默认每 1024 行)限频提示;处理线程不因记录阻塞。
|
- **有界队列与丢弃计数(数据记录性能优化)**:队列上限 `RDP_RECORD_QUEUE_CAP_BYTES`(默认 64 MB)与 `RDP_RECORD_QUEUE_MAX_BATCHES`(默认 4096 批),写线程跟不上时整批丢弃并累计 `dropped_rows`,日志按 `RDP_RECORD_DROP_LOG_INTERVAL`(默认每 1024 行)限频提示;处理线程不因记录阻塞。
|
||||||
@@ -29,23 +29,23 @@
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- **TWS 判圈改由配置项 `scan_mode` 运行时选择(参数配置方式改造)**:`data_process.cpp::data_preprocess()` 原用 `#ifdef PHASE_SCANNING / #else / #endif` 在编译期隔离两套判圈代码,现改为按 `rdp_parameter.scan_mode` 运行时选择——`scan_mode==0`(相扫)判 `Beam_index_aiz <= last_beam_num`,`scan_mode==1`(机扫)判 `Beam_index_aiz == 0`;两种情况都会更新 `last_beam_num`、仅判满圈时 `circle_id++` 并返回 1。行为与旧两套编译期分支**逐分支等价**(相扫首帧因 `last_beam_num` 初值 INT_MAX 仍判满圈;机扫仍以波位号 0 判满圈)。`PHASE_SCANNING` / `MECHANICAL_SCANNING` 宏保留,但只剩以下用途:CMake 缓存变量 `RADAR_SCAN_MODE` 的编译定义与构建目录/任务命名、`parameters.h` 的 `VERSION_INFO`(PS/MS 版本后缀)与 `#pragma message`;**不再决定 `data_process.cpp` 的判圈行为**。配置项与构建体制不一致时不会报错(版本串反映构建体制、判圈行为反映配置),部署时应保持一致。
|
- **TWS 判圈改由配置项 `scan_mode` 运行时选择(参数配置方式改造)**:`data_process.cpp::data_preprocess()` 原用 `#ifdef PHASE_SCANNING / #else / #endif` 在编译期隔离两套判圈代码,现改为按 `rdp_parameter.scan_mode` 运行时选择——`scan_mode==0`(相扫)判 `Beam_index_aiz <= last_beam_num`,`scan_mode==1`(机扫)判 `Beam_index_aiz == 0`;两种情况都会更新 `last_beam_num`、仅判满圈时 `circle_id++` 并返回 1。行为与旧两套编译期分支**逐分支等价**(相扫首帧因 `last_beam_num` 初值 INT_MAX 仍判满圈;机扫仍以波位号 0 判满圈)。`PHASE_SCANNING` / `MECHANICAL_SCANNING` 宏与 `RADAR_SCAN_MODE` 缓存变量随后在「机扫/相扫版本合并」中一并移除(见 Removed),构建不再区分体制;判圈只由配置项 `scan_mode` 决定。
|
||||||
- **本次 `scan_mode` 改动的验证(Lead 实测,2026-10-27)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部重建成功、退出码 0、0 warning 0 error;Release REC_OFF DLL 仍为 331,776 字节、Debug REC_ON 4,694,016 字节(与 `scan_mode` 改动前一致)。② 加载器单元测试 233 项断言全部通过:新增覆盖「样例 `scan_mode=0` 取值正确」「`scan_mode=2` 时加载返回 -1 且错误信息包含 `scan_mode`」,其余既有成功/失败路径(缺文件、语法错、缺键、类型错、未知键、缺段、越界、数组长度不符等)保持通过。③ 公开接口运行期测试(8 配置逐一编译链接运行)各 38 项断言全部通过(原 29 项 + 新增 9 项判圈运行时切换断言):同一份二进制加载样例(`scan_mode=0` 相扫)后波位号 24 → `data_preprocess` 返回 1(判满圈);加载临时配置(`scan_mode=1` 机扫)后波位号 24 → 返回 2、波位号 0 → 返回 1;再切回样例配置并清空后行为一致;PS 与 MS 构建的测试结果相同,证明判圈已完全由配置决定。④ 静态检查:`data_process.cpp` 中 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 已无有效代码引用(仅注释性提及);宏仍存在于 `parameters.h`(`VERSION_INFO` / `#pragma message`)与 `CMakeLists.txt`(`RADAR_SCAN_MODE` 编译定义、构建目录/任务命名);`RDP_parameter` 成员数 = 加载器键数 = TOML 键数 = **63**(新增 `scan_mode` 后),11 个配置段不变。⑤ 记录点当前行号:TWS `RDP_RECORD_POINTS` 在 `data_process.cpp:72`、TAS 分支在 `data_process.cpp:150`。验证程序与日志位于 git 忽略的构建目录中,未入库。
|
- **本次 `scan_mode` 改动的验证(Lead 实测,2026-10-27,机扫/相扫合并前)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部重建成功、退出码 0、0 warning 0 error;Release REC_OFF DLL 仍为 331,776 字节、Debug REC_ON 4,694,016 字节(与 `scan_mode` 改动前一致)。② 加载器单元测试 233 项断言全部通过:新增覆盖「样例 `scan_mode=0` 取值正确」「`scan_mode=2` 时加载返回 -1 且错误信息包含 `scan_mode`」,其余既有成功/失败路径(缺文件、语法错、缺键、类型错、未知键、缺段、越界、数组长度不符等)保持通过。③ 公开接口运行期测试(8 配置逐一编译链接运行)各 38 项断言全部通过(原 29 项 + 新增 9 项判圈运行时切换断言):同一份二进制加载样例(`scan_mode=0` 相扫)后波位号 24 → `data_preprocess` 返回 1(判满圈);加载临时配置(`scan_mode=1` 机扫)后波位号 24 → 返回 2、波位号 0 → 返回 1;再切回样例配置并清空后行为一致;PS 与 MS 构建的测试结果相同,证明判圈已完全由配置决定。④ 静态检查:`data_process.cpp` 中 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 已无有效代码引用(仅注释性提及);宏仍存在于 `parameters.h`(`VERSION_INFO` / `#pragma message`)与 `CMakeLists.txt`(`RADAR_SCAN_MODE` 编译定义、构建目录/任务命名);`RDP_parameter` 成员数 = 加载器键数 = TOML 键数 = **63**(新增 `scan_mode` 后),11 个配置段不变。⑤ 记录点当前行号:TWS `RDP_RECORD_POINTS` 在 `data_process.cpp:72`、TAS 分支在 `data_process.cpp:150`。验证程序与日志位于 git 忽略的构建目录中,未入库。
|
||||||
- **参数来源改为「TOML 配置文件 → `RDP_parameter`」(参数配置方式改造,工作区未提交)**:原先「宿主下发 `struct RadarPara` + `parameters.h` 编译期宏」两条参数来源统一为运行期配置文件;`struct.h::RDP_parameter` 成为工作参数唯一来源,由 `Data_Process::rdp_parameter{}`(零初始化)持有,`parameters_reload()` 成功后才整体替换。改造只替换参数来源,不改变公式、阈值语义与处理流程,默认数值与改造前一致。
|
- **参数来源改为「TOML 配置文件 → `RDP_parameter`」(参数配置方式改造,工作区未提交)**:原先「宿主下发 `struct RadarPara` + `parameters.h` 编译期宏」两条参数来源统一为运行期配置文件;`struct.h::RDP_parameter` 成为工作参数唯一来源,由 `Data_Process::rdp_parameter{}`(零初始化)持有,`parameters_reload()` 成功后才整体替换。改造只替换参数来源,不改变公式、阈值语义与处理流程,默认数值与改造前一致。
|
||||||
- **各模块参数传递方式(参数配置方式改造)**:`kalman`(使用量测误差/频点的 11 个方法:`kalman_filter_init_2dots`、`d_cal_track_init`、`kalman_filter_init_3dots`、`d_cal`、`d_cal_EKF`、`d_cal_with_doppler`、`kalman_filter_EKF`、`kalman_filter`、`d_cal_track_init_EKF`、`d_cal_track_init_with_doppler`、`Bind_speed`)、`dot_coh`/`dot_coh_tas`、`track_asso`/`track_asso_tas`/`track_asso_direct_tracking`、`track_init`/`track_init_direct_tracking`、`track_die`/`track_die_tas`、`track_index_mangement`、`tas_ctrl` 的入口与内部函数新增 `const RDP_parameter& rdp_parameter` 形参(原按值传递的 `struct RadarPara Work_Parameter` 全部删除);无参数依赖的 `kalman_pred` 保持原签名。
|
- **各模块参数传递方式(参数配置方式改造)**:`kalman`(使用量测误差/频点的 11 个方法:`kalman_filter_init_2dots`、`d_cal_track_init`、`kalman_filter_init_3dots`、`d_cal`、`d_cal_EKF`、`d_cal_with_doppler`、`kalman_filter_EKF`、`kalman_filter`、`d_cal_track_init_EKF`、`d_cal_track_init_with_doppler`、`Bind_speed`)、`dot_coh`/`dot_coh_tas`、`track_asso`/`track_asso_tas`/`track_asso_direct_tracking`、`track_init`/`track_init_direct_tracking`、`track_die`/`track_die_tas`、`track_index_mangement`、`tas_ctrl` 的入口与内部函数新增 `const RDP_parameter& rdp_parameter` 形参(原按值传递的 `struct RadarPara Work_Parameter` 全部删除);无参数依赖的 `kalman_pred` 保持原签名。
|
||||||
- **旧宏与旧 `RadarPara` 字段的等价替换(参数配置方式改造)**:如 `SIGMA_R/A/E/V`→`sigma_range/azimuth/pitch/velocity`、`DOT_COH_RANGE/V/AZI`→`point_cohesion_range/velocity/azimuth`、`R_MIN/R_MAX`→`point_cohesion_range_min/max`、`FREQ0`→`freq_0_GHz`、`ASSO_THORD`→`associate_threshold`、`MAX_EXTRAPOLATE_NUM(_TAS)`→`extrapolate_max(_tas)`、`H_F_WIN_LEN`→`height_smooth_win`、`TRACK_START_THRESHOLD/ALPHA_START`→`track_init_threshold/track_init_angle`、`TRACK_START_QUALITY_L3~L7`→`track_init_quality_L3~L7`、`TRACK_DIE_QUALITY(_PRAMARY)/TRACK_DIE_ROUND(_PRIMARY/_TAS)`→`track_die_quality(_pramary)/track_die_round(_pramary/_tas)`、`TRACK_QUALITY_*`→`track_quality_*`、`work_mode/Height/Sys_delay`→`radar_work_mode/radar_height/radar_system_delay`、`track_start_point_num`→`track_init_point_num_min`、`V_MAX/V_MIN`→`track_init_velocity_max/min`、`track_prohibite_area_*`→`track_init_prohibite_area_*`、`TAS_prohibite_area_*`→`tas_prohibite_area_*`、`Model1/2/3_Q_fast/slow`→`model_1/2/3_Q_fast/slow`、`DATA_RATE_SHORT/MIDDLE/FAR`→`data_rate_tws`(契约确认的等价改法)、`DATA_RATE_TAS`→`data_rate_tas`;完整对照见 `README.md` 10.3 节。
|
- **旧宏与旧 `RadarPara` 字段的等价替换(参数配置方式改造)**:如 `SIGMA_R/A/E/V`→`sigma_range/azimuth/pitch/velocity`、`DOT_COH_RANGE/V/AZI`→`point_cohesion_range/velocity/azimuth`、`R_MIN/R_MAX`→`point_cohesion_range_min/max`、`FREQ0`→`freq_0_GHz`、`ASSO_THORD`→`associate_threshold`、`MAX_EXTRAPOLATE_NUM(_TAS)`→`extrapolate_max(_tas)`、`H_F_WIN_LEN`→`height_smooth_win`、`TRACK_START_THRESHOLD/ALPHA_START`→`track_init_threshold/track_init_angle`、`TRACK_START_QUALITY_L3~L7`→`track_init_quality_L3~L7`、`TRACK_DIE_QUALITY(_PRAMARY)/TRACK_DIE_ROUND(_PRIMARY/_TAS)`→`track_die_quality(_pramary)/track_die_round(_pramary/_tas)`、`TRACK_QUALITY_*`→`track_quality_*`、`work_mode/Height/Sys_delay`→`radar_work_mode/radar_height/radar_system_delay`、`track_start_point_num`→`track_init_point_num_min`、`V_MAX/V_MIN`→`track_init_velocity_max/min`、`track_prohibite_area_*`→`track_init_prohibite_area_*`、`TAS_prohibite_area_*`→`tas_prohibite_area_*`、`Model1/2/3_Q_fast/slow`→`model_1/2/3_Q_fast/slow`、`DATA_RATE_SHORT/MIDDLE/FAR`→`data_rate_tws`(契约确认的等价改法)、`DATA_RATE_TAS`→`data_rate_tas`;完整对照见 `README.md` 10.3 节。
|
||||||
- **航迹号、TAS 队列与跟踪波束类型改为按配置分配(参数配置方式改造)**:`track_index_mangement.cpp` 的定长数组 `int List[MAX_TRACK_INDEX]` 改为按 `rdp_parameter.track_index_max` 分配的 `std::vector<int>`;TAS 队列固定容量改用编译期常量 `RDP_TAS_QUEUE_CAPACITY`(30),运行期同时跟踪目标数上限改用配置项 `tas_track_num_max`(加载器校验 0~30,原 `MAX_TAS_NUM` 相扫 4 / 机扫 1);跟踪波束 `Tracking_beam->type` 由硬编码 1 改为配置项 `default_track_beam_type`。
|
- **航迹号、TAS 队列与跟踪波束类型改为按配置分配(参数配置方式改造)**:`track_index_mangement.cpp` 的定长数组 `int List[MAX_TRACK_INDEX]` 改为按 `rdp_parameter.track_index_max` 分配的 `std::vector<int>`;TAS 队列固定容量改用编译期常量 `RDP_TAS_QUEUE_CAPACITY`(30),运行期同时跟踪目标数上限改用配置项 `tas_track_num_max`(加载器校验 0~30,原 `MAX_TAS_NUM` 相扫 4 / 机扫 1);跟踪波束 `Tracking_beam->type` 由硬编码 1 改为配置项 `default_track_beam_type`。
|
||||||
- **`parameters.h` 精简为编译期常量(参数配置方式改造)**:删除全部雷达工作参数宏,仅保留 `PI`、版本宏(`MAJOR_VERSION`/`MINOR_VERSION`/`PATCH_VERSION`/`VERSION_INFO`/`VERSION_STRING`)、日志宏(`RDP_LOG_*`)、记录宏(`RDP_RECORD_*`)、接口容量常量 `MAX_TRACK_NUM`(500)/`RDP_TAS_QUEUE_CAPACITY`(30)与 `Round`;`requirements.md` 同时改写为本次参数配置方式改造的需求说明。
|
- **`parameters.h` 精简为编译期常量(参数配置方式改造)**:删除全部雷达工作参数宏,仅保留 `PI`、版本宏(`MAJOR_VERSION`/`MINOR_VERSION`/`PATCH_VERSION`/`VERSION_INFO`/`VERSION_STRING`)、日志宏(`RDP_LOG_*`)、记录宏(`RDP_RECORD_*`)、接口容量常量 `MAX_TRACK_NUM`(500)/`RDP_TAS_QUEUE_CAPACITY`(30)与 `Round`;`requirements.md` 同时改写为本次参数配置方式改造的需求说明。
|
||||||
- **本次改造的验证(Lead 实测,2026-10-27)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部成功、退出码 0、0 warning 0 error,每个配置均生成 `bin/data_process_class_dll.dll`;Release REC_OFF DLL 体积 331,776 字节(约 324 KB,较改造前约 178 KB 增大,原因是纯头文件的 toml++ 解析器编入 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` 等其余接口不变。③ 加载器单元测试(229 项断言全部通过):样例配置 62 个键逐字段取值正确(含整数/浮点与负的二次/一次衰减系数;该轮为 `scan_mode` 新增前的验证,新增后样例共 63 个键,见上一条 `scan_mode` 验证);文件不存在、空路径、nullptr、TOML 语法错误、缺标量键、类型错误、未知键、缺配置段、取值越界(起批点数 2、`data_rate_tas=0`)、区域数 31、区域方位 min≥max、数组长度与 `*_num` 不一致等失败路径均返回 -1 且不修改当前参数,失败后可重新加载成功;屏蔽区数组按 `*_num` 读取、未使用位置保持 0。④ 公开接口运行期测试(8 个配置逐一编译链接运行,各 29 项断言全部通过):`GetB()`/`version_info`(`V1.5.8.PS`/`V1.5.8.MS`)、`parameters_reload` 成功/失败返回值与「失败后再加载成功」、TWS/TAS 主流程冒烟、`Beam_Ctrl`、`track_clear_all`、`track_delete`/`tracking_start`/`tracking_stop`/`primary_target_add`/`primary_target_cancel`/`tracking_point`、`Destroy()` 后重新 `GetB()` 并再次加载配置均正常。⑤ 静态审计:源码无 `Work_Parameter`/`RadarPara`/旧参数宏残留(区分大小写整词审计 0 命中);首轮验证时 62 个 `RDP_parameter` 成员 ↔ 62 个加载器键 ↔ 62 个 TOML 键一一对应(新增 `scan_mode` 后为 63 个),11 个配置段与加载器一致。验证程序与日志位于 git 忽略的构建目录中,未入库。
|
- **本次改造的验证(Lead 实测,2026-10-27,机扫/相扫合并前)**:① 构建:8 个配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)全部成功、退出码 0、0 warning 0 error,每个配置均生成 `bin/data_process_class_dll.dll`;Release REC_OFF DLL 体积 331,776 字节(约 324 KB,较改造前约 178 KB 增大,原因是纯头文件的 toml++ 解析器编入 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` 等其余接口不变。③ 加载器单元测试(229 项断言全部通过):样例配置 62 个键逐字段取值正确(含整数/浮点与负的二次/一次衰减系数;该轮为 `scan_mode` 新增前的验证,新增后样例共 63 个键,见上一条 `scan_mode` 验证);文件不存在、空路径、nullptr、TOML 语法错误、缺标量键、类型错误、未知键、缺配置段、取值越界(起批点数 2、`data_rate_tas=0`)、区域数 31、区域方位 min≥max、数组长度与 `*_num` 不一致等失败路径均返回 -1 且不修改当前参数,失败后可重新加载成功;屏蔽区数组按 `*_num` 读取、未使用位置保持 0。④ 公开接口运行期测试(8 个配置逐一编译链接运行,各 29 项断言全部通过):`GetB()`/`version_info`(`V1.5.8.PS`/`V1.5.8.MS`)、`parameters_reload` 成功/失败返回值与「失败后再加载成功」、TWS/TAS 主流程冒烟、`Beam_Ctrl`、`track_clear_all`、`track_delete`/`tracking_start`/`tracking_stop`/`primary_target_add`/`primary_target_cancel`/`tracking_point`、`Destroy()` 后重新 `GetB()` 并再次加载配置均正常。⑤ 静态审计:源码无 `Work_Parameter`/`RadarPara`/旧参数宏残留(区分大小写整词审计 0 命中);首轮验证时 62 个 `RDP_parameter` 成员 ↔ 62 个加载器键 ↔ 62 个 TOML 键一一对应(新增 `scan_mode` 后为 63 个),11 个配置段与加载器一致。验证程序与日志位于 git 忽略的构建目录中,未入库。
|
||||||
- 构建目录布局由「每个扫描体制一个目录(Release/Debug 共用、重新配置互相覆盖)」改为按完整配置隔离:`build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`,关闭/开启记录模块的产物可并存、互不覆盖。
|
- **构建脚本适配机扫/相扫合并(本次构建配置调整)**:构建目录由「扫描体制 × 构建类型 × 记录模式」改为「构建类型 × 记录模式」——`build/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`,不再有 `X256_PS`/`X256_MS` 维度。
|
||||||
- `configure.bat` / `build.bat` / `clean.bat` 参数由 `<build-dir> ...` 改为 `<PHASE_SCANNING|MECHANICAL_SCANNING> <Debug|Release> [AUTO|ON|OFF]`,构建目录自动推导;`clean.bat` 由 `cmake --build --target clean` 改为删除该配置的构建目录(因此放在配置目录 `bin/` 下、CMake 不会重建的 `rdp_playback.exe`/回放数据会一并删除,需放到 `build/output/` 或仓库外)。
|
- `config_paths.bat` / `configure.bat` / `build.bat` / `clean.bat` 参数改为 `<Debug|Release> [AUTO|ON|OFF]`,构建目录自动推导;`build_all.bat` 由 `build_config.bat`(单配置「配置 + 构建」)取代,失败即中止并返回非 0;`clean_all.bat` 在清理 4 种配置的同时清理旧版 `build/X256_PS`、`build/X256_MS` 目录(`build/output` 保留)。
|
||||||
- VS Code 配置同步:`settings.json` 的 `cmake.buildDirectory` 改为 `${workspaceFolder}/build/${variant:scanMode}/${buildType}/${variant:recordMode}`、`compileCommands` 指向 `build/X256_PS/Debug/REC_ON/compile_commands.json`;`cmake-variants.yaml` 新增 `recordMode` 变体(REC_AUTO / REC_OFF / REC_ON,映射 `RDP_DATA_RECORD`);`c_cpp_properties.json` 的 `compileCommands` 更新到新目录;`launch.json` 的 `preLaunchTask` 改为「配置并构建全部(Debug/REC_ON)」,`program`/`symbolSearchPath` 指向 `build/X256_PS/Debug/REC_ON/bin`。
|
- VS Code 配置同步:`settings.json` 的 `cmake.buildDirectory` 改为 `${workspaceFolder}/build/${buildType}/${variant:recordMode}`、`compileCommands` 指向 `build/Debug/REC_ON/compile_commands.json`;`cmake-variants.yaml` 移除 `scanMode` 变体(仅保留 `buildType` + `recordMode`);`c_cpp_properties.json` 合并为单个「X256 (MSVC2022 x64)」配置(不再带 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 宏);`launch.json` 的 `preLaunchTask` 改为「配置并构建(Debug/REC_ON)」,`program`/`symbolSearchPath` 指向 `build/Debug/REC_ON/bin`。
|
||||||
- 更新 README(3 节目录结构、4.2~4.4 节构建说明、12 节版本历史、13 节参考文档)与 `docs/data_record_debug.md` 第 2 节构建示例,同步新的构建目录布局、脚本签名与 5 个任务;`requirements.md` 当时更新为构建脚本/VS Code 任务调整需求(其后已由下方「参数配置方式改造」需求整体替换)。
|
- 更新 README(3 节目录结构、4.2~4.5 节构建说明、7.1/10.4/11.2/12/13 节)与 `docs/data_record_debug.md` 第 2 节、`docs/data_process_flow_report.md` 判圈/参数说明、`docs/data_record_perf_report.md` 中的构建路径;`requirements.md` 仍为参数配置方式改造需求(本次未改需求文档)。
|
||||||
- 本次改动的构建验证:5 个任务全部实际执行(清理全部 → Release/REC_OFF → Release/REC_ON → Debug/REC_OFF → Debug/REC_ON),退出码均为 0;8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)构建日志均 0 warning、0 error;每个配置目录均生成 `bin/data_process_class_dll.dll`、`lib/`(REC_ON 另有 `lib/rdp_record.lib`)与 `compile_commands.json`;编译命令中的宏与配置对应(PS 为 `-DPHASE_SCANNING`、MS 为 `-DMECHANICAL_SCANNING`,REC_ON 含 `RDP_RECORD_ENABLE`);「清理全部」删除 8 个配置目录及旧版单一构建目录而 `build/output` 未被删除;错误扫描体制/构建类型/记录模式与未配置即构建等非法路径均返回非 0。补充验证:已构建配置再次执行 `build_all.bat` 为 0 个编译/链接步骤(增量幂等);模拟 MSVC 环境无效时 `build_all.bat` 在第一个配置即中止(未尝试第二个扫描体制,退出码 1);`clean.bat` 单配置清理后目录消失且可正常重建。
|
- **本次构建配置调整的验证(Lead 实测,2026-10-27)**:`CMakeLists.txt` 移除 `RADAR_SCAN_MODE` 后 4 个配置(Release/Debug × REC_OFF/REC_ON)重建成功、退出码 0、0 warning 0 error(已把 `rdp_record` 的 `/W3`、`/Zc:__cplusplus` 限定为 C++ 源文件,消除 sqlite3.c 上 `/w` 覆盖 `/W3` 的 D9025 命令行提示;C 文件仅保留 `/utf-8`/`/FS` 与源文件级 `/w`);产物 DLL 大小 Release REC_OFF 331,776 / Release REC_ON 1,653,248 / Debug REC_OFF 1,718,272 / Debug REC_ON 4,694,528 字节;`compile_commands.json` 中不再含 `PHASE_SCANNING`/`MECHANICAL_SCANNING`/`RADAR_SCAN_MODE`,REC_ON 配置含 `RDP_RECORD_ENABLE`;5 个任务实际执行返回 0;「清理全部」首次执行删除旧版 `build/X256_PS`、`build/X256_MS`,再次执行删除重建后的 4 个新配置目录(`build/output` 保留);已构建配置重复执行 `build_config.bat` 为 0 个编译/链接步骤(增量幂等);模拟 MSVC 环境无效时 `build_config.bat` 立即中止(退出码 1);非法构建类型/记录模式与未配置即构建均返回非 0。
|
||||||
- **12 个业务记录点由「同步构造实体写库」改为「帧/圈内收集源结构体 → 一次入队」(数据记录性能优化)**:`data_process.cpp`(TWS/TAS 输入点迹)、`dot_coh.cpp`、`dot_coh_tas.cpp`、`track_init.cpp`(临时航迹)、`track_asso.cpp`(可靠航迹 + 关联信息按 `RDP_RECORD_ASSO_CHUNK_ROWS` 分块)、`track_asso_tas.cpp`(同)共 12 处;记录时机、条件与记录行数/表列均保持不变;6 个业务文件删除 `#include "rdp_record_entity.h"`,所有新增代码仍在 `#ifdef RDP_RECORD_ENABLE` 内,记录关闭构建零代码、零影响。
|
- **12 个业务记录点由「同步构造实体写库」改为「帧/圈内收集源结构体 → 一次入队」(数据记录性能优化)**:`data_process.cpp`(TWS/TAS 输入点迹)、`dot_coh.cpp`、`dot_coh_tas.cpp`、`track_init.cpp`(临时航迹)、`track_asso.cpp`(可靠航迹 + 关联信息按 `RDP_RECORD_ASSO_CHUNK_ROWS` 分块)、`track_asso_tas.cpp`(同)共 12 处;记录时机、条件与记录行数/表列均保持不变;6 个业务文件删除 `#include "rdp_record_entity.h"`,所有新增代码仍在 `#ifdef RDP_RECORD_ENABLE` 内,记录关闭构建零代码、零影响。
|
||||||
- **记录线程模型与 Shutdown 语义(数据记录性能优化)**:由「处理线程单连接 + 互斥锁串行同步写」改为「处理线程只入队 + 独立写线程承担实体构造与全部写库」;`RDP_RECORD`/`RDP_RECORD_BATCH` 保留为遗留同步接口(在调用线程直接写库、会阻塞,仅供测试/特殊场景);`Shutdown()` 会**排空**队列与 pending 后再关库,并在关库前打印统计。
|
- **记录线程模型与 Shutdown 语义(数据记录性能优化)**:由「处理线程单连接 + 互斥锁串行同步写」改为「处理线程只入队 + 独立写线程承担实体构造与全部写库」;`RDP_RECORD`/`RDP_RECORD_BATCH` 保留为遗留同步接口(在调用线程直接写库、会阻塞,仅供测试/特殊场景);`Shutdown()` 会**排空**队列与 pending 后再关库,并在关库前打印统计。
|
||||||
- **未改变记录语义(数据记录性能优化)**:不采用 P0-a(关联信息裁剪)与 P2(记录策略/轮转),⑥ 仍按每个候选一行写入;跨表写入顺序仍不保证、各表内顺序保持;`REC_OFF` 构建零影响与优化前一致。
|
- **未改变记录语义(数据记录性能优化)**:不采用 P0-a(关联信息裁剪)与 P2(记录策略/轮转),⑥ 仍按每个候选一行写入;跨表写入顺序仍不保证、各表内顺序保持;`REC_OFF` 构建零影响与优化前一致。
|
||||||
- **本次优化的验证(可复查)**:8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)0 warning 0 error;dup 场景 6 圈/200 目标/每帧 150 点 REC_ON vs REC_OFF:普通帧每帧新增 p99 ≈ 0.09~0.11 ms(≤1 ms 阈值内)、判圈帧 `track` 新增中位 ≈ 2.9~4.1 ms(压测 p99 ≈ 13~24 ms,因未采用 P0-a,属压测上限),受控 50 目标/50 点场景判圈帧新增中位约 3 ms、最大 5.96 ms;记录行数与改动前完全一致(`RdpRecPoint` 90,000 / `RdpRecPointCohesionTWS` 4,170 / `RdpRecAssoInfo` 211,584 / `RdpRecTempTrack` 8,330 / `RdpRecTrustTrack` 304,合计 314,388),`integrity_check=ok`、DDL 无 `AUTOINCREMENT`、`journal_mode=wal`、id 严格递增、`dropped_rows=0`;60 圈长跑 9,987,370 行、`dropped_rows=0`、`write_errors=0`、队列峰值约 19.8 MB、DB 约 1.06 GB;故障注入(记录目录不可建时 `Init` 静默失败、驱动正常;小队列测试构建丢弃 314,388 行且计数正确)与 `Destroy()`→`GetB()` 重连(两个独立 db 均正常写入)测试通过。原始日志与验收脚本位于 git 忽略的 `build/analysis/verify/`。
|
- **本次优化的验证(可复查,机扫/相扫合并前)**:8 种配置(X256_PS/X256_MS × Release/Debug × REC_OFF/REC_ON)0 warning 0 error(合并后 4 种配置的构建验证见上文「构建脚本适配机扫/相扫合并」);dup 场景 6 圈/200 目标/每帧 150 点 REC_ON vs REC_OFF:普通帧每帧新增 p99 ≈ 0.09~0.11 ms(≤1 ms 阈值内)、判圈帧 `track` 新增中位 ≈ 2.9~4.1 ms(压测 p99 ≈ 13~24 ms,因未采用 P0-a,属压测上限),受控 50 目标/50 点场景判圈帧新增中位约 3 ms、最大 5.96 ms;记录行数与改动前完全一致(`RdpRecPoint` 90,000 / `RdpRecPointCohesionTWS` 4,170 / `RdpRecAssoInfo` 211,584 / `RdpRecTempTrack` 8,330 / `RdpRecTrustTrack` 304,合计 314,388),`integrity_check=ok`、DDL 无 `AUTOINCREMENT`、`journal_mode=wal`、id 严格递增、`dropped_rows=0`;60 圈长跑 9,987,370 行、`dropped_rows=0`、`write_errors=0`、队列峰值约 19.8 MB、DB 约 1.06 GB;故障注入(记录目录不可建时 `Init` 静默失败、驱动正常;小队列测试构建丢弃 314,388 行且计数正确)与 `Destroy()`→`GetB()` 重连(两个独立 db 均正常写入)测试通过。原始日志与验收脚本位于 git 忽略的 `build/analysis/verify/`。
|
||||||
- **相扫 TAS 航迹消亡圈数放宽(5d105d2,`parameters.h`)**:`TRACK_DIE_ROUND_TAS` 由 10 调整为 **20**(仅相扫;机扫保持 96)。因判据为 `Extrapolate_round > 阈值`,相扫 TAS 航迹实际由「连续 11 圈无实点关联消亡」放宽为「连续 21 圈」才消亡,便于 TAS 目标在短时丢点后重新关联。
|
- **相扫 TAS 航迹消亡圈数放宽(5d105d2,`parameters.h`)**:`TRACK_DIE_ROUND_TAS` 由 10 调整为 **20**(仅相扫;机扫保持 96)。因判据为 `Extrapolate_round > 阈值`,相扫 TAS 航迹实际由「连续 11 圈无实点关联消亡」放宽为「连续 21 圈」才消亡,便于 TAS 目标在短时丢点后重新关联。
|
||||||
- **TAS 高度平滑窗口加长(6284f3f)**:`track_asso_tas.cpp::track_hight_update()` 的分段偏移由 `H_F_WIN_LEN + {2,3,4,6}` 改为 `H_F_WIN_LEN + {6,8,10,12}`;同时相扫 `H_F_WIN_LEN` 由 3 调整为 **6**(机扫仍为 3)。合并效果:相扫 TAS 窗口 12/14/16/18 点、机扫 TAS 窗口 9/11/13/15 点(原为 5/6/7/9);TWS 仍用 `H_F_WIN_LEN + {2,3,4,6}`,相扫因此由 5/6/7/9 变为 **8/9/10/12**、机扫保持 5/6/7/9。
|
- **TAS 高度平滑窗口加长(6284f3f)**:`track_asso_tas.cpp::track_hight_update()` 的分段偏移由 `H_F_WIN_LEN + {2,3,4,6}` 改为 `H_F_WIN_LEN + {6,8,10,12}`;同时相扫 `H_F_WIN_LEN` 由 3 调整为 **6**(机扫仍为 3)。合并效果:相扫 TAS 窗口 12/14/16/18 点、机扫 TAS 窗口 9/11/13/15 点(原为 5/6/7/9);TWS 仍用 `H_F_WIN_LEN + {2,3,4,6}`,相扫因此由 5/6/7/9 变为 **8/9/10/12**、机扫保持 5/6/7/9。
|
||||||
|
|
||||||
@@ -55,13 +55,15 @@
|
|||||||
- 修正文档中把参数来源写成「`parameters.h` 编译期宏 / 宿主下发 `RadarPara`」的过期描述(本次文档更新,对应参数配置方式改造):README 2、3、4.2、5.1、5.2、6.1、6.2、7.1、7.3、8.1~8.3、9.1~9.11、10、11、12、13 节与 `docs/data_process_flow_report.md` 第 9/10 节、`docs/track_init_readme.md` 第 1/2/4/6/8/10/11~16 节按源码同步——参数来源改为 TOML 配置文件 → `RDP_parameter`、旧宏改记为「原 …」并给出新字段名、新增 `parameters_reload` 调用方式与旧→新对照,数值未变。
|
- 修正文档中把参数来源写成「`parameters.h` 编译期宏 / 宿主下发 `RadarPara`」的过期描述(本次文档更新,对应参数配置方式改造):README 2、3、4.2、5.1、5.2、6.1、6.2、7.1、7.3、8.1~8.3、9.1~9.11、10、11、12、13 节与 `docs/data_process_flow_report.md` 第 9/10 节、`docs/track_init_readme.md` 第 1/2/4/6/8/10/11~16 节按源码同步——参数来源改为 TOML 配置文件 → `RDP_parameter`、旧宏改记为「原 …」并给出新字段名、新增 `parameters_reload` 调用方式与旧→新对照,数值未变。
|
||||||
- 修正文档中 TAS 航迹消亡圈数与高度平滑窗口的过期数值(本次文档更新):README 2/5.2/9.7/9.9/10.1 节与 `docs/data_process_flow_report.md` 4.6、6.1、9.1 节按 5d105d2、6284f3f 同步为「相扫 TAS 20 圈 / 机扫 96」、「相扫 H_F_WIN_LEN=6、TAS 偏移 +6/+8/+10/+12」。
|
- 修正文档中 TAS 航迹消亡圈数与高度平滑窗口的过期数值(本次文档更新):README 2/5.2/9.7/9.9/10.1 节与 `docs/data_process_flow_report.md` 4.6、6.1、9.1 节按 5d105d2、6284f3f 同步为「相扫 TAS 20 圈 / 机扫 96」、「相扫 H_F_WIN_LEN=6、TAS 偏移 +6/+8/+10/+12」。
|
||||||
- 修正 `docs/data_record_debug.md` 中「质量字段尚未加入记录实体」的过期描述(本次文档更新,对应 1ffb287):字段速查与记录点说明补齐 `quality` / `Quality` / `Unupdated_time` / `Point_sum` / `Valid_point_sum`。
|
- 修正 `docs/data_record_debug.md` 中「质量字段尚未加入记录实体」的过期描述(本次文档更新,对应 1ffb287):字段速查与记录点说明补齐 `quality` / `Quality` / `Unupdated_time` / `Point_sum` / `Valid_point_sum`。
|
||||||
|
- 文档同步「机扫/相扫版本合并」后的构建配置(本次文档更新):README 3/4.2~4.5/7.1/10.4/11.2/12/13 节、`docs/data_record_debug.md` 第 2 节、`docs/data_process_flow_report.md` 2.2 与第 9 节、`docs/data_record_perf_report.md` 构建路径——构建目录去掉扫描体制维度、脚本签名与任务名同步、版本串改为 `V1.5.9.GENERIC`、删除「构建体制宏」相关说明。
|
||||||
|
|
||||||
### Removed
|
### Removed
|
||||||
|
|
||||||
- **删除 `struct RadarPara` 与两个旧公开虚接口(参数配置方式改造)**:`data_process_class_dll.h` 中的 `struct RadarPara` 及 `track_process_parameters_initial(RadarPara)` / `track_process_parameters_modify(RadarPara)` 整体删除,由 `parameters_reload(const char*)` 取代;`data_process.h` 中的 `struct RadarPara Work_Parameter` 删除。旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`)未进入新结构体(相应自动 TAS 逻辑仍保持停用)。
|
- **删除 `struct RadarPara` 与两个旧公开虚接口(参数配置方式改造)**:`data_process_class_dll.h` 中的 `struct RadarPara` 及 `track_process_parameters_initial(RadarPara)` / `track_process_parameters_modify(RadarPara)` 整体删除,由 `parameters_reload(const char*)` 取代;`data_process.h` 中的 `struct RadarPara Work_Parameter` 删除。旧 `RadarPara` 中实现未使用的字段(`R_TAS_max/min`、`V_TAS_max/min`、`TAS_Height_1~5`、`cfar_th`、`north_angle`、`Beam_num`)未进入新结构体(相应自动 TAS 逻辑仍保持停用)。
|
||||||
- **删除 `parameters.h` 中的雷达工作参数宏(参数配置方式改造)**:`SIGMA_R/A/E/V`、`DOT_COH_RANGE/V/AZI`、`R_MIN`/`R_MAX`、`FREQ0`、`ASSO_THORD`、`MAX_EXTRAPOLATE_NUM(_TAS)`、`H_F_WIN_LEN`、`TRACK_START_THRESHOLD`、`ALPHA_START`、`TRACK_START_QUALITY_L3~L7`、`TRACK_DIE_*`、`TRACK_QUALITY_*`、`MAX_TRACK_INDEX`、`MAX_TAS_NUM`、`TAS_QUEUE_LENGTH`、`DATA_RATE_*`(含 `H_F_WIN_LEN`、`MAX_BEAM_NUM`、`ASSOCIATE_THRESHOLD_MIN/MID/MAX`、`DIRECT_TRACKING_QUEUE_LENGTH` 等)以及已注释的 `V_MAX`/`V_MIN` 残留;这些参数改由配置文件提供(见 `README.md` 10.1~10.3)。
|
- **删除 `parameters.h` 中的雷达工作参数宏(参数配置方式改造)**:`SIGMA_R/A/E/V`、`DOT_COH_RANGE/V/AZI`、`R_MIN`/`R_MAX`、`FREQ0`、`ASSO_THORD`、`MAX_EXTRAPOLATE_NUM(_TAS)`、`H_F_WIN_LEN`、`TRACK_START_THRESHOLD`、`ALPHA_START`、`TRACK_START_QUALITY_L3~L7`、`TRACK_DIE_*`、`TRACK_QUALITY_*`、`MAX_TRACK_INDEX`、`MAX_TAS_NUM`、`TAS_QUEUE_LENGTH`、`DATA_RATE_*`(含 `H_F_WIN_LEN`、`MAX_BEAM_NUM`、`ASSOCIATE_THRESHOLD_MIN/MID/MAX`、`DIRECT_TRACKING_QUEUE_LENGTH` 等)以及已注释的 `V_MAX`/`V_MIN` 残留;这些参数改由配置文件提供(见 `README.md` 10.1~10.3)。
|
||||||
- **删除 `UNCONF_TARGET` 宏(参数配置方式改造)**:`parameters.h` 的未确认目标类型语义常量 `UNCONF_TARGET`(0)删除,`track_init.cpp` / `track_init_direct_tracking.cpp` 起批处 `Target_Type` 改为直接写 0,语义不变。
|
- **删除 `UNCONF_TARGET` 宏(参数配置方式改造)**:`parameters.h` 的未确认目标类型语义常量 `UNCONF_TARGET`(0)删除,`track_init.cpp` / `track_init_direct_tracking.cpp` 起批处 `Target_Type` 改为直接写 0,语义不变。
|
||||||
- 删除 `tasks.json` 中原有的 15 个任务(`CMake: 配置 X256_PS|X256_MS`、`CMake: 构建 ...`、`CMake: 清理 ...`、`CMake: 配置并构建 ...` 等),改为上述 5 个任务。
|
- **移除构建期的机扫/相扫版本区分(机扫/相扫版本合并)**:`CMakeLists.txt` 删除 `RADAR_SCAN_MODE` 缓存变量、取值校验与 `target_compile_definitions` 中的 `${RADAR_SCAN_MODE}`;构建不再定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING`,`parameters.h` 的 `VERSION_INFO` 由 PS/MS 改为固定 `"GENERIC"`(版本号 1.5.9,版本串 `V1.5.9.GENERIC`);扫描模式只由运行期配置项 `[radar_params] scan_mode` 决定。构建目录/脚本/任务随之不再有扫描体制参数与 `X256_PS`/`X256_MS` 维度。
|
||||||
|
- 删除 `tasks.json` 中旧的 `CMake: 配置/构建/清理/配置并构建...` 任务(15 个),改为上述 5 个任务(机扫/相扫合并后为「清理全部」+ 4 个「配置并构建(...)」)。
|
||||||
|
|
||||||
## [1.5.8] - 2026-10-20
|
## [1.5.8] - 2026-10-20
|
||||||
|
|
||||||
|
|||||||
+8
-13
@@ -10,16 +10,10 @@ cmake_minimum_required(VERSION 3.21)
|
|||||||
# 因此本工程的最低 CMake 版本随之提高;NMake/Ninja 生成器同样满足。
|
# 因此本工程的最低 CMake 版本随之提高;NMake/Ninja 生成器同样满足。
|
||||||
project(data_process_class_dll LANGUAGES CXX)
|
project(data_process_class_dll LANGUAGES CXX)
|
||||||
|
|
||||||
# 扫描模式:
|
# 机扫 / 相扫版本已合并为同一份 DLL:构建不再区分扫描体制,也不再定义
|
||||||
# PHASE_SCANNING -> 相扫雷达(X256_PS,原 Qt 工程默认激活配置)
|
# PHASE_SCANNING / MECHANICAL_SCANNING 编译期宏,也没有 RADAR_SCAN_MODE 缓存变量。
|
||||||
# MECHANICAL_SCANNING -> 机扫雷达(X256_MS)
|
# 扫描模式改由运行期配置项的 `[radar_params] scan_mode` 决定(0 相扫 / 1 机扫),
|
||||||
# 用法:cmake -S . -B build -DRADAR_SCAN_MODE=PHASE_SCANNING
|
# 随全部雷达工作参数一起由 TOML 配置文件经 parameters_reload() 载入,详见 README 4.2、10。
|
||||||
set(RADAR_SCAN_MODE "PHASE_SCANNING" CACHE STRING "Radar scan mode (PHASE_SCANNING or MECHANICAL_SCANNING)")
|
|
||||||
set_property(CACHE RADAR_SCAN_MODE PROPERTY STRINGS PHASE_SCANNING MECHANICAL_SCANNING)
|
|
||||||
|
|
||||||
if(NOT RADAR_SCAN_MODE STREQUAL "PHASE_SCANNING" AND NOT RADAR_SCAN_MODE STREQUAL "MECHANICAL_SCANNING")
|
|
||||||
message(FATAL_ERROR "RADAR_SCAN_MODE 必须为 PHASE_SCANNING 或 MECHANICAL_SCANNING,当前值:${RADAR_SCAN_MODE}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# 数据记录调试功能开关(可选编译,详见 docs/data_record_debug.md)
|
# 数据记录调试功能开关(可选编译,详见 docs/data_record_debug.md)
|
||||||
@@ -145,9 +139,11 @@ if(RDP_RECORD_ENABLED)
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp/thirdparty/sqlite3
|
${CMAKE_CURRENT_SOURCE_DIR}/third_party/ormpp/thirdparty/sqlite3
|
||||||
)
|
)
|
||||||
target_compile_options(rdp_record PRIVATE
|
target_compile_options(rdp_record PRIVATE
|
||||||
/W3
|
# /W3 与 /Zc:__cplusplus 只用于 C++ 源文件:sqlite3.c 由下方源文件级 /w 关闭告警,
|
||||||
|
# 若 C 文件也带 /W3,cl 会打印 D9025(overriding '/W3' with '/w')命令行提示。
|
||||||
|
$<$<COMPILE_LANGUAGE:CXX>:/W3>
|
||||||
/utf-8
|
/utf-8
|
||||||
/Zc:__cplusplus
|
$<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>
|
||||||
/FS
|
/FS
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -161,7 +157,6 @@ endif()
|
|||||||
# 编译 DLL 时定义导出宏;引用 DLL 的工程不应定义该宏。
|
# 编译 DLL 时定义导出宏;引用 DLL 的工程不应定义该宏。
|
||||||
target_compile_definitions(data_process_class_dll PRIVATE
|
target_compile_definitions(data_process_class_dll PRIVATE
|
||||||
DATA_PROCESS_CLASS_DLL_LIBRARY
|
DATA_PROCESS_CLASS_DLL_LIBRARY
|
||||||
${RADAR_SCAN_MODE}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# 与 qmake 工程保持一致的 Windows 编译定义
|
# 与 qmake 工程保持一致的 Windows 编译定义
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# 雷达数据处理 DLL(data_process_class_dll)
|
# 雷达数据处理 DLL(data_process_class_dll)
|
||||||
|
|
||||||
> X256 雷达数据处理动态链接库:将雷达输出的原始点迹(TWS/TAS)处理为稳定可靠的目标航迹,并给出 TAS 跟踪波束控制指令。
|
> 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)。
|
> **工作参数来源(参数配置方式改造后)**:全部雷达工作参数由宿主调用 `parameters_reload(配置文件路径)` 从 **TOML 配置文件**加载到内部 `RDP_parameter`,不再由宿主下发 `struct RadarPara`、也不再由 `parameters.h` 编译期宏配置(见 10)。
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
## 1. 项目简介
|
## 1. 项目简介
|
||||||
|
|
||||||
本仓库是一个 **Windows 动态链接库**,实现某型雷达(内部代号 X256,按扫描体制分为 **相扫 X256_PS** 与 **机扫 X256_MS** 两种构建)的 **航迹数据处理** 功能,包括:
|
本仓库是一个 **Windows 动态链接库**,实现某型雷达(内部代号 X256;机扫、相扫两个版本已合并为同一份 DLL,扫描模式由运行期配置项 `[radar_params] scan_mode` 选择,构建不再区分体制)的 **航迹数据处理** 功能,包括:
|
||||||
|
|
||||||
- 输入点迹预处理与点迹凝聚(滑窗凝聚)
|
- 输入点迹预处理与点迹凝聚(滑窗凝聚)
|
||||||
- 边扫描边跟踪(TWS)与边跟踪边扫描(TAS)双通道处理
|
- 边扫描边跟踪(TWS)与边跟踪边扫描(TAS)双通道处理
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
| 点迹类型 | point_type = 0 为 TWS,point_type = 1 为 TAS |
|
| 点迹类型 | point_type = 0 为 TWS,point_type = 1 为 TAS |
|
||||||
| 跟踪模式 | Track_Mode = 0 为 TWS,Track_Mode = 1 为 TAS |
|
| 跟踪模式 | Track_Mode = 0 为 TWS,Track_Mode = 1 为 TAS |
|
||||||
| 参数来源 | TOML 配置文件(`config/config_tmp.toml` 为样例)→ 内部 `struct RDP_parameter`,宿主通过 `parameters_reload()` 加载;参数对照见 10 |
|
| 参数来源 | 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,防重连后幽灵航迹)。
|
- **航迹生命周期管理**:外推轮数计数、超时消亡与质量消亡(普通 TWS 航迹)、手动删除、全清空(含各模块 reset,防重连后幽灵航迹)。
|
||||||
- **防御性加固**:见 archived_docs/BUG_FIX_REPORT.md——越界防护、时间戳正序校验、方位角 ±π 环绕、asin 定义域钳位、IMM 概率奇异保护等已修复项。
|
- **防御性加固**:见 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)。
|
- **日志文件输出**:`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)。
|
- **数据记录调试功能(可选编译、异步批量写入)**:`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
|
```text
|
||||||
.
|
.
|
||||||
├── CMakeLists.txt # CMake 构建脚本(扫描模式切换、导出宏、输出目录)
|
├── CMakeLists.txt # CMake 构建脚本(构建类型/记录模式、导出宏、输出目录)
|
||||||
├── CHANGELOG.md # 变更日志(Keep a Changelog 格式,按 git 提交记录维护)
|
├── CHANGELOG.md # 变更日志(Keep a Changelog 格式,按 git 提交记录维护)
|
||||||
├── README.md # 本文件:项目说明(架构、接口、流程、算法、参数)
|
├── README.md # 本文件:项目说明(架构、接口、流程、算法、参数)
|
||||||
├── requirements.md # 需求说明:雷达参数配置方式改造(TOML 配置文件 → RDP_parameter、parameters_reload 接口)
|
├── requirements.md # 需求说明:雷达参数配置方式改造(TOML 配置文件 → RDP_parameter、parameters_reload 接口)
|
||||||
@@ -95,17 +95,17 @@
|
|||||||
│ └── data_record_debug.md # 数据记录调试功能说明(开关与构建、异步运行期行为与队列/批事务参数、表结构约定、新增记录点四步配方、6 张在用记录表清单与字段、查询示例、已知限制与验证参考)
|
│ └── data_record_debug.md # 数据记录调试功能说明(开关与构建、异步运行期行为与队列/批事务参数、表结构约定、新增记录点四步配方、6 张在用记录表清单与字段、查询示例、已知限制与验证参考)
|
||||||
├── design_docs/ # 设计与讨论资料留档(被 .gitignore 忽略、不入库;含设计讨论、产品介绍与 README/流程报告的导出、渲染版本)
|
├── design_docs/ # 设计与讨论资料留档(被 .gitignore 忽略、不入库;含设计讨论、产品介绍与 README/流程报告的导出、渲染版本)
|
||||||
├── .vscode/ # VS Code 工程配置
|
├── .vscode/ # VS Code 工程配置
|
||||||
│ ├── settings.json # cmake.generator=NMake、MSVC2022 x64 环境变量、构建目录=变体推导、compile_commands
|
│ ├── settings.json # cmake.generator=NMake、MSVC2022 x64 环境变量、构建目录=build/<构建类型>/<记录模式>、compile_commands
|
||||||
│ ├── cmake-variants.yaml # X256_PS / X256_MS × Release / Debug × REC_AUTO / REC_OFF / REC_ON 变体
|
│ ├── cmake-variants.yaml # Release / Debug × REC_AUTO / REC_OFF / REC_ON 变体(机扫/相扫已合并,无体制维度)
|
||||||
│ ├── tasks.json # 仅 5 个任务:清理全部 + 4 种组合的「配置并构建全部」(原有任务已删除)
|
│ ├── tasks.json # 仅 5 个任务:清理全部 + 4 种组合的「配置并构建」(原有任务已删除)
|
||||||
│ └── scripts/ # 构建脚本(纯 ASCII,避免 cmd 代码页问题)
|
│ └── scripts/ # 构建脚本(纯 ASCII,避免 cmd 代码页问题)
|
||||||
│ ├── msvc_env.bat # 共享环境设置:定位 VS2022/cl.exe 并调用 vcvarsall.bat(x64)
|
│ ├── msvc_env.bat # 共享环境设置:定位 VS2022/cl.exe 并调用 vcvarsall.bat(x64)
|
||||||
│ ├── config_paths.bat # 按「扫描体制/构建类型/记录模式」推导构建目录并校验参数
|
│ ├── config_paths.bat # 按「构建类型/记录模式」推导构建目录并校验参数
|
||||||
│ ├── configure.bat # 单配置 CMake 配置(含旧工具集构建树自动清理)
|
│ ├── configure.bat # 单配置 CMake 配置(含旧工具集构建树自动清理)
|
||||||
│ ├── build.bat # 单配置 CMake 构建
|
│ ├── build.bat # 单配置 CMake 构建
|
||||||
│ ├── clean.bat # 单配置清理(删除该配置的构建目录)
|
│ ├── clean.bat # 单配置清理(删除该配置的构建目录)
|
||||||
│ ├── build_all.bat # 两种扫描体制依次「配置 + 构建」(4 个构建任务调用)
|
│ ├── build_config.bat # 单配置「配置 + 构建」(4 个构建任务调用)
|
||||||
│ └── clean_all.bat # 清理全部配置的构建输出(「清理全部」任务调用)
|
│ └── clean_all.bat # 清理全部配置的构建输出(含旧版 X256_PS/X256_MS 目录)
|
||||||
├── backup/
|
├── backup/
|
||||||
│ └── data_process_class_dll/
|
│ └── data_process_class_dll/
|
||||||
│ ├── data_process_class_dll.pro # 迁移前的 Qt/qmake 工程文件(备份)
|
│ ├── data_process_class_dll.pro # 迁移前的 Qt/qmake 工程文件(备份)
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
│ ├── rdp_parameter_loader.h / .cpp # TOML 参数加载器(内部模块,不属于宿主接口):rdp_parameter_load() 严格校验 11 个配置段并写入 RDP_parameter,失败返回 -1 且不改变入参
|
│ ├── 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 自增计数(记录用)
|
│ ├── 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 配置一一对应)
|
│ ├── 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.h / .cpp # TWS 点迹凝聚(含两帧滑窗缓冲)
|
||||||
│ ├── dot_coh_tas.h / .cpp # TAS 点迹凝聚
|
│ ├── dot_coh_tas.h / .cpp # TAS 点迹凝聚
|
||||||
│ ├── coor_trans.h / .cpp # 极坐标 ↔ 直角坐标转换
|
│ ├── coor_trans.h / .cpp # 极坐标 ↔ 直角坐标转换
|
||||||
@@ -140,10 +140,8 @@
|
|||||||
│ ├── track_index_mangement.h / .cpp # 航迹号 1~500 分配/复用
|
│ ├── track_index_mangement.h / .cpp # 航迹号 1~500 分配/复用
|
||||||
│ └── Eigen/ # 内置 Eigen 3 头文件库(仅用 Eigen/Dense)
|
│ └── Eigen/ # 内置 Eigen 3 头文件库(仅用 Eigen/Dense)
|
||||||
├── build/ # 构建产物(被 .gitignore 忽略)
|
├── build/ # 构建产物(被 .gitignore 忽略)
|
||||||
│ ├── X256_PS/ # 相扫构建根目录(每个完整配置一个子目录)
|
│ ├── Debug/ # Debug 构建根目录:REC_AUTO / REC_OFF / REC_ON
|
||||||
│ │ ├── Debug/ # Debug 配置根:REC_AUTO / REC_OFF / REC_ON
|
│ ├── Release/ # Release 构建根目录:REC_AUTO / REC_OFF / REC_ON
|
||||||
│ │ └── Release/ # Release 配置根:REC_AUTO / REC_OFF / REC_ON
|
|
||||||
│ ├── X256_MS/ # 机扫构建根目录(结构同 X256_PS)
|
|
||||||
│ └── output/ # 早期打包导出(其中 data_process_class_dll.h 为旧版 32 位时间戳接口,勿作为当前 API 依据)
|
│ └── output/ # 早期打包导出(其中 data_process_class_dll.h 为旧版 32 位时间戳接口,勿作为当前 API 依据)
|
||||||
├── rdp_logs/ # 日志输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略)
|
├── rdp_logs/ # 日志输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略)
|
||||||
├── rdp_records/ # 数据记录库输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略;仅记录功能启用时产生)
|
├── rdp_records/ # 数据记录库输出目录(运行时自动创建于宿主进程当前工作目录下,被 .gitignore 忽略;仅记录功能启用时产生)
|
||||||
@@ -167,43 +165,41 @@
|
|||||||
| 参数配置 | 无需安装——配置文件为 TOML 格式,解析器 toml++ v3.4.0 已内置在 `third_party/toml/toml.hpp`(仅头文件);样例见 `config/config_tmp.toml`(见 10) |
|
| 参数配置 | 无需安装——配置文件为 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 工具集提供 |
|
| 数据记录(可选调试功能) | 无需安装——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> |
|
| 构建类型 | Debug / Release | build/<Debug\|Release>/… |
|
||||||
| MECHANICAL_SCANNING | 机扫(X256_MS) | build/X256_MS/<Debug\|Release>/<REC_AUTO\|REC_OFF\|REC_ON> |
|
| 记录模式 | REC_AUTO / REC_OFF / REC_ON | …/<REC_AUTO\|REC_OFF\|REC_ON> |
|
||||||
|
|
||||||
### 4.3 命令行构建
|
### 4.3 命令行构建
|
||||||
|
|
||||||
构建目录由「扫描体制 + 构建类型 + 记录模式」三元组唯一确定,构建脚本、VS Code 任务与 CMake Tools 变体使用同一布局:
|
构建目录由「构建类型 + 记录模式」唯一确定(机扫/相扫已合并为同一版本,无扫描体制维度),构建脚本、VS Code 任务与 CMake Tools 变体使用同一布局:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>
|
build/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>
|
||||||
```
|
```
|
||||||
|
|
||||||
```bat
|
```bat
|
||||||
:: 单配置操作(参数:<PHASE_SCANNING|MECHANICAL_SCANNING> <Debug|Release> [AUTO|ON|OFF])
|
:: 单配置操作(参数:<Debug|Release> [AUTO|ON|OFF],记录模式缺省 AUTO)
|
||||||
:: 构建目录自动推导,例如 build/X256_PS/Release/REC_OFF
|
:: 构建目录自动推导,例如 build/Release/REC_OFF
|
||||||
.vscode\scripts\configure.bat PHASE_SCANNING Release OFF
|
.vscode\scripts\configure.bat Release OFF
|
||||||
.vscode\scripts\build.bat PHASE_SCANNING Release OFF
|
.vscode\scripts\build.bat Release OFF
|
||||||
.vscode\scripts\clean.bat PHASE_SCANNING Release OFF
|
.vscode\scripts\clean.bat Release OFF
|
||||||
:: 扫描体制也接受 X256_PS / X256_MS 别名;记录模式缺省为 AUTO
|
|
||||||
.vscode\scripts\configure.bat X256_MS Debug
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```bat
|
```bat
|
||||||
:: 一次配置并构建两个扫描体制(VS Code 任务「配置并构建全部(...)」的内部实现)
|
:: 配置并构建单个配置(VS Code 任务「配置并构建(...)」的内部实现)
|
||||||
.vscode\scripts\build_all.bat Release OFF
|
.vscode\scripts\build_config.bat Release OFF
|
||||||
.vscode\scripts\build_all.bat Release ON
|
.vscode\scripts\build_config.bat Release ON
|
||||||
.vscode\scripts\build_all.bat Debug OFF
|
.vscode\scripts\build_config.bat Debug OFF
|
||||||
.vscode\scripts\build_all.bat Debug ON
|
.vscode\scripts\build_config.bat Debug ON
|
||||||
:: 清理全部配置的构建输出(VS Code 任务「清理全部」的内部实现)
|
:: 清理全部配置的构建输出(VS Code 任务「清理全部」的内部实现)
|
||||||
.vscode\scripts\clean_all.bat
|
.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 节。
|
记录功能的性能参数集中在 `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` 留档不动) |
|
| 清理全部 | 删除 `build/Debug`、`build/Release` 下所有配置的构建输出,并删除旧版 `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_OFF) | Release + `RDP_DATA_RECORD=OFF`,单次配置并构建 |
|
||||||
| 配置并构建全部(Release/REC_ON) | Release + `RDP_DATA_RECORD=ON`,两个扫描体制同上 |
|
| 配置并构建(Release/REC_ON) | Release + `RDP_DATA_RECORD=ON`,单次配置并构建 |
|
||||||
| 配置并构建全部(Debug/REC_OFF) | Debug + `RDP_DATA_RECORD=OFF`,两个扫描体制同上 |
|
| 配置并构建(Debug/REC_OFF) | Debug + `RDP_DATA_RECORD=OFF`,单次配置并构建 |
|
||||||
| 配置并构建全部(Debug/REC_ON) | Debug + `RDP_DATA_RECORD=ON`,两个扫描体制同上 |
|
| 配置并构建(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 产物
|
### 4.4 产物
|
||||||
|
|
||||||
| 产物 | 位置 |
|
| 产物 | 位置 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| data_process_class_dll.dll(+ .pdb) | build/<X256_XX>/<Debug\|Release>/<REC_*>/bin/ |
|
| data_process_class_dll.dll(+ .pdb) | build/<Debug\|Release>/<REC_*>/bin/ |
|
||||||
| 导入库 data_process_class_dll.lib | build/<X256_XX>/<Debug\|Release>/<REC_*>/lib/ |
|
| 导入库 data_process_class_dll.lib | build/<Debug\|Release>/<REC_*>/lib/ |
|
||||||
| 安装(cmake --install) | DLL/导入库 → bin、lib,公开头文件 → include |
|
| 安装(cmake --install) | DLL/导入库 → bin、lib,公开头文件 → include |
|
||||||
| compile_commands.json | 各配置的构建目录根(供 VS Code IntelliSense 使用) |
|
| 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。
|
产物为 **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 编译警告处理
|
### 4.5 编译警告处理
|
||||||
|
|
||||||
@@ -250,9 +246,9 @@ VS Code 任务(`.vscode/tasks.json`)只保留以下 5 个(原有任务已
|
|||||||
- `CMakeLists.txt` 显式指定 `/W3`:CMake 3.15(策略 CMP0092)起不再把 `/W3` 放进 `CMAKE_CXX_FLAGS`,本工程此前一直以 `/W3` 构建,故显式恢复以保持警告级别不变。
|
- `CMakeLists.txt` 显式指定 `/W3`:CMake 3.15(策略 CMP0092)起不再把 `/W3` 放进 `CMAKE_CXX_FLAGS`,本工程此前一直以 `/W3` 构建,故显式恢复以保持警告级别不变。
|
||||||
- 修复了 `/W3` 下全部 C4819(源文件字符集)、C4018(signed/unsigned 不匹配)、C4244(类型转换可能丢失数据)警告:循环变量按需改为 `size_t`,窄化转换改为 `static_cast` 显式转换,不改变原有计算逻辑。
|
- 修复了 `/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>(...)`),同样不改变计算逻辑。
|
- 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`)记录完整,不影响增量编译。
|
- 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)
|
### 4.6 编译器升级说明(MSVC 2013 → MSVC 2022)
|
||||||
|
|
||||||
@@ -399,7 +395,7 @@ classDiagram
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Data_Process_Factory::GetB() | 实例指针 | 获取单例(首次调用时创建,并写入 `version_info`) |
|
| Data_Process_Factory::GetB() | 实例指针 | 获取单例(首次调用时创建,并写入 `version_info`) |
|
||||||
| Data_Process_Factory::Destroy() | — | 销毁实例并将指针置空 |
|
| 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) |
|
| parameters_reload(const char* path) | 0 成功 / -1 失败 | **加载全部工作参数**:解析 TOML 配置文件并校验,成功后整体替换内部 `RDP_parameter`;失败时当前参数保持不变并打印原因。建议 `GetB()` 后立即调用一次,重连/换配置时再次调用即可热重载(见 10.1) |
|
||||||
| data_preprocess(DataRev[150]) | 0/1/2/3 | 输入一帧点迹并缓存,返回处理模式(见下表) |
|
| data_preprocess(DataRev[150]) | 0/1/2/3 | 输入一帧点迹并缓存,返回处理模式(见下表) |
|
||||||
| track_process(Track[][10], &num, dieIdx[], &dieNum, model) | 1 | 按 data_preprocess 的返回值执行 TWS/TAS 处理 |
|
| 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) 做滑窗凝聚 |
|
| 2 | **TWS 未满一圈,继续蓄数据** | point_type==0 且上述判圈条件不成立;调用 track_process(model=2) 做滑窗凝聚 |
|
||||||
| 3 | **TAS 处理** | point_type==1;同时记录 TAS_track_idx 与最新时间戳 |
|
| 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 典型调用序列
|
### 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`;
|
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`),**当前已加载参数保持不变**(加载过程先写入临时对象,全部成功后才整体赋值)。
|
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 键 ↔ 样例值)
|
### 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 | `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 | `freq_0_GHz` | 9.2 | 载波频点(GHz,盲速计算基准;原 `FREQ0`) |
|
||||||
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height`) |
|
| radar_params | `radar_height` | 0 | 雷达平台高度(m,输出 z 叠加;原 `Height`) |
|
||||||
| radar_params | `radar_system_delay` | 0 | 系统延迟(s,输出位置按 `x + vx·delay` 补偿;原 `Sys_delay`) |
|
| 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]` 的固定容量(宿主接口维度) |
|
| `MAX_TRACK_NUM` | 500 | 输出航迹数组 `Track[500][10]` 的固定容量(宿主接口维度) |
|
||||||
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 跟踪队列容量上限;运行期配置项 `tas_track_num_max` 不得超过该值 |
|
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 跟踪队列容量上限;运行期配置项 `tas_track_num_max` 不得超过该值 |
|
||||||
| `PI` | 3.1415926f | 圆周率常量 |
|
| `PI` | 3.1415926f | 圆周率常量 |
|
||||||
| `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION` | 1 / 5 / 8 | 版本号(拼装为 `VERSION_STRING`,见 7.1) |
|
| `MAJOR_VERSION` / `MINOR_VERSION` / `PATCH_VERSION` | 1 / 5 / 9 | 版本号(拼装为 `VERSION_STRING`,见 7.1) |
|
||||||
| `VERSION_INFO` / `VERSION_STRING` | `PS`/`MS`、`V1.5.8.PS`/`V1.5.8.MS` | 扫描体制后缀与完整版本串(由 `GetB()` 写入 `version_info`) |
|
| `VERSION_INFO` / `VERSION_STRING` | `"GENERIC"`、`V1.5.9.GENERIC` | 版本后缀(机扫/相扫已合并为同一版本,无体制后缀)与完整版本串(由 `GetB()` 写入 `version_info`) |
|
||||||
| `Round(x)` | 宏 | 四舍五入取整(盲速折叠用) |
|
| `Round(x)` | 宏 | 四舍五入取整(盲速折叠用) |
|
||||||
| RDP_LOG_ENABLE | 注释停用(默认不启用) | 日志文件输出开关:定义时将 `std::cout` 重定向到日志文件;**当前源码中该宏为注释状态**(parameters.h 注释文字仍写「定义(默认)」,以代码实际状态为准),不重定向、日志输出到标准输出/控制台 |
|
| RDP_LOG_ENABLE | 注释停用(默认不启用) | 日志文件输出开关:定义时将 `std::cout` 重定向到日志文件;**当前源码中该宏为注释状态**(parameters.h 注释文字仍写「定义(默认)」,以代码实际状态为准),不重定向、日志输出到标准输出/控制台 |
|
||||||
| RDP_LOG_DIR | `.\rdp_logs\` | 日志文件输出目录(相对宿主进程当前工作目录,目录不存在时自动创建) |
|
| RDP_LOG_DIR | `.\rdp_logs\` | 日志文件输出目录(相对宿主进程当前工作目录,目录不存在时自动创建) |
|
||||||
@@ -1156,7 +1152,7 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
|||||||
| RDP_RECORD_DROP_LOG_INTERVAL | 1024 | 队列丢弃日志限频:每累计丢弃该行数提示一次 |
|
| 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` |
|
| 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 时只更新末点,因此门限表实际是针对「最新一点的质量」,不是整条航迹的平均质量。
|
- **起批质量门限取的是临时航迹「末点」质量**:`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;对点数很多的航迹影响可忽略,但精确复现公式时需注意。
|
- **质量长度项含整数除法**:`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)与判圈帧。
|
- **数据记录未采用关联信息裁剪与记录策略(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 未启用功能
|
### 11.3 未启用功能
|
||||||
|
|
||||||
@@ -1221,18 +1217,19 @@ DLL :rdp_parameter_load() 解析 TOML → 严格校验 → 全部通过后一
|
|||||||
|
|
||||||
## 12. 版本历史
|
## 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,新→旧;仅列代码改动,纯文档提交略):
|
近期提交(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` 并同步注册 |
|
| 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) |
|
| 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 圈无实点才消亡 |
|
| 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]` |
|
| 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) |
|
| 3088ce4(**V1.5.8** 版本号来源) | 更新版本号至 V1.5.8(`PATCH_VERSION` 7→8) |
|
||||||
| 782bff5 | 调整航迹质量下降逻辑(改为按未更新时长的二次函数衰减,系数 −0.0008 / −0.0025);**普通 TWS 航迹消亡条件改为由航迹质量确定**(`Quality < TRACK_DIE_QUALITY` = 0.3),重点航迹与 TAS 仍按外推圈数 |
|
| 782bff5 | 调整航迹质量下降逻辑(改为按未更新时长的二次函数衰减,系数 −0.0008 / −0.0025);**普通 TWS 航迹消亡条件改为由航迹质量确定**(`Quality < TRACK_DIE_QUALITY` = 0.3),重点航迹与 TAS 仍按外推圈数 |
|
||||||
| 4b70b24 | 航迹质量下降策略改为按点迹未更新时间计算:`Trust_Track` 新增 `Unupdated_time`,外推 ΔT 计算移到外推上限判断之外,超限后质量继续下降 |
|
| 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)` 包裹使用,来源与许可证信息见文件头 |
|
| 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 工程文件(源文件清单参考) |
|
| 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) |
|
| .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)配置样例(需自行放置) |
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ flowchart TD
|
|||||||
- 判圈条件由配置项 `[radar_params] scan_mode` **运行时**选择(0 相扫 / 1 机扫;加载器校验仅允许 0/1),替代原先 `#ifdef PHASE_SCANNING` 的编译期分支:
|
- 判圈条件由配置项 `[radar_params] scan_mode` **运行时**选择(0 相扫 / 1 机扫;加载器校验仅允许 0/1),替代原先 `#ifdef PHASE_SCANNING` 的编译期分支:
|
||||||
- **scan_mode=0(相扫)**:比较前后两帧方位波位号,当前帧 `Beam_index_aiz <= last_beam_num` 判为满一圈;`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**清空后/首帧即判满一圈**;
|
- **scan_mode=0(相扫)**:比较前后两帧方位波位号,当前帧 `Beam_index_aiz <= last_beam_num` 判为满一圈;`last_beam_num` 参与判断,`track_clear_all()` 复位为 INT_MAX,故**清空后/首帧即判满一圈**;
|
||||||
- **scan_mode=1(机扫)**:判 **波位号为 0**(7d5a56f 起),避免转台反转时波位号变小导致误判一圈完成(代码中保留了旧判断的注释);该模式下 `last_beam_num` 仍被更新但不参与判断。
|
- **scan_mode=1(机扫)**:判 **波位号为 0**(7d5a56f 起),避免转台反转时波位号变小导致误判一圈完成(代码中保留了旧判断的注释);该模式下 `last_beam_num` 仍被更新但不参与判断。
|
||||||
- 两种模式下 `last_beam_num` 每帧都会更新,仅判满圈时 `circle_id++` 并返回 1;判圈行为不再由构建体制(`PHASE_SCANNING`/`MECHANICAL_SCANNING`)决定,配置与构建体制应保持一致(见 README 4.2)。
|
- 两种模式下 `last_beam_num` 每帧都会更新,仅判满圈时 `circle_id++` 并返回 1;判圈行为不再由构建期区分(机扫/相扫已合并为同一份构建),仅由配置项 `scan_mode` 决定(见 README 4.2)。
|
||||||
- 机扫下波位号 0 是每圈的起始波位,因此**每圈恰好触发一次 model=1**。
|
- 机扫下波位号 0 是每圈的起始波位,因此**每圈恰好触发一次 model=1**。
|
||||||
- TAS 数据不参与判圈,**每来一帧就处理一次**(TAS 是调度的跟踪波位,本身就是单目标 CPI)。
|
- TAS 数据不参与判圈,**每来一帧就处理一次**(TAS 是调度的跟踪波位,本身就是单目标 CPI)。
|
||||||
|
|
||||||
@@ -539,7 +539,7 @@ flowchart TD
|
|||||||
| 配置键 | 样例值 | 作用点 |
|
| 配置键 | 样例值 | 作用点 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `[radar_params] radar_work_mode` | 0 | 凝聚是否带速度维约束(当前唯一生效点;航迹起始的远近程分支取值相同,属死分支;TWS 外推已改为固定 `data_rate_tws`,不再按模式三选一) |
|
| `[radar_params] radar_work_mode` | 0 | 凝聚是否带速度维约束(当前唯一生效点;航迹起始的远近程分支取值相同,属死分支;TWS 外推已改为固定 `data_rate_tws`,不再按模式三选一) |
|
||||||
| `[radar_params] scan_mode` | 0(**机扫配 1**) | **扫描模式 0 相扫 / 1 机扫**(必填,加载器校验仅允许 0/1):决定 `data_preprocess()` 的 TWS 判圈逻辑(0 用波位号比较、1 用波位号==0),替代原编译期 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 分支;与构建体制解耦,应保持一致 |
|
| `[radar_params] scan_mode` | 0(**机扫配 1**) | **扫描模式 0 相扫 / 1 机扫**(必填,加载器校验仅允许 0/1):决定 `data_preprocess()` 的 TWS 判圈逻辑(0 用波位号比较、1 用波位号==0),替代原编译期 `PHASE_SCANNING`/`MECHANICAL_SCANNING` 分支;机扫/相扫已合并为同一份构建,同一份 DLL 通过该配置切换扫描模式 |
|
||||||
| `[radar_params] freq_0_GHz` | 9.2 | 盲速计算基准频率(原 `FREQ0`) |
|
| `[radar_params] freq_0_GHz` | 9.2 | 盲速计算基准频率(原 `FREQ0`) |
|
||||||
| `[radar_params] radar_height` / `radar_system_delay` | 0 / 0 | 输出 z 叠加平台高度 / 输出位置系统延迟补偿(原 `Height` / `Sys_delay`) |
|
| `[radar_params] radar_height` / `radar_system_delay` | 0 / 0 | 输出 z 叠加平台高度 / 输出位置系统延迟补偿(原 `Height` / `Sys_delay`) |
|
||||||
| `[radar_params] data_rate_tws` | 3 | TWS 未关联航迹外推步长(秒;原按 `work_mode` 在 `DATA_RATE_SHORT/MIDDLE/FAR` 中三选一,现统一单字段) |
|
| `[radar_params] data_rate_tws` | 3 | TWS 未关联航迹外推步长(秒;原按 `work_mode` 在 `DATA_RATE_SHORT/MIDDLE/FAR` 中三选一,现统一单字段) |
|
||||||
@@ -574,10 +574,10 @@ flowchart TD
|
|||||||
| `MAX_TRACK_NUM` | 500 | 输出航迹数组固定容量(宿主接口维度) |
|
| `MAX_TRACK_NUM` | 500 | 输出航迹数组固定容量(宿主接口维度) |
|
||||||
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 队列容量上限;运行期上限用 `tas_track_num_max` |
|
| `RDP_TAS_QUEUE_CAPACITY` | 30 | TAS 队列容量上限;运行期上限用 `tas_track_num_max` |
|
||||||
| `PI` / `Round(x)` | 3.1415926f / 宏 | 圆周率 / 四舍五入取整 |
|
| `PI` / `Round(x)` | 3.1415926f / 宏 | 圆周率 / 四舍五入取整 |
|
||||||
| 版本宏 | 1.5.8 + 体制后缀 | `VERSION_STRING` → `V1.5.8.PS` / `V1.5.8.MS` |
|
| 版本宏 | 1.5.9 + `GENERIC` | `VERSION_STRING` → `V1.5.9.GENERIC`(机扫/相扫合并后无体制后缀) |
|
||||||
| `RDP_LOG_*` / `RDP_RECORD_*` | — | 日志落盘开关/目录、数据记录开关与性能参数(见 README 10.4) |
|
| `RDP_LOG_*` / `RDP_RECORD_*` | — | 日志落盘开关/目录、数据记录开关与性能参数(见 README 10.4) |
|
||||||
|
|
||||||
> 扫描体制宏(`PHASE_SCANNING` / `MECHANICAL_SCANNING`,由 CMake 的 `RADAR_SCAN_MODE` 传入)仅决定 `VERSION_INFO` 版本后缀(PS/MS)与 `#pragma message` 及构建目录/任务命名,**不再决定任何工作参数数值,也不再决定判圈判据**(判圈由配置项 `scan_mode` 决定,见 2.2);`UNCONF_TARGET` 宏已删除(起批处 `Target_Type` 直接写 0)。
|
> 构建期扫描体制宏已随「机扫/相扫版本合并」移除:`CMakeLists.txt` 不再有 `RADAR_SCAN_MODE`,也不再定义 `PHASE_SCANNING` / `MECHANICAL_SCANNING`;`parameters.h` 的 `VERSION_INFO` 固定为 `GENERIC`(`V1.5.9.GENERIC`)。判圈由配置项 `scan_mode` 决定(见 2.2);`UNCONF_TARGET` 宏已删除(起批处 `Target_Type` 直接写 0)。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -616,7 +616,7 @@ flowchart TD
|
|||||||
- **输出门控**:TWS 与 TAS 的输出航迹循环都新增 `Track_Update_Flag == 1` 判定并在输出后清零,只输出**本圈关联到实点或成功外推**的航迹(此前 TWS 每圈把航迹表中全部可靠航迹各输出一行);
|
- **输出门控**:TWS 与 TAS 的输出航迹循环都新增 `Track_Update_Flag == 1` 判定并在输出后清零,只输出**本圈关联到实点或成功外推**的航迹(此前 TWS 每圈把航迹表中全部可靠航迹各输出一行);
|
||||||
- **接近/远离判据**(fc49707 + 42b598e):`Flag_Direction` 不再用实测径向速度 `vr_point > 0`(受多普勒速度模糊影响符号可能取反),改为用 IMM 融合速度方向角判定——`Direction_Angle = atan2(X[4], X[1])`(弧度转度后输出到 `Track.Direction_Angle`),`x`、`y` 为经配置项 `radar_system_delay` 补偿后的位置、`r` 为其模,`acos((-x·cosθ - y·sinθ)/r) < π/2` 判为靠近(1)、否则远离(0),等价于"速度方向与雷达→目标位置方向夹角 > 90°"。中间版本 fc49707 曾写为 `acos((-x·vx - y·vy)/r/Range_V) < π/4`(按合速度归一化、门限 45°),42b598e 改为上式;
|
- **接近/远离判据**(fc49707 + 42b598e):`Flag_Direction` 不再用实测径向速度 `vr_point > 0`(受多普勒速度模糊影响符号可能取反),改为用 IMM 融合速度方向角判定——`Direction_Angle = atan2(X[4], X[1])`(弧度转度后输出到 `Track.Direction_Angle`),`x`、`y` 为经配置项 `radar_system_delay` 补偿后的位置、`r` 为其模,`acos((-x·cosθ - y·sinθ)/r) < π/2` 判为靠近(1)、否则远离(0),等价于"速度方向与雷达→目标位置方向夹角 > 90°"。中间版本 fc49707 曾写为 `acos((-x·vx - y·vy)/r/Range_V) < π/4`(按合速度归一化、门限 45°),42b598e 改为上式;
|
||||||
- **归一化幅度 / 速度维 FFT 点数(e8c56f9 新增,输入侧已打通)**:`DataRev` 新增 `amp_asv`(归一化幅度 dB)、`prn_fftn`(速度维 FFT 点数),`Track`/内部 `PointRecv`/`Trust_Track` 也新增同名成对字段;`data_preprocess()` 现已在 TWS 与 TAS 两条分支都把这两个字段搬入 `PointRecv`(并随 `RdpRecPoint` 落库),因此 `track_asso.cpp` 写入航迹并在 TWS 输出行写回的 `amp_asv_point` / `prn_fftn_point` 有有效数据来源;**TAS 的关联与输出路径(`track_asso_tas.cpp`)仍未涉及这两个字段**,TAS 输出行中它们保持宿主原值。
|
- **归一化幅度 / 速度维 FFT 点数(e8c56f9 新增,输入侧已打通)**:`DataRev` 新增 `amp_asv`(归一化幅度 dB)、`prn_fftn`(速度维 FFT 点数),`Track`/内部 `PointRecv`/`Trust_Track` 也新增同名成对字段;`data_preprocess()` 现已在 TWS 与 TAS 两条分支都把这两个字段搬入 `PointRecv`(并随 `RdpRecPoint` 落库),因此 `track_asso.cpp` 写入航迹并在 TWS 输出行写回的 `amp_asv_point` / `prn_fftn_point` 有有效数据来源;**TAS 的关联与输出路径(`track_asso_tas.cpp`)仍未涉及这两个字段**,TAS 输出行中它们保持宿主原值。
|
||||||
- **版本号与记录标识(b227ae1 / c3c7e66 / 5cb67cc)**:`parameters.h` 新增版本宏并拼装为 `VERSION_STRING`(当前 `V1.5.8.PS` / `V1.5.8.MS`),实例创建后可由基类公开成员 `version_info` 读取;`Data_Process` 新增 `point_id` / `frame_id` / `circle_id` 自增计数(`circle_id` 在 TWS 每判满一圈、TAS 每帧末自增),`PointRecv`/`Temp_track`/`Trust_Track` 新增对应的标识字段,记录功能据此把「输入点迹 → 凝聚点迹 → 临时航迹 → 可靠航迹 → 关联信息」串成同一条链路;可靠航迹与关联信息的记录点为 TWS/TAS 双通道(关联信息以 `Asso_Info::tas_flag` 区分来源)。
|
- **版本号与记录标识(b227ae1 / c3c7e66 / 5cb67cc)**:`parameters.h` 新增版本宏并拼装为 `VERSION_STRING`(机扫/相扫合并后为 `V1.5.9.GENERIC`;历史上 b227ae1 时为 `V1.5.8.PS` / `V1.5.8.MS`),实例创建后可由基类公开成员 `version_info` 读取;`Data_Process` 新增 `point_id` / `frame_id` / `circle_id` 自增计数(`circle_id` 在 TWS 每判满一圈、TAS 每帧末自增),`PointRecv`/`Temp_track`/`Trust_Track` 新增对应的标识字段,记录功能据此把「输入点迹 → 凝聚点迹 → 临时航迹 → 可靠航迹 → 关联信息」串成同一条链路;可靠航迹与关联信息的记录点为 TWS/TAS 双通道(关联信息以 `Asso_Info::tas_flag` 区分来源)。
|
||||||
|
|
||||||
**未启用**
|
**未启用**
|
||||||
|
|
||||||
|
|||||||
+14
-11
@@ -36,25 +36,28 @@
|
|||||||
|---|---|
|
|---|---|
|
||||||
| 开关 | CMake 缓存变量 `RDP_DATA_RECORD`,取值 `AUTO`(默认)/ `ON` / `OFF` |
|
| 开关 | CMake 缓存变量 `RDP_DATA_RECORD`,取值 `AUTO`(默认)/ `ON` / `OFF` |
|
||||||
| AUTO 语义 | `Debug` 构建启用、`Release`(及其它)构建关闭 |
|
| AUTO 语义 | `Debug` 构建启用、`Release`(及其它)构建关闭 |
|
||||||
| 生效方式 | 启用时构建系统定义 `RDP_RECORD_ENABLE` 并额外编译静态库 `rdp_record`(`rdp_record.cpp` + 内置 `sqlite3.c`)并链接进 DLL(`CMakeLists.txt` 118-158) |
|
| 生效方式 | 启用时构建系统定义 `RDP_RECORD_ENABLE` 并额外编译静态库 `rdp_record`(`rdp_record.cpp` + 内置 `sqlite3.c`)并链接进 DLL(`CMakeLists.txt` 的 `if(RDP_RECORD_ENABLED)` 段) |
|
||||||
| 关闭时的保证 | 记录模块源码**不参与编译**(`CMakeLists.txt` 的 `if(RDP_RECORD_ENABLED)` 内才 `add_library`/链接);所有记录宏展开为 `((void)0)`(实参不求值,不产生「变量已初始化但未使用」告警);DLL 不新增依赖与导出符号 |
|
| 关闭时的保证 | 记录模块源码**不参与编译**(`CMakeLists.txt` 的 `if(RDP_RECORD_ENABLED)` 内才 `add_library`/链接);所有记录宏展开为 `((void)0)`(实参不求值,不产生「变量已初始化但未使用」告警);DLL 不新增依赖与导出符号 |
|
||||||
|
|
||||||
```bat
|
```bat
|
||||||
:: 交付/Release:关闭(AUTO 的默认结果,也可显式 OFF)
|
:: 交付/Release:关闭(AUTO 的默认结果,也可显式 OFF)
|
||||||
.vscode\scripts\configure.bat PHASE_SCANNING Release OFF
|
.vscode\scripts\configure.bat Release OFF
|
||||||
.vscode\scripts\build.bat PHASE_SCANNING Release OFF
|
.vscode\scripts\build.bat Release OFF
|
||||||
|
|
||||||
:: Debug:启用(AUTO 的默认结果,也可显式 ON)
|
:: Debug:启用(AUTO 的默认结果,也可显式 ON)
|
||||||
.vscode\scripts\configure.bat PHASE_SCANNING Debug ON
|
.vscode\scripts\configure.bat Debug ON
|
||||||
.vscode\scripts\build.bat PHASE_SCANNING Debug ON
|
.vscode\scripts\build.bat Debug ON
|
||||||
|
|
||||||
|
:: 一次性「配置 + 构建」单个配置(VS Code 任务「配置并构建(...)」的内部实现)
|
||||||
|
.vscode\scripts\build_config.bat Debug ON
|
||||||
|
|
||||||
:: 直接用 cmake(需先进入 MSVC 2022 x64 环境)
|
:: 直接用 cmake(需先进入 MSVC 2022 x64 环境)
|
||||||
cmake -S . -B build/X256_PS/Debug/REC_ON -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug ^
|
cmake -S . -B build/Debug/REC_ON -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug ^
|
||||||
-DRADAR_SCAN_MODE=PHASE_SCANNING -DRDP_DATA_RECORD=ON
|
-DRDP_DATA_RECORD=ON
|
||||||
cmake --build build/X256_PS/Debug/REC_ON
|
cmake --build build/Debug/REC_ON
|
||||||
```
|
```
|
||||||
|
|
||||||
构建目录按「扫描体制 + 构建类型 + 记录模式」隔离:`build/<X256_PS|X256_MS>/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`,因此同一扫描体制下 REC_OFF 与 REC_ON 的产物可以并存;VS Code 任务「配置并构建全部(...)」与脚本 `build_all.bat`/`clean_all.bat` 均基于该布局(见 README 4.3)。
|
构建目录按「构建类型 + 记录模式」隔离:`build/<Debug|Release>/<REC_AUTO|REC_OFF|REC_ON>`(机扫/相扫已合并为同一版本,无扫描体制维度),因此 REC_OFF 与 REC_ON 的产物可以并存;VS Code 任务「配置并构建(...)」与脚本 `build_config.bat`/`clean_all.bat` 均基于该布局(见 README 4.3)。
|
||||||
|
|
||||||
配置阶段会打印开关状态:`数据记录调试功能:启用(C++20 静态库 rdp_record + 内置 SQLite)` 或 `...:关闭(不编译记录模块,RDP_RECORD 为空操作)`。
|
配置阶段会打印开关状态:`数据记录调试功能:启用(C++20 静态库 rdp_record + 内置 SQLite)` 或 `...:关闭(不编译记录模块,RDP_RECORD 为空操作)`。
|
||||||
|
|
||||||
@@ -63,7 +66,7 @@ cmake --build build/X256_PS/Debug/REC_ON
|
|||||||
1. 关闭时构建系统不创建 `rdp_record` 静态库,也不把 `sqlite3.c` 加入任何目标;
|
1. 关闭时构建系统不创建 `rdp_record` 静态库,也不把 `sqlite3.c` 加入任何目标;
|
||||||
2. `rdp_record.h` 在未定义 `RDP_RECORD_ENABLE` 时把 `RDP_RECORD_POINTS`/`RDP_RECORD_COHESION_TWS`/`RDP_RECORD_COHESION_TAS`/`RDP_RECORD_TEMP_TRACKS`/`RDP_RECORD_TRUST_TRACKS`/`RDP_RECORD_ASSO_INFOS` 以及遗留的 `RDP_RECORD`/`RDP_RECORD_BATCH` 全部展开为 `((void)0)`,并提供 `Init/Shutdown/db_path/stats/Write` 的内联空实现;
|
2. `rdp_record.h` 在未定义 `RDP_RECORD_ENABLE` 时把 `RDP_RECORD_POINTS`/`RDP_RECORD_COHESION_TWS`/`RDP_RECORD_COHESION_TAS`/`RDP_RECORD_TEMP_TRACKS`/`RDP_RECORD_TRUST_TRACKS`/`RDP_RECORD_ASSO_INFOS` 以及遗留的 `RDP_RECORD`/`RDP_RECORD_BATCH` 全部展开为 `((void)0)`,并提供 `Init/Shutdown/db_path/stats/Write` 的内联空实现;
|
||||||
3. 6 个业务文件(`data_process.cpp`、`dot_coh.cpp`、`dot_coh_tas.cpp`、`track_init.cpp`、`track_asso.cpp`、`track_asso_tas.cpp`)中的收集变量、收集语句与宏调用**整体包在 `#ifdef RDP_RECORD_ENABLE` 内**;这些文件已不再包含 `rdp_record_entity.h`,因此实体结构体、`arrayToString()` 与 `struct.h` 不会经记录模块被处理代码拖入;
|
3. 6 个业务文件(`data_process.cpp`、`dot_coh.cpp`、`dot_coh_tas.cpp`、`track_init.cpp`、`track_asso.cpp`、`track_asso_tas.cpp`)中的收集变量、收集语句与宏调用**整体包在 `#ifdef RDP_RECORD_ENABLE` 内**;这些文件已不再包含 `rdp_record_entity.h`,因此实体结构体、`arrayToString()` 与 `struct.h` 不会经记录模块被处理代码拖入;
|
||||||
4. 实测 8 种配置(PS/MS × Release/Debug × REC_ON/OFF)均 0 warning、0 error,且 OFF 构建的 DLL 不新增依赖/导出符号。
|
4. 实测 4 种配置(Release/Debug × REC_ON/OFF)均 0 warning、0 error(机扫/相扫合并后不再有 PS/MS 维度),且 OFF 构建的 DLL 不新增依赖/导出符号。
|
||||||
|
|
||||||
**语言标准与依赖**:记录模块以 **C++20** 独立编译(ormpp 要求 `CMAKE_CXX_STANDARD 20`),并编译内置的 SQLite amalgamation(因此启用时需要 C 编译器,随 VS 2022 工具集提供);**雷达处理代码与内置 Eigen 仍为 C++17**,二者通过 `rdp_record.h` 的「`Write<T>` 仅声明 + 显式实例化」跨标准边界:调用方(C++17)不实例化记录实现,实现在 `rdp_record.cpp`(C++20)中显式实例化。V1.5.8 起常规记录点改走**非模板**的 `Write*` 异步入队接口,跨标准边界更简单;模板 `Write<T>` 仅作为遗留同步接口保留。
|
**语言标准与依赖**:记录模块以 **C++20** 独立编译(ormpp 要求 `CMAKE_CXX_STANDARD 20`),并编译内置的 SQLite amalgamation(因此启用时需要 C 编译器,随 VS 2022 工具集提供);**雷达处理代码与内置 Eigen 仍为 C++17**,二者通过 `rdp_record.h` 的「`Write<T>` 仅声明 + 显式实例化」跨标准边界:调用方(C++17)不实例化记录实现,实现在 `rdp_record.cpp`(C++20)中显式实例化。V1.5.8 起常规记录点改走**非模板**的 `Write*` 异步入队接口,跨标准边界更简单;模板 `Write<T>` 仅作为遗留同步接口保留。
|
||||||
|
|
||||||
@@ -317,7 +320,7 @@ print(con.execute("""
|
|||||||
|
|
||||||
| 项目 | 结果 |
|
| 项目 | 结果 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| 构建 | 8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON)均 **0 warning、0 error** |
|
| 构建 | 8 种配置(PS/MS × Release/Debug × REC_OFF/REC_ON,机扫/相扫合并前;合并后为 4 种配置)均 **0 warning、0 error** |
|
||||||
| 普通帧开销 | dup 场景(6 圈/200 目标/每帧 150 点/100 波位)REC_ON vs REC_OFF:每帧 `total` 新增 **p99 ≈ 0.09~0.11 ms**(验收阈值 ≤ 1 ms,PASS) |
|
| 普通帧开销 | dup 场景(6 圈/200 目标/每帧 150 点/100 波位)REC_ON vs REC_OFF:每帧 `total` 新增 **p99 ≈ 0.09~0.11 ms**(验收阈值 ≤ 1 ms,PASS) |
|
||||||
| 判圈帧开销 | 同场景判圈帧 `track` 新增 **中位 ≈ 2.9~4.1 ms、p99 ≈ 13~24 ms**(多次验收运行)——已超 5 ms 验收阈值,因未采用 P0-a(单圈约 12.3 万关联候选),属压测上限;受控 50 目标/50 点场景判圈帧新增中位约 3 ms、**最大 5.96 ms** |
|
| 判圈帧开销 | 同场景判圈帧 `track` 新增 **中位 ≈ 2.9~4.1 ms、p99 ≈ 13~24 ms**(多次验收运行)——已超 5 ms 验收阈值,因未采用 P0-a(单圈约 12.3 万关联候选),属压测上限;受控 50 目标/50 点场景判圈帧新增中位约 3 ms、**最大 5.96 ms** |
|
||||||
| 端到端耗时 | 同场景 600 帧:ON wall ≈ 2.1 s vs OFF wall ≈ 1.8 s |
|
| 端到端耗时 | 同场景 600 帧:ON wall ≈ 2.1 s vs OFF wall ≈ 1.8 s |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 数据记录调试功能(RDP_DATA_RECORD)性能瓶颈分析与实时性优化报告
|
# 数据记录调试功能(RDP_DATA_RECORD)性能瓶颈分析与实时性优化报告
|
||||||
|
|
||||||
> **项目**:雷达数据处理动态库 `data_process_class_dll`(V1.5.8.PS / V1.5.8.MS,分支 `feature`,提交 `3dee734`)
|
> **项目**:雷达数据处理动态库 `data_process_class_dll`(V1.5.8.PS / V1.5.8.MS,分支 `feature`,提交 `3dee734`)——本报告为**机扫/相扫合并前**的快照;合并后版本串为 `V1.5.9.GENERIC`,构建目录与产物路径见 README 4.3。
|
||||||
> **问题**:Release 构建下,`RDP_DATA_RECORD=ON` 开启数据记录调试功能后,数据处理不能实时完成;`RDP_DATA_RECORD=OFF` 时满足实时性。
|
> **问题**:Release 构建下,`RDP_DATA_RECORD=ON` 开启数据记录调试功能后,数据处理不能实时完成;`RDP_DATA_RECORD=OFF` 时满足实时性。
|
||||||
> **本报告范围**:定位性能瓶颈、给出可落地的优化措施与验收标准。**本阶段不修改任何业务代码**——报告中的代码改动均为"建议方案",未实施(业务代码/CMake/第三方均无改动,仅新增本报告文件)。
|
> **本报告范围**:定位性能瓶颈、给出可落地的优化措施与验收标准。**本阶段不修改任何业务代码**——报告中的代码改动均为"建议方案",未实施(业务代码/CMake/第三方均无改动,仅新增本报告文件)。
|
||||||
> **方法**:源码走读 + 数据量建模 + Release 产物微基准 + `REC_ON`/`REC_OFF` 双 DLL 端到端 A/B 实测。
|
> **方法**:源码走读 + 数据量建模 + Release 产物微基准 + `REC_ON`/`REC_OFF` 双 DLL 端到端 A/B 实测。
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
### 1.1 现象
|
### 1.1 现象
|
||||||
|
|
||||||
| 配置(均为 Release / X256_PS) | 现象 |
|
| 配置(均为 Release;使用当时的 X256_PS 构建,现机扫/相扫已合并,等价产物在 `build/Release/REC_*`) | 现象 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `RDP_DATA_RECORD=OFF`(交付/AUTO 默认) | 数据处理满足实时性 |
|
| `RDP_DATA_RECORD=OFF`(交付/AUTO 默认) | 数据处理满足实时性 |
|
||||||
| `RDP_DATA_RECORD=ON`(显式开启,用于 Release 现场排障) | 数据处理不能实时完成,且负载越密(点迹/航迹越多)越慢,最终表现为处理节拍被拖垮、数据积压 |
|
| `RDP_DATA_RECORD=ON`(显式开启,用于 Release 现场排障) | 数据处理不能实时完成,且负载越密(点迹/航迹越多)越慢,最终表现为处理节拍被拖垮、数据积压 |
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
由于没有宿主主程序,本次用两条独立证据链复现与量化:
|
由于没有宿主主程序,本次用两条独立证据链复现与量化:
|
||||||
|
|
||||||
1. **微基准**(`build/perf_bench_micro/`):直接链接已有 Release `REC_ON` 产物 `build/X256_PS/Release/REC_ON/lib/rdp_record.lib`,调用与业务完全相同的 `rdp_record::Write<T>()`,测单条/批量/不同 SQLite 配置的每行成本;并单独测实体构造(`arrayToString`)成本。
|
1. **微基准**(`build/perf_bench_micro/`):直接链接已有 Release `REC_ON` 产物 `build/Release/REC_ON/lib/rdp_record.lib`(本报告测量时位于旧布局 `build/X256_PS/Release/REC_ON/lib/`;机扫/相扫合并后为 `build/Release/REC_ON/lib/`),调用与业务完全相同的 `rdp_record::Write<T>()`,测单条/批量/不同 SQLite 配置的每行成本;并单独测实体构造(`arrayToString`)成本。
|
||||||
2. **端到端 A/B**(`build/perf_bench_pipeline/`):编写只使用公开 DLL 接口的合成数据驱动程序,分别加载 `REC_OFF` 与 `REC_ON` 两个 `data_process_class_dll.dll`,按宿主调用序列(`data_preprocess` → 按返回的 `model` 调 `track_process`)投喂同一份合成 TWS 数据,用 `QueryPerformanceCounter` 逐帧计时。
|
2. **端到端 A/B**(`build/perf_bench_pipeline/`):编写只使用公开 DLL 接口的合成数据驱动程序,分别加载 `REC_OFF` 与 `REC_ON` 两个 `data_process_class_dll.dll`,按宿主调用序列(`data_preprocess` → 按返回的 `model` 调 `track_process`)投喂同一份合成 TWS 数据,用 `QueryPerformanceCounter` 逐帧计时。
|
||||||
|
|
||||||
> 证据链互相印证:微基准单条写入 mean 约 1.1~1.3 ms/行(p50 约 0.73~0.78 ms);首轮端到端 A/B 全运行 103,374 行 / ≈97.6 s 增量 ≈ **0.94 ms/行**;含航迹最终 A/B 为 314,388 行 / 426.7 s ≈ **1.39 ms/行**(大库/多表/页缓存压力下略高),三条口径一致。
|
> 证据链互相印证:微基准单条写入 mean 约 1.1~1.3 ms/行(p50 约 0.73~0.78 ms);首轮端到端 A/B 全运行 103,374 行 / ≈97.6 s 增量 ≈ **0.94 ms/行**;含航迹最终 A/B 为 314,388 行 / 426.7 s ≈ **1.39 ms/行**(大库/多表/页缓存压力下略高),三条口径一致。
|
||||||
|
|||||||
Reference in New Issue
Block a user