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

#include <mrf_engine.h>

类 apollo::perception::radar4d::MrfEngine 继承关系图:
apollo::perception::radar4d::MrfEngine 的协作图:

Public 成员函数

 MrfEngine ()=default
 
virtual ~MrfEngine ()=default
 
bool Init (const MultiTargetTrackerInitOptions &options=MultiTargetTrackerInitOptions()) override
 Init mrf engine
 
bool Track (const MultiTargetTrackerOptions &options, RadarFrame *frame) override
 Track segmented objects from multiple radar sensors
 
std::string Name () const override
 Get class name
 
- Public 成员函数 继承自 apollo::perception::radar4d::BaseMultiTargetTracker
 BaseMultiTargetTracker ()=default
 
virtual ~BaseMultiTargetTracker ()=default
 

Protected 成员函数

void SplitAndTransformToTrackedObjects (const std::vector< base::ObjectPtr > &objects, const base::SensorInfo &sensor_info)
 Split foreground/background objects and attach to tracked objects
 
void TrackObjectMatchAndAssign (const MrfTrackObjectMatcherOptions &match_options, const std::vector< TrackedObjectPtr > &objects, const std::string &name, std::vector< MrfTrackDataPtr > *tracks)
 Match tracks and objets and object-track assignment
 
void TrackStateFilter (const std::vector< MrfTrackDataPtr > &tracks, double frame_timestamp)
 Filter tracks
 
void CollectTrackedResult (RadarFrame *frame)
 Collect track results and store in frame tracked objects
 
void RemoveStaleTrackData (const std::string &name, double timestamp, std::vector< MrfTrackDataPtr > *tracks)
 Remove stale track data for memory management
 
void Clear ()
 Clear all data
 

Protected 属性

std::vector< MrfTrackDataPtrforeground_track_data_
 
std::vector< MrfTrackDataPtrbackground_track_data_
 
std::vector< TrackedObjectPtrforeground_objects_
 
std::vector< TrackedObjectPtrbackground_objects_
 
std::unique_ptr< MrfTrackertracker_
 
std::unique_ptr< MrfTrackObjectMatchermatcher_
 
Eigen::Vector3d global_to_local_offset_
 
Eigen::Affine3d sensor_to_local_pose_
 
std::set< std::string > main_sensors_
 
bool use_histogram_for_match_ = true
 
size_t histogram_bin_size_ = 10
 
bool output_predict_objects_ = false
 
double reserved_invisible_time_ = 0.3
 
bool use_frame_timestamp_ = false
 
apollo::prediction::ObstaclesContainer obstacle_container_
 
apollo::prediction::PoseContainer pose_container_
 
apollo::perception::onboard::MsgSerializer serializer_
 
bool use_semantic_map_ = false
 

详细描述

在文件 mrf_engine.h36 行定义.

构造及析构函数说明

◆ MrfEngine()

apollo::perception::radar4d::MrfEngine::MrfEngine ( )
default

◆ ~MrfEngine()

virtual apollo::perception::radar4d::MrfEngine::~MrfEngine ( )
virtualdefault

成员函数说明

◆ Clear()

void apollo::perception::radar4d::MrfEngine::Clear ( )
protected

Clear all data

在文件 mrf_engine.cc36 行定义.

36 {
37 main_sensors_.clear();
38 foreground_objects_.clear();
39 background_objects_.clear();
42}
std::vector< TrackedObjectPtr > foreground_objects_
Definition mrf_engine.h:136
std::set< std::string > main_sensors_
Definition mrf_engine.h:146
std::vector< TrackedObjectPtr > background_objects_
Definition mrf_engine.h:137
std::vector< MrfTrackDataPtr > background_track_data_
Definition mrf_engine.h:134
std::vector< MrfTrackDataPtr > foreground_track_data_
Definition mrf_engine.h:133

◆ CollectTrackedResult()

void apollo::perception::radar4d::MrfEngine::CollectTrackedResult ( RadarFrame frame)
protected

Collect track results and store in frame tracked objects

参数
frameradar frame

在文件 mrf_engine.cc243 行定义.

