Apollo 11.0
自动驾驶开放平台
apollo::v2x::ft::Fusion类 参考

#include <fusion.h>

apollo::v2x::ft::Fusion 的协作图:

Public 成员函数

 Fusion ()
 
 ~Fusion ()
 
bool Proc (const std::vector< std::vector< base::Object > > &input_objectlists, double timestamp)
 
bool Init ()
 
std::vector< base::Object > & get_fused_objects ()
 
std::vector< std::vector< base::Object > > & get_fusion_result ()
 
bool CombineNewResource (const std::vector< base::Object > &new_objects, std::vector< base::Object > *fused_objects, std::vector< std::vector< base::Object > > *fusion_result)
 
bool GetV2xFusionObjects (const std::vector< std::vector< base::Object > > &fusion_result, std::vector< base::Object > *fused_objects)
 
int DeleteRedundant (std::vector< base::Object > *objects)
 

详细描述

在文件 fusion.h 第 38 行定义.

构造及析构函数说明

◆ Fusion()

apollo::v2x::ft::Fusion::Fusion ( )

在文件 fusion.cc 第 26 行定义.

26 {
27 ft_config_manager_ptr_ = FTConfigManager::Instance();
28
29 score_params_ = ft_config_manager_ptr_->fusion_params_.params.score_params();
30 switch (score_params_.confidence_level()) {
32 m_matched_dis_limit_ = std::sqrt(4.605);
33 break;
35 m_matched_dis_limit_ = std::sqrt(5.991);
36 break;
38 m_matched_dis_limit_ = std::sqrt(7.378);
39 break;
41 m_matched_dis_limit_ = std::sqrt(9.210);
42 break;
43 default:
44 break;
45 }
46}
optional ConfidenceLevel confidence_level

◆ ~Fusion()

apollo::v2x::ft::Fusion::~Fusion ( )
inline

在文件 fusion.h 第 41 行定义.

41{}

成员函数说明

◆ CombineNewResource()

bool apollo::v2x::ft::Fusion::CombineNewResource ( const std::vector< base::Object > &  new_objects,
std::vector< base::Object > *  fused_objects,
std::vector< std::vector< base::Object > > *  fusion_result 
)

在文件 fusion.cc 第 68 行定义.

71 {
72 if (new_objects.empty()) {
73 return false;
74 }
75 if (fused_objects->size() < 1) {
76 fused_objects->assign(new_objects.begin(), new_objects.end());
77 for (unsigned int j = 0; j < new_objects.size(); ++j) {
78 std::vector<base::Object> matched_objects;
79 matched_objects.push_back(new_objects[j]);
80 fusion_result->push_back(matched_objects);
81 }
82 return true;
83 }
84 int u_num = fused_objects->size();
85 int v_num = new_objects.size();
86 Eigen::MatrixXf association_mat(u_num, v_num);
87 ComputeAssociateMatrix(*fused_objects, new_objects, &association_mat);
88 std::vector<std::pair<int, int>> match_cps;
89 if (u_num > v_num) {
90 km_matcher_.GetKMResult(association_mat.transpose(), &match_cps, true);
91 } else {
92 km_matcher_.GetKMResult(association_mat, &match_cps, false);
93 }
94 for (auto it = match_cps.begin(); it != match_cps.end(); it++) {
95 if (it->second != -1) {
96 if (it->first == -1) {
97 fused_objects->push_back(new_objects[it->second]);
98 std::vector<base::Object> matched_objects;
99 matched_objects.push_back(fused_objects->back());
100 fusion_result->push_back(matched_objects);
101 } else {
102 (*fusion_result)[it->first].push_back(new_objects[it->second]);
103 }
104 }
105 }
106 return true;
107}
bool GetKMResult(const T &association_mat, std::vector< std::pair< int, int > > *match_cps, bool need_reverse=false)
Definition km.h:60

◆ DeleteRedundant()

int apollo::v2x::ft::Fusion::DeleteRedundant ( std::vector< base::Object > *  objects)

在文件 fusion.cc 第 200 行定义.

200 {
201 std::vector<unsigned int> to_be_deleted;
202 for (unsigned int i = 0; i < objects->size(); ++i) {
203 for (unsigned int j = i + 1; j < objects->size(); ++j) {
204 double distance = CheckOdistance(objects->at(i), objects->at(j));
205 if (distance < 1) {
206 to_be_deleted.push_back(j);
207 }
208 }
209 }
210 for (auto iter = to_be_deleted.rbegin(); iter != to_be_deleted.rend();
211 ++iter) {
212 objects->erase(objects->begin() + *iter);
213 }
214 return to_be_deleted.size();
215}

◆ get_fused_objects()

std::vector< base::Object > & apollo::v2x::ft::Fusion::get_fused_objects ( )
inline

在文件 fusion.h 第 45 行定义.

45{ return updated_objects_; }

◆ get_fusion_result()

std::vector< std::vector< base::Object > > & apollo::v2x::ft::Fusion::get_fusion_result ( )
inline

在文件 fusion.h 第 46 行定义.

46 {
47 return fusion_result_;
48 }

◆ GetV2xFusionObjects()

bool apollo::v2x::ft::Fusion::GetV2xFusionObjects ( const std::vector< std::vector< base::Object > > &  fusion_result,
std::vector< base::Object > *  fused_objects 
)

在文件 fusion.cc 第 109 行定义.

111 {
112 for (const auto &objects : fusion_result) {
113 if (objects.size() == 1) {
114 fused_objects->push_back(objects.at(0));
115 if (objects.at(0).frame_id == "V2X") {
116 fused_objects->back().v2x_type = base::V2xType::BLIND_ZONE;
117 } else {
118 fused_objects->back().v2x_type = base::V2xType::UNKNOWN;
119 }
120 } else {
121 fused_objects->push_back(objects.at(0));
122 host_vehicle_ = false;
123 zom_vehicle_ = false;
124 for (const auto &object : objects) {
125 if (object.v2x_type == base::V2xType::HOST_VEHICLE) {
126 host_vehicle_ = true;
127 } else if (object.v2x_type == base::V2xType::ZOMBIES_CAR) {
128 zom_vehicle_ = true;
129 }
130 }
131 if (zom_vehicle_ == true) {
132 fused_objects->back().v2x_type = base::V2xType::ZOMBIES_CAR;
133 }
134 if (host_vehicle_ == true) {
135 fused_objects->back().v2x_type = base::V2xType::HOST_VEHICLE;
136 }
137 }
138 }
139 return true;
140}

◆ Init()

bool apollo::v2x::ft::Fusion::Init ( )

在文件 fusion.cc 第 48 行定义.

48 {
49 last_timestamp_ = -1.0;
50 return true;
51}

◆ Proc()

bool apollo::v2x::ft::Fusion::Proc ( const std::vector< std::vector< base::Object > > &  input_objectlists,
double  timestamp 
)

在文件 fusion.cc 第 53 行定义.

55 {
56 fusion_result_.clear();
57 updated_objects_.clear();
58 for (unsigned int i = 0; i < input_objectlists.size(); ++i) {
59 CombineNewResource(input_objectlists[i]);
60 }
61 return true;
62}
bool CombineNewResource(const std::vector< base::Object > &new_objects, std::vector< base::Object > *fused_objects, std::vector< std::vector< base::Object > > *fusion_result)
Definition fusion.cc:68

该类的文档由以下文件生成: