更新:1、修改航迹质量下降策略,改为按点迹未更新时间计算;
Signed-off-by: waiwaylee <waiwaylee@foxmail.com>
This commit is contained in:
@@ -57,7 +57,7 @@
|
|||||||
#define TRACK_QUALITY_SNR_WEIGHT 0.3
|
#define TRACK_QUALITY_SNR_WEIGHT 0.3
|
||||||
#define TRACK_QUALITY_LEN_WEIGHT 0.2
|
#define TRACK_QUALITY_LEN_WEIGHT 0.2
|
||||||
#define TRACK_QUALITY_ITER_COEFF 0.8
|
#define TRACK_QUALITY_ITER_COEFF 0.8
|
||||||
#define TRACK_QUALITY_DECREASE_COEFF 0.01
|
#define TRACK_QUALITY_DECREASE_COEFF 0.005
|
||||||
|
|
||||||
//航迹起批质量条件
|
//航迹起批质量条件
|
||||||
#define TRACK_START_QUALITY_L3 0.7
|
#define TRACK_START_QUALITY_L3 0.7
|
||||||
@@ -66,6 +66,19 @@
|
|||||||
#define TRACK_START_QUALITY_L6 0.4
|
#define TRACK_START_QUALITY_L6 0.4
|
||||||
#define TRACK_START_QUALITY_L7 0.3
|
#define TRACK_START_QUALITY_L7 0.3
|
||||||
|
|
||||||
|
//航迹消批质量条件
|
||||||
|
#define TRACK_DIE_QUALITY_E4 0.3
|
||||||
|
#define TRACK_DIE_QUALITY_E5 0.4
|
||||||
|
#define TRACK_DIE_QUALITY_E6 0.5
|
||||||
|
#define TRACK_DIE_QUALITY_E7 0.6
|
||||||
|
#define TRACK_DIE_QUALITY_E8 0.7
|
||||||
|
|
||||||
|
#define TRACK_DIE_QUALITY_PRAMARY_E6 0.3
|
||||||
|
#define TRACK_DIE_QUALITY_PRAMARY_E7 0.4
|
||||||
|
#define TRACK_DIE_QUALITY_PRAMARY_E8 0.5
|
||||||
|
#define TRACK_DIE_QUALITY_PRAMARY_E9 0.6
|
||||||
|
#define TRACK_DIE_QUALITY_PRAMARY_E10 0.7
|
||||||
|
|
||||||
#ifdef MECHANICAL_SCANNING
|
#ifdef MECHANICAL_SCANNING
|
||||||
/******************************机扫数据处理参数**************************************/
|
/******************************机扫数据处理参数**************************************/
|
||||||
// #define DATA_RATE_TAS 0.0625
|
// #define DATA_RATE_TAS 0.0625
|
||||||
|
|||||||
@@ -54,13 +54,15 @@ struct Trust_Track
|
|||||||
double RCS; //RCS
|
double RCS; //RCS
|
||||||
double Quality; //航迹质量
|
double Quality; //航迹质量
|
||||||
|
|
||||||
long long T_track; //航迹时间
|
long long T_track; //航迹时间(CPI时间)
|
||||||
long long GNSS_time; //GNSS时间
|
long long GNSS_time; //GNSS时间
|
||||||
|
long long Unupdated_time; //航迹未更新时间
|
||||||
|
|
||||||
int Track_Sum; //航迹总数
|
int Track_Sum; //航迹总数
|
||||||
int Point_Index; //该航迹上的第几个点
|
int Point_Index; //该航迹上的第几个点
|
||||||
int Point_sum; //本条航迹更新点的数目
|
int Point_sum; //本条航迹更新点的数目
|
||||||
int Valid_point_sum; //本条航迹有效点的数目
|
int Valid_point_sum; //本条航迹有效点的数目
|
||||||
|
int associate_point_number; //关联的点数
|
||||||
|
|
||||||
int Track_Mode; //跟踪模式
|
int Track_Mode; //跟踪模式
|
||||||
int Track_Update_Flag; //航迹更新标志 1已更新/0未更新
|
int Track_Update_Flag; //航迹更新标志 1已更新/0未更新
|
||||||
@@ -71,8 +73,6 @@ struct Trust_Track
|
|||||||
|
|
||||||
int manual_delete_flag; //手动航迹删除
|
int manual_delete_flag; //手动航迹删除
|
||||||
int manual_tracking_flag; //手动TAS
|
int manual_tracking_flag; //手动TAS
|
||||||
int associate_point_number; //关联的点数
|
|
||||||
|
|
||||||
int primary_target_flag; //重点目标标记
|
int primary_target_flag; //重点目标标记
|
||||||
|
|
||||||
int Target_Type; //目标类型 搜索目标 低空目标 地面目标
|
int Target_Type; //目标类型 搜索目标 低空目标 地面目标
|
||||||
|
|||||||
@@ -668,6 +668,7 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
|
|||||||
//更新航迹时间
|
//更新航迹时间
|
||||||
(*trust_track)[track_index-1].T_track = point_process[point_index-1].CPI_time;
|
(*trust_track)[track_index-1].T_track = point_process[point_index-1].CPI_time;
|
||||||
(*trust_track)[track_index-1].GNSS_time = point_process[point_index-1].GNSS_time;
|
(*trust_track)[track_index-1].GNSS_time = point_process[point_index-1].GNSS_time;
|
||||||
|
(*trust_track)[track_index-1].Unupdated_time = 0;
|
||||||
|
|
||||||
//更新关联上的点迹信息
|
//更新关联上的点迹信息
|
||||||
(*trust_track)[track_index-1].point_id = point_process[point_index-1].point_id;
|
(*trust_track)[track_index-1].point_id = point_process[point_index-1].point_id;
|
||||||
@@ -737,10 +738,6 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
|
|||||||
{
|
{
|
||||||
if((*trust_track)[i].point_flag == 0 && (*trust_track)[i].manual_tracking_flag == 0) //未关联上点迹的航迹进行外推
|
if((*trust_track)[i].point_flag == 0 && (*trust_track)[i].manual_tracking_flag == 0) //未关联上点迹的航迹进行外推
|
||||||
{
|
{
|
||||||
//外推点数未到上限,则继续外推,否则不外推
|
|
||||||
if((*trust_track)[i].Extrapolate_round <= MAX_EXTRAPOLATE_NUM)
|
|
||||||
{
|
|
||||||
double v_track = sqrt(pow((*trust_track)[i].X[1],2)+pow((*trust_track)[i].X[4],2));
|
|
||||||
double delta_T = 0;
|
double delta_T = 0;
|
||||||
// double delta_T = (latest_timestamp - (*trust_track)[i].T_track)/1000.0;
|
// double delta_T = (latest_timestamp - (*trust_track)[i].T_track)/1000.0;
|
||||||
// if (delta_T <= 0)
|
// if (delta_T <= 0)
|
||||||
@@ -763,6 +760,11 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
|
|||||||
delta_T = Work_Parameter.DATA_RATE_SHORT;
|
delta_T = Work_Parameter.DATA_RATE_SHORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//外推点数未到上限,则继续外推,否则不外推
|
||||||
|
if((*trust_track)[i].Extrapolate_round <= MAX_EXTRAPOLATE_NUM)
|
||||||
|
{
|
||||||
|
double v_track = sqrt(pow((*trust_track)[i].X[1],2)+pow((*trust_track)[i].X[4],2));
|
||||||
|
|
||||||
double F[6][6], Q1[6][6], Q2[6][6], Q3[6][6];
|
double F[6][6], Q1[6][6], Q2[6][6], Q3[6][6];
|
||||||
IMM_F_Q_gen( v_track, delta_T, F, Q1, Q2, Q3,Work_Parameter);
|
IMM_F_Q_gen( v_track, delta_T, F, Q1, Q2, Q3,Work_Parameter);
|
||||||
|
|
||||||
@@ -776,7 +778,6 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
|
|||||||
memcpy(P3,(*trust_track)[i].P3,6*6*sizeof(double));
|
memcpy(P3,(*trust_track)[i].P3,6*6*sizeof(double));
|
||||||
|
|
||||||
//外推
|
//外推
|
||||||
|
|
||||||
double X1_pred[6],X2_pred[6],X3_pred[6],P1_pred[6][6],P2_pred[6][6],P3_pred[6][6];
|
double X1_pred[6],X2_pred[6],X3_pred[6],P1_pred[6][6],P2_pred[6][6],P3_pred[6][6];
|
||||||
kalman Kalman;
|
kalman Kalman;
|
||||||
Kalman.kalman_pred(F, Q1, X1, P1, X1_pred, P1_pred);
|
Kalman.kalman_pred(F, Q1, X1, P1, X1_pred, P1_pred);
|
||||||
@@ -792,17 +793,19 @@ void Track_Asso:: model_filter(std::vector <Trust_Track> *trust_track,struct Ra
|
|||||||
(*trust_track)[i].circle_id++;
|
(*trust_track)[i].circle_id++;
|
||||||
(*trust_track)[i].T_track = static_cast<long long>((*trust_track)[i].T_track+delta_T*1000.0); //更新航迹时间
|
(*trust_track)[i].T_track = static_cast<long long>((*trust_track)[i].T_track+delta_T*1000.0); //更新航迹时间
|
||||||
(*trust_track)[i].GNSS_time = static_cast<long long>((*trust_track)[i].GNSS_time+delta_T*1000.0); //更新航迹时间
|
(*trust_track)[i].GNSS_time = static_cast<long long>((*trust_track)[i].GNSS_time+delta_T*1000.0); //更新航迹时间
|
||||||
|
(*trust_track)[i].Unupdated_time += static_cast<long long>(delta_T*1000.0);
|
||||||
(*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间
|
(*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间
|
||||||
(*trust_track)[i].point_flag=0; //虚点
|
(*trust_track)[i].point_flag=0; //虚点
|
||||||
(*trust_track)[i].Track_Update_Flag = 1; //航迹更新标志
|
(*trust_track)[i].Track_Update_Flag = 1; //航迹更新标志
|
||||||
}else{
|
}else{
|
||||||
(*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间
|
(*trust_track)[i].Extrapolate_round =(*trust_track)[i].Extrapolate_round+1; //连续未用实点更新时间
|
||||||
|
(*trust_track)[i].Unupdated_time += static_cast<long long>(delta_T*1000.0);
|
||||||
(*trust_track)[i].point_flag=0; //虚点
|
(*trust_track)[i].point_flag=0; //虚点
|
||||||
(*trust_track)[i].Track_Update_Flag = 0; //航迹更新标志
|
(*trust_track)[i].Track_Update_Flag = 0; //航迹更新标志
|
||||||
}
|
}
|
||||||
|
|
||||||
//航迹质量递减
|
//航迹质量递减
|
||||||
(*trust_track)[i].Quality -= (*trust_track)[i].Extrapolate_round * TRACK_QUALITY_DECREASE_COEFF;
|
(*trust_track)[i].Quality -= (*trust_track)[i].Unupdated_time / 1000.0 * TRACK_QUALITY_DECREASE_COEFF;
|
||||||
(*trust_track)[i].Quality = (*trust_track)[i].Quality < 0.0 ? 0.0 : (*trust_track)[i].Quality;
|
(*trust_track)[i].Quality = (*trust_track)[i].Quality < 0.0 ? 0.0 : (*trust_track)[i].Quality;
|
||||||
(*trust_track)[i].Point_sum = (*trust_track)[i].Point_sum + 1;
|
(*trust_track)[i].Point_sum = (*trust_track)[i].Point_sum + 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,19 @@ void Track_Die::track_die_process( std::vector <Trust_Track> *trust_track,
|
|||||||
{
|
{
|
||||||
bool die_flag = false;
|
bool die_flag = false;
|
||||||
|
|
||||||
|
//手动删除
|
||||||
if((*Iter).manual_delete_flag == 1)
|
if((*Iter).manual_delete_flag == 1)
|
||||||
{
|
{
|
||||||
die_flag = true;
|
die_flag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//非重点航迹自动消亡
|
||||||
if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 0 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND)
|
if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 0 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND)
|
||||||
{
|
{
|
||||||
die_flag = true;
|
die_flag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//重点航迹自动消亡
|
||||||
if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 1 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND_PRIMARY)
|
if((*Iter).Track_Mode == 0 && (*Iter).primary_target_flag == 1 && (*Iter).Extrapolate_round > TRACK_DIE_ROUND_PRIMARY)
|
||||||
{
|
{
|
||||||
die_flag = true;
|
die_flag = true;
|
||||||
|
|||||||
@@ -663,6 +663,7 @@ void Track_Init::tmp_track_to_trust_track(std::vector<Trust_Track> *trust_tra
|
|||||||
std::memcpy(trust_track_tmp.range_dim, Track_to_start[i][L-1].range_dim, sizeof(trust_track_tmp.range_dim));
|
std::memcpy(trust_track_tmp.range_dim, Track_to_start[i][L-1].range_dim, sizeof(trust_track_tmp.range_dim));
|
||||||
trust_track_tmp.T_track = Track_to_start[i][L-1].CPI_time;
|
trust_track_tmp.T_track = Track_to_start[i][L-1].CPI_time;
|
||||||
trust_track_tmp.GNSS_time = Track_to_start[i][L-1].GNSS_time;
|
trust_track_tmp.GNSS_time = Track_to_start[i][L-1].GNSS_time;
|
||||||
|
trust_track_tmp.Unupdated_time = 0;
|
||||||
trust_track_tmp.point_flag=1; //实点
|
trust_track_tmp.point_flag=1; //实点
|
||||||
trust_track_tmp.Track_Mode=0; //跟踪模式 TWS 0
|
trust_track_tmp.Track_Mode=0; //跟踪模式 TWS 0
|
||||||
trust_track_tmp.Target_Type=UNCONF_TARGET;
|
trust_track_tmp.Target_Type=UNCONF_TARGET;
|
||||||
|
|||||||
Reference in New Issue
Block a user