243 {
244 auto& tracked_objects = frame->tracked_objects;
245 tracked_objects.clear();
246 size_t num_objects =
248 base::ObjectPool::Instance().BatchGet(num_objects, &tracked_objects);
249 size_t pos = 0;
250 size_t num_predict = 0;
251 auto collect = [&](std::vector<MrfTrackDataPtr>* tracks) {
252 for (auto& track_data : *tracks) {
253 if (!output_predict_objects_ && track_data->is_current_state_predicted_) {
254 ++num_predict;
255 } else {
256 if (!track_data->ToObject(-global_to_local_offset_, frame->timestamp,
257 tracked_objects[pos])) {
258 AERROR << "Tracking failed";
259 continue;
260 }
261 ++pos;
262 }
263 }
264 };
265 collect(&foreground_track_data_);
266 // update semantic map object container
267// TODO(all): semantic map related, for debugging
268// if (use_semantic_map_) {
269// obstacle_container_.CleanUp();
270// // use msg serializer to convert object to perception obstacles
271// apollo::common::ErrorCode err = apollo::common::ErrorCode::OK;
272// apollo::perception::PerceptionObstacles obstacles;
273// double radar_ts = frame->timestamp;
274// localization::LocalizationEstimate localization;
275// localization.mutable_header()->set_timestamp_sec(radar_ts);
276// localization.mutable_header()->set_radar_timestamp(radar_ts * 1e9);
277// localization.mutable_pose()->mutable_linear_velocity()->set_x(0.0f);
278// localization.mutable_pose()->mutable_linear_velocity()->set_y(0.0f);
279// localization.mutable_pose()->mutable_linear_velocity()->set_z(0.0f);
280// convertPoseToLoc(frame->novatel2world_pose, &localization);
281// pose_container_.Insert(localization);
282// obstacle_container_.InsertPerceptionObstacle(
283// *(pose_container_.ToPerceptionObstacle()), radar_ts);
284// std::vector<std::shared_ptr<base::Object>> foreground_objs(
285// tracked_objects.begin(), tracked_objects.begin() + pos);
286// serializer_.SerializeMsg(0, static_cast<uint64_t>(radar_ts * 1e9), 0,
287// foreground_objs, err, &obstacles);
288// obstacle_container_.Insert(obstacles);
289// evaluator_.Run(&obstacle_container_);
290// AttachDebugInfo(&foreground_objs);
291// AttachSemanticPredictedTrajectory(foreground_track_data_);
292// }
293
294 collect(&background_track_data_);
295 if (num_predict != 0) {
296 AINFO << "MrfEngine, num_predict: " << num_predict
297 << " num_objects: " << num_objects;
298 if (num_predict > num_objects) {
299 AERROR << "num_predict > num_objects";
300 return;
301 }
302 tracked_objects.resize(num_objects - num_predict);
303 }
304}
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42

◆ Init()

bool apollo::perception::radar4d::MrfEngine::Init ( const MultiTargetTrackerInitOptions options = MultiTargetTrackerInitOptions())
overridevirtual

Init mrf engine

参数
options
返回
true
false

实现了 apollo::perception::radar4d::BaseMultiTargetTracker.

在文件 mrf_engine.cc44 行定义.

44 {
45 std::string config_file = GetConfigFile(
46 options.config_path, options.config_file);
47 MrfEngineConfig config;
48 ACHECK(cyber::common::GetProtoFromFile(config_file, &config));
49
50 Clear();
51
52 for (int i = 0; i < config.main_sensor_size(); ++i) {
53 main_sensors_.emplace(config.main_sensor(i));
54 }
55
56 // default value
57 if (main_sensors_.empty()) {
58 main_sensors_.emplace("radar_front");
59 }
60
61 use_histogram_for_match_ = config.use_histogram_for_match();
62 histogram_bin_size_ = config.histogram_bin_size();
63 output_predict_objects_ = config.output_predict_objects();
64 reserved_invisible_time_ = config.reserved_invisible_time();
65 use_frame_timestamp_ = config.use_frame_timestamp();
66
67 matcher_.reset(new MrfTrackObjectMatcher);
68 MrfTrackObjectMatcherInitOptions matcher_init_options;
69 matcher_init_options.config_path = options.config_path;
70 ACHECK(matcher_->Init(matcher_init_options));
71
72 tracker_.reset(new MrfTracker);
73 MrfTrackerInitOptions tracker_init_options;
74 tracker_init_options.config_path = options.config_path;
75 ACHECK(tracker_->Init(tracker_init_options));
76 return true;
77}
std::unique_ptr< MrfTracker > tracker_
Definition mrf_engine.h:139
std::unique_ptr< MrfTrackObjectMatcher > matcher_
Definition mrf_engine.h:141
#define ACHECK(cond)
Definition log.h:80
bool GetProtoFromFile(const std::string &file_name, google::protobuf::Message *message)
Parses the content of the file specified by the file_name as a representation of protobufs,...
Definition file.cc:132
std::string GetConfigFile(const std::string &config_path, const std::string &config_file)
Definition util.cc:80

