更新:1、优化数据记录的性能,满足实时运行要求;

Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
2026-10-20 17:31:50 +08:00
parent 3dee734d89
commit 17a3d998a6
14 changed files with 2029 additions and 210 deletions
+53 -5
View File
@@ -8,7 +8,6 @@
#include <Eigen/Dense>
#include "rdp_record.h"
#include "rdp_record_entity.h"
using namespace Eigen;
using namespace std;
@@ -68,6 +67,11 @@ int Track_Asso:: track_asso_process(std::vector<PointRecv> *point_
std::vector<PointRecv>().swap(point_process);
//输出航迹
#ifdef RDP_RECORD_ENABLE
//记录可靠航迹:先收集,输出循环结束后一次入队
std::vector<Trust_Track> rec_trust;
rec_trust.reserve(trust_track->size());
#endif
for (size_t i=0;i<trust_track->size();i++)
{ // 输出更新航迹条件:
if((*trust_track)[i].Track_Update_Flag==1){
@@ -160,10 +164,16 @@ int Track_Asso:: track_asso_process(std::vector<PointRecv> *point_
std::memcpy(Trust_Track_Output[*Trust_track_num_Output-1][0].speed_dim, (*trust_track)[i].speed_dim, sizeof(Trust_Track_Output[*Trust_track_num_Output-1][0].speed_dim));
std::memcpy(Trust_Track_Output[*Trust_track_num_Output-1][0].range_dim, (*trust_track)[i].range_dim, sizeof(Trust_Track_Output[*Trust_track_num_Output-1][0].range_dim));
RDP_RECORD(RdpRecTrustTrack((*trust_track)[i]));
#ifdef RDP_RECORD_ENABLE
rec_trust.push_back((*trust_track)[i]);
#endif
}
}
#ifdef RDP_RECORD_ENABLE
RDP_RECORD_TRUST_TRACKS(rec_trust);
#endif
return 0;
}
@@ -436,6 +446,19 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
std::vector <Asso_Info> associated_info;
#ifdef RDP_RECORD_ENABLE
//记录未关联上的点航信息:收集到分块上限即入队,函数末尾再 flush 剩余
//按本圈候选数(点迹数×航迹数,封顶到分块上限)预留,避免收集期间多次扩容
std::vector<Asso_Info> rec_asso;
{
std::size_t est = point_process.size() * trust_track->size();
if (est > static_cast<std::size_t>(RDP_RECORD_ASSO_CHUNK_ROWS))
{
est = static_cast<std::size_t>(RDP_RECORD_ASSO_CHUNK_ROWS);
}
rec_asso.reserve(est);
}
#endif
//遍历所有点迹航迹 计算点迹和航迹的统计距离
for (size_t loop_of_track = 0; loop_of_track<trust_track->size();loop_of_track++)
@@ -551,7 +574,13 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
{
associated_info.push_back(associated_info_tmp);
}else{
RDP_RECORD(RdpRecAssoInfo(associated_info_tmp));
#ifdef RDP_RECORD_ENABLE
rec_asso.push_back(associated_info_tmp);
if (rec_asso.size() >= RDP_RECORD_ASSO_CHUNK_ROWS)
{
RDP_RECORD_ASSO_INFOS(rec_asso);
}
#endif
}
}
}
@@ -707,7 +736,13 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
{
if(associated_info[ii].track_index==track_index)
{
RDP_RECORD(RdpRecAssoInfo(associated_info[ii]));
#ifdef RDP_RECORD_ENABLE
rec_asso.push_back(associated_info[ii]);
if (rec_asso.size() >= RDP_RECORD_ASSO_CHUNK_ROWS)
{
RDP_RECORD_ASSO_INFOS(rec_asso);
}
#endif
associated_info.erase(associated_info.begin()+ii);
associated_num=static_cast<int>(associated_info.size());
}
@@ -719,7 +754,13 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
{
if(associated_info[ii].point_index==point_index)
{
RDP_RECORD(RdpRecAssoInfo(associated_info[ii]));
#ifdef RDP_RECORD_ENABLE
rec_asso.push_back(associated_info[ii]);
if (rec_asso.size() >= RDP_RECORD_ASSO_CHUNK_ROWS)
{
RDP_RECORD_ASSO_INFOS(rec_asso);
}
#endif
associated_info.erase(associated_info.begin()+ii);
associated_num=static_cast<int>(associated_info.size());
}
@@ -813,6 +854,13 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
}
}
#ifdef RDP_RECORD_ENABLE
//函数返回前把剩余未入队的关联信息 flush 掉(宏内部 std::move,调用后 rec_asso 为空)
if (!rec_asso.empty())
{
RDP_RECORD_ASSO_INFOS(rec_asso);
}
#endif
}
void Track_Asso:: model_output(std::vector <Trust_Track> *trust_track)