Apollo 11.0
自动驾驶开放平台
apollo::perception::fusion::HMTrackersObjectsAssociation类 参考

#include <hm_tracks_objects_match.h>

类 apollo::perception::fusion::HMTrackersObjectsAssociation 继承关系图:
apollo::perception::fusion::HMTrackersObjectsAssociation 的协作图:

Public 成员函数

 HMTrackersObjectsAssociation ()=default
 
 ~HMTrackersObjectsAssociation ()=default
 
bool Init (const AssociationInitOptions &options) override
 initialization
 
bool Associate (const AssociationOptions &options, SensorFramePtr sensor_measurements, ScenePtr scene, AssociationResult *association_result) override
 Associate the obstacles measured by the sensor with the obstacles tracked in current scene
 
std::string Name () const override
 The name of BaseDataAssociation
 
- Public 成员函数 继承自 apollo::perception::fusion::BaseDataAssociation
 BaseDataAssociation ()=default
 
virtual ~BaseDataAssociation ()=default
 
 DISALLOW_COPY_AND_ASSIGN (BaseDataAssociation)
 

详细描述

在文件 hm_tracks_objects_match.h 第 30 行定义.

构造及析构函数说明

◆ HMTrackersObjectsAssociation()

apollo::perception::fusion::HMTrackersObjectsAssociation::HMTrackersObjectsAssociation ( )
default

◆ ~HMTrackersObjectsAssociation()

apollo::perception::fusion::HMTrackersObjectsAssociation::~HMTrackersObjectsAssociation ( )
default

成员函数说明

◆ Associate()

bool apollo::perception::fusion::HMTrackersObjectsAssociation::Associate ( const AssociationOptions &  options,
SensorFramePtr  sensor_measurements,
ScenePtr  scene,
AssociationResult *  association_result 
)
overridevirtual

Associate the obstacles measured by the sensor with the obstacles tracked in current scene

参数
options
sensor_measurementsobstacles measured by the sensor
sceneobstacles tracked in current scene
association_resultassociation result
返回
true
false

实现了 apollo::perception::fusion::BaseDataAssociation.

在文件 hm_tracks_objects_match.cc 第 47 行定义.

49 {
50 const std::vector<SensorObjectPtr>& sensor_objects =
51 sensor_measurements->GetForegroundObjects();
52 const std::vector<TrackPtr>& fusion_tracks = scene->GetForegroundTracks();
53 std::vector<std::vector<double>> association_mat;
54
55 if (fusion_tracks.empty() || sensor_objects.empty()) {
56 association_result->unassigned_tracks.resize(fusion_tracks.size());
57 association_result->unassigned_measurements.resize(sensor_objects.size());
58 std::iota(association_result->unassigned_tracks.begin(),
59 association_result->unassigned_tracks.end(), 0);
60 std::iota(association_result->unassigned_measurements.begin(),
61 association_result->unassigned_measurements.end(), 0);
62 return true;
63 }
64
65 std::string measurement_sensor_id = sensor_objects[0]->GetSensorId();
66 double measurement_timestamp = sensor_objects[0]->GetTimestamp();
67 track_object_distance_.ResetProjectionCache(measurement_sensor_id,
68 measurement_timestamp);
69 bool do_nothing = (measurement_sensor_id == "radar_front" ||
70 measurement_sensor_id == "radar_rear");
71 IdAssign(fusion_tracks, sensor_objects, &association_result->assignments,
72 &association_result->unassigned_tracks,
73 &association_result->unassigned_measurements, do_nothing, false);
74
75 Eigen::Affine3d pose;
76 sensor_measurements->GetPose(&pose);
77 Eigen::Vector3d ref_point = pose.translation();
78
79 ADEBUG << "association_measurement_timestamp@" << measurement_timestamp;
80 ComputeAssociationDistanceMat(fusion_tracks, sensor_objects, ref_point,
81 association_result->unassigned_tracks,
82 association_result->unassigned_measurements,
83 &association_mat);
84
85 int num_track = static_cast<int>(fusion_tracks.size());
86 int num_measurement = static_cast<int>(sensor_objects.size());
87 association_result->track2measurements_dist.assign(num_track, 0);
88 association_result->measurement2track_dist.assign(num_measurement, 0);
89 std::vector<int> track_ind_g2l;
90 track_ind_g2l.resize(num_track, -1);
91 for (size_t i = 0; i < association_result->unassigned_tracks.size(); ++i) {
92 track_ind_g2l[association_result->unassigned_tracks[i]] =
93 static_cast<int>(i);
94 }
95 std::vector<int> measurement_ind_g2l;
96 measurement_ind_g2l.resize(num_measurement, -1);
97 std::vector<size_t> measurement_ind_l2g =
98 association_result->unassigned_measurements;
99 for (size_t i = 0; i < association_result->unassigned_measurements.size();
100 ++i) {
101 measurement_ind_g2l[association_result->unassigned_measurements[i]] =
102 static_cast<int>(i);
103 }
104 std::vector<size_t> track_ind_l2g = association_result->unassigned_tracks;
105
106 if (association_result->unassigned_tracks.empty() ||
107 association_result->unassigned_measurements.empty()) {
108 return true;
109 }
110
111 bool state = MinimizeAssignment(
112 association_mat, track_ind_l2g, measurement_ind_l2g,
113 &association_result->assignments, &association_result->unassigned_tracks,
114 &association_result->unassigned_measurements);
115
116 // start do post assign
117 std::vector<TrackMeasurmentPair> post_assignments;
118 PostIdAssign(fusion_tracks, sensor_objects,
119 association_result->unassigned_tracks,
120 association_result->unassigned_measurements, &post_assignments);
121 association_result->assignments.insert(association_result->assignments.end(),
122 post_assignments.begin(),
123 post_assignments.end());
124
125 GenerateUnassignedData(fusion_tracks.size(), sensor_objects.size(),
126 association_result->assignments,
127 &association_result->unassigned_tracks,
128 &association_result->unassigned_measurements);
129
130 ComputeDistance(fusion_tracks, sensor_objects,
131 association_result->unassigned_tracks, track_ind_g2l,
132 measurement_ind_g2l, measurement_ind_l2g, association_mat,
133 association_result);
134
135 AINFO << "association: measurement_num = " << sensor_objects.size()
136 << ", track_num = " << fusion_tracks.size()
137 << ", assignments = " << association_result->assignments.size()
138 << ", unassigned_tracks = "
139 << association_result->unassigned_tracks.size()
140 << ", unassigned_measuremnets = "
141 << association_result->unassigned_measurements.size();
142
143 return state;
144}
void ResetProjectionCache(std::string sensor_id, double timestamp)
#define ADEBUG
Definition log.h:41
#define AINFO
Definition log.h:42

◆ Init()

bool apollo::perception::fusion::HMTrackersObjectsAssociation::Init ( const AssociationInitOptions &  options)
inlineoverridevirtual

initialization

参数
options
返回
true
false

实现了 apollo::perception::fusion::BaseDataAssociation.

在文件 hm_tracks_objects_match.h 第 42 行定义.

42 {
43 track_object_distance_.set_distance_thresh(
44 static_cast<float>(s_match_distance_thresh_));
45 return true;
46 }
void set_distance_thresh(const float distance_thresh)
Set the distance thresh

◆ Name()

std::string apollo::perception::fusion::HMTrackersObjectsAssociation::Name ( ) const
inlineoverridevirtual

The name of BaseDataAssociation

返回
std::string

实现了 apollo::perception::fusion::BaseDataAssociation.

在文件 hm_tracks_objects_match.h 第 63 行定义.

63{ return "HMTrackersObjectsAssociation"; }

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