◆ Name()

std::string apollo::perception::radar4d::MrfEngine::Name ( ) const
inlineoverridevirtual

Get class name

返回
std::string

实现了 apollo::perception::radar4d::BaseMultiTargetTracker.

在文件 mrf_engine.h68 行定义.

68{ return "MrfEngine"; };

◆ RemoveStaleTrackData()

void apollo::perception::radar4d::MrfEngine::RemoveStaleTrackData ( const std::string &  name,
double  timestamp,
std::vector< MrfTrackDataPtr > *  tracks 
)
protected

Remove stale track data for memory management

参数
name
timestamp
tracksto be cleaned

在文件 mrf_engine.cc306 行定义.

307 {
308 size_t pos = 0;
309 for (size_t i = 0; i < tracks->size(); ++i) {
310 if (tracks->at(i)->latest_visible_time_ + reserved_invisible_time_ >=
311 timestamp) {
312 if (i != pos) {
313 tracks->at(pos) = tracks->at(i);
314 }
315 ++pos;
316 }
317 }
318 AINFO << "MrfEngine: " << name << " remove stale tracks, from "
319 << tracks->size() << " to " << pos;
320 tracks->resize(pos);
321}

◆ SplitAndTransformToTrackedObjects()

void apollo::perception::radar4d::MrfEngine::SplitAndTransformToTrackedObjects ( const std::vector< base::ObjectPtr > &  objects,
const base::SensorInfo sensor_info 
)
protected

Split foreground/background objects and attach to tracked objects

参数
objects
sensor_info

在文件 mrf_engine.cc124 行定义.

126 {
127 std::vector<TrackedObjectPtr> tracked_objects;
128 TrackedObjectPool::Instance().BatchGet(objects.size(), &tracked_objects);
129 foreground_objects_.clear();
130 background_objects_.clear();
131 for (size_t i = 0; i < objects.size(); ++i) {
132 tracked_objects[i]->AttachObject(objects[i], sensor_to_local_pose_,
133 global_to_local_offset_, sensor_info);
134 if (!objects[i]->radar4d_supplement.is_background &&
136 tracked_objects[i]->histogram_bin_size = histogram_bin_size_;
137 tracked_objects[i]->ComputeShapeFeatures();
138 }
139 if (objects[i]->radar4d_supplement.is_background) {
140 background_objects_.push_back(tracked_objects[i]);
141 } else {
142 foreground_objects_.push_back(tracked_objects[i]);
143 }
144 }
145 AINFO << "MrfEngine: " << sensor_info.name
146 << " foreground: " << foreground_objects_.size()
147 << " background: " << background_objects_.size();
148}
void BatchGet(size_t num, std::vector< std::shared_ptr< ObjectType > > *data) override

◆ Track()

bool apollo::perception::radar4d::MrfEngine::Track ( const MultiTargetTrackerOptions options,
RadarFrame frame 
)
overridevirtual

Track segmented objects from multiple radar sensors

参数
optionstracker options
frameradar frame
返回
true
false

实现了 apollo::perception::radar4d::BaseMultiTargetTracker.

在文件 mrf_engine.cc79 行定义.

80 {
81 // 0. modify objects timestamp if necessary
83 for (auto& object : frame->segmented_objects) {
84 object->latest_tracked_time = frame->timestamp;
85 }
86 }
87 // 1. add global offset to pose (only when no track exists)
88 if (foreground_track_data_.empty() && background_track_data_.empty()) {
89 global_to_local_offset_ = -frame->radar2world_pose.translation();
90 }
91 sensor_to_local_pose_ = frame->radar2world_pose;
93 // 2. split fg and bg objects, and transform to tracked objects
94 SplitAndTransformToTrackedObjects(frame->segmented_objects,
95 frame->sensor_info);
96 // 3. assign tracked objects to tracks
97 MrfTrackObjectMatcherOptions match_options;
98 TrackObjectMatchAndAssign(match_options, foreground_objects_, "foreground",
100 TrackObjectMatchAndAssign(match_options, background_objects_, "background",
102 // 4. state filter in tracker if is main sensor
103 bool is_main_sensor =
104 (main_sensors_.find(frame->sensor_info.name) != main_sensors_.end());
105 if (is_main_sensor) {
106 TrackStateFilter(foreground_track_data_, frame->timestamp);
107 TrackStateFilter(background_track_data_, frame->timestamp);
108 }
109 // 5. track to object if is main sensor
110 frame->tracked_objects.clear();
111 if (is_main_sensor) {
113 }
114 // 6. remove stale data
115 RemoveStaleTrackData("foreground", frame->timestamp, &foreground_track_data_);
116 RemoveStaleTrackData("background", frame->timestamp, &background_track_data_);
117
118 AINFO << "MrfEngine publish objects: " << frame->tracked_objects.size()
119 << " sensor_name: " << frame->sensor_info.name
120 << " at timestamp: " << frame->timestamp;
121 return true;
122}
void SplitAndTransformToTrackedObjects(const std::vector< base::ObjectPtr > &objects, const base::SensorInfo &sensor_info)
Split foreground/background objects and attach to tracked objects
void TrackObjectMatchAndAssign(const MrfTrackObjectMatcherOptions &match_options, const std::vector< TrackedObjectPtr > &objects, const std::string &name, std::vector< MrfTrackDataPtr > *tracks)
Match tracks and objets and object-track assignment
void CollectTrackedResult(RadarFrame *frame)
Collect track results and store in frame tracked objects
void TrackStateFilter(const std::vector< MrfTrackDataPtr > &tracks, double frame_timestamp)
Filter tracks
void RemoveStaleTrackData(const std::string &name, double timestamp, std::vector< MrfTrackDataPtr > *tracks)
Remove stale track data for memory management

◆ TrackObjectMatchAndAssign()

void apollo::perception::radar4d::MrfEngine::TrackObjectMatchAndAssign ( const MrfTrackObjectMatcherOptions match_options,
const std::vector< TrackedObjectPtr > &  objects,
const std::string &  name,
std::vector< MrfTrackDataPtr > *  tracks 
)
protected

Match tracks and objets and object-track assignment

参数
match_optionsmatch options
objectsfor match
name
trackstracks for match and assignment

在文件 mrf_engine.cc150 行定义.

153 {
154 std::vector<std::pair<size_t, size_t>> assignments;
155 std::vector<size_t> unassigned_tracks;
156 std::vector<size_t> unassigned_objects;
157 matcher_->Match(match_options, objects, *tracks, &assignments,
158 &unassigned_tracks, &unassigned_objects);
159 AINFO << "MrfEngine: " + name + " assignments " << assignments.size()
160 << " unassigned_tracks " << unassigned_tracks.size()
161 << " unassigned_objects " << unassigned_objects.size();
162 // 1. for assignment, push object to cache of track_data
163 for (auto& pair : assignments) {
164 const size_t track_id = pair.first;
165 const size_t object_id = pair.second;
166 tracks->at(track_id)->PushTrackedObjectToCache(objects[object_id]);
167 }
168 // 2. for unassigned_objects, create new tracks
169 for (auto& id : unassigned_objects) {
171 tracker_->InitializeTrack(track_data, objects[id]);
172 tracks->push_back(track_data);
173 }
174}
std::shared_ptr< ObjectType > Get() override
std::shared_ptr< MrfTrackData > MrfTrackDataPtr

◆ TrackStateFilter()

void apollo::perception::radar4d::MrfEngine::TrackStateFilter ( const std::vector< MrfTrackDataPtr > &  tracks,
double  frame_timestamp 
)
protected

Filter tracks

参数
tracksfor filter
frame_timestamp

在文件 mrf_engine.cc176 行定义.

177 {
178 std::vector<TrackedObjectPtr> objects;
179 for (auto& track_data : tracks) {
180 track_data->GetAndCleanCachedObjectsInTimeInterval(&objects);
181 for (auto& obj : objects) {
182 tracker_->UpdateTrackDataWithObject(track_data, obj);
183 }
184 if (objects.empty()) {
185 tracker_->UpdateTrackDataWithoutObject(frame_timestamp, track_data);
186 }
187 }
188}

类成员变量说明

◆ background_objects_

std::vector<TrackedObjectPtr> apollo::perception::radar4d::MrfEngine::background_objects_
protected

在文件 mrf_engine.h137 行定义.

◆ background_track_data_

std::vector<MrfTrackDataPtr> apollo::perception::radar4d::MrfEngine::background_track_data_
protected

在文件 mrf_engine.h134 行定义.

◆ foreground_objects_

std::vector<TrackedObjectPtr> apollo::perception::radar4d::MrfEngine::foreground_objects_
protected

在文件 mrf_engine.h136 行定义.

◆ foreground_track_data_

std::vector<MrfTrackDataPtr> apollo::perception::radar4d::MrfEngine::foreground_track_data_
protected

在文件 mrf_engine.h133 行定义.

◆ global_to_local_offset_

Eigen::Vector3d apollo::perception::radar4d::MrfEngine::global_to_local_offset_
protected

在文件 mrf_engine.h143 行定义.

◆ histogram_bin_size_

size_t apollo::perception::radar4d::MrfEngine::histogram_bin_size_ = 10
protected

在文件 mrf_engine.h149 行定义.

◆ main_sensors_

std::set<std::string> apollo::perception::radar4d::MrfEngine::main_sensors_
protected

在文件 mrf_engine.h146 行定义.

◆ matcher_

std::unique_ptr<MrfTrackObjectMatcher> apollo::perception::radar4d::MrfEngine::matcher_
protected

在文件 mrf_engine.h141 行定义.

◆ obstacle_container_

apollo::prediction::ObstaclesContainer apollo::perception::radar4d::MrfEngine::obstacle_container_
protected

在文件 mrf_engine.h154 行定义.

◆ output_predict_objects_

bool apollo::perception::radar4d::MrfEngine::output_predict_objects_ = false
protected

在文件 mrf_engine.h150 行定义.

◆ pose_container_

apollo::prediction::PoseContainer apollo::perception::radar4d::MrfEngine::pose_container_
protected

在文件 mrf_engine.h155 行定义.

◆ reserved_invisible_time_

double apollo::perception::radar4d::MrfEngine::reserved_invisible_time_ = 0.3
protected

在文件 mrf_engine.h151 行定义.

◆ sensor_to_local_pose_

Eigen::Affine3d apollo::perception::radar4d::MrfEngine::sensor_to_local_pose_
protected

在文件 mrf_engine.h144 行定义.

◆ serializer_

apollo::perception::onboard::MsgSerializer apollo::perception::radar4d::MrfEngine::serializer_
protected

在文件 mrf_engine.h156 行定义.

◆ tracker_

std::unique_ptr<MrfTracker> apollo::perception::radar4d::MrfEngine::tracker_
protected

在文件 mrf_engine.h139 行定义.

◆ use_frame_timestamp_

bool apollo::perception::radar4d::MrfEngine::use_frame_timestamp_ = false
protected

在文件 mrf_engine.h152 行定义.

◆ use_histogram_for_match_

bool apollo::perception::radar4d::MrfEngine::use_histogram_for_match_ = true
protected

在文件 mrf_engine.h148 行定义.

◆ use_semantic_map_

bool apollo::perception::radar4d::MrfEngine::use_semantic_map_ = false
protected

在文件 mrf_engine.h157 行定义.


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