Apollo 10.0
自动驾驶开放平台
apollo::perception::lidar::MlfTrackData类 参考

#include <mlf_track_data.h>

类 apollo::perception::lidar::MlfTrackData 继承关系图:
apollo::perception::lidar::MlfTrackData 的协作图:

Public 类型

typedef std::map< double, TrackedObjectPtr > TimedObjects
 

Public 成员函数

EIGEN_MAKE_ALIGNED_OPERATOR_NEW MlfTrackData ()=default
 
 ~MlfTrackData ()=default
 
void Reset () override
 Reset
 
void Reset (TrackedObjectPtr obj, int track_id)
 Reset all data
 
void PushTrackedObjectToTrack (TrackedObjectPtr obj)
 Push tracked object to track
 
void PushTrackedObjectToCache (TrackedObjectPtr obj)
 Push tracked object to cache
 
bool ToObject (const Eigen::Vector3d &local_to_global_offset, double timestamp, base::ObjectPtr object, bool update_time=true) const
 Convert tracked object to base object
 
void RemoveStaleHistory (double timestamp)
 Remove stale history data
 
void PredictState (double timestamp) const
 Predict state
 
void GetAndCleanCachedObjectsInTimeInterval (std::vector< TrackedObjectPtr > *objects)
 Get and clean cached objects in time interval
 
std::pair< double, TrackedObjectPtr > GetLatestSensorObject (const std::string &sensor_name)
 Get latest sensor object
 
std::pair< double, TrackedObjectConstPtr > GetLatestSensorObject (const std::string &sensor_name) const
 Get latest sensor object
 
void GetLatestKObjects (size_t k, std::vector< TrackedObjectPtr > *objects)
 
void GetLatestKObjects (size_t k, std::vector< TrackedObjectConstPtr > *objects) const
 
void GetObjectsInIntervalByOrder (double time, std::vector< TrackedObjectConstPtr > *objects)
 
void GetObjectsInIntervalByOrder (double time, std::vector< TrackedObjectConstPtr > *objects) const
 
- Public 成员函数 继承自 apollo::perception::lidar::TrackData
 TrackData ()
 
 TrackData (TrackedObjectPtr obj, int track_id)
 
virtual ~TrackData ()
 
std::pair< double, TrackedObjectPtr > GetLatestObject ()
 Get latest object
 
std::pair< double, TrackedObjectConstPtr > GetLatestObject () const
 Get latest object
 
std::pair< double, TrackedObjectPtr > GetOldestObject ()
 Get oldest object
 
std::pair< double, TrackedObjectConstPtr > GetOldestObject () const
 Get oldest object
 
std::pair< double, TrackedObjectPtr > GetHistoryObject (int idx)
 Get histroy object
 
std::pair< double, TrackedObjectConstPtr > GetHistoryObject (int idx) const
 Get histroy object
 
std::map< double, TrackedObjectPtr > GetHistoryObjects () const
 
virtual void Reset (TrackedObjectPtr obj, double time, int track_id)
 Reset
 
virtual void PushTrackedObjectToTrack (TrackedObjectPtr obj, double time)
 Push tracked object to track
 

Public 属性

std::map< std::string, TimedObjects > sensor_history_objects_
 
TimedObjects cached_objects_
 
MlfPredict predict_
 
double duration_ = 0.0
 
double consecutive_invisible_time_ = 0.0
 
double latest_visible_time_ = 0.0
 
double latest_cached_time_ = 0.0
 
double first_tracked_time_ = 0.0
 
bool is_current_state_predicted_ = true
 
bool is_front_critical_track_ = false
 
bool is_reserve_blind_cone_ = false
 
- Public 属性 继承自 apollo::perception::lidar::TrackData
int track_id_ = -1
 
int age_ = 0
 
int consecutive_invisible_count_ = 0
 
int total_visible_count_ = 0
 
std::map< double, TrackedObjectPtr > history_objects_
 
int max_history_size_ = 40
 
MotionState motion_state_ = MotionState::STATIC
 
size_t continuous_motion_frames_ = 0
 
size_t continuous_static_frames_ = 0
 
size_t pub_remain_frames_ = 0
 
bool should_check_velocity_consistency_ = true
 
std::deque< double > history_norm_variance_
 
std::deque< double > history_theta_variance_
 

静态 Public 属性

static const double kMaxHistoryTime = 2.0
 
- 静态 Public 属性 继承自 apollo::perception::lidar::TrackData
static const int kMaxHistorySize = 40
 

详细描述

在文件 mlf_track_data.h 第 47 行定义.

成员类型定义说明

◆ TimedObjects

构造及析构函数说明

◆ MlfTrackData()

EIGEN_MAKE_ALIGNED_OPERATOR_NEW apollo::perception::lidar::MlfTrackData::MlfTrackData ( )
default

◆ ~MlfTrackData()

apollo::perception::lidar::MlfTrackData::~MlfTrackData ( )
default

成员函数说明

◆ GetAndCleanCachedObjectsInTimeInterval()

void apollo::perception::lidar::MlfTrackData::GetAndCleanCachedObjectsInTimeInterval ( std::vector< TrackedObjectPtr > *  objects)

Get and clean cached objects in time interval

参数
objects

在文件 mlf_track_data.cc 第 168 行定义.

169 {
170 objects->clear();
171 auto iter = cached_objects_.begin();
172 while (iter != cached_objects_.end()) {
173 const auto& timestamp = iter->first;
174 if (timestamp <= latest_visible_time_) {
175 cached_objects_.erase(iter++);
176 } else if (timestamp <= latest_cached_time_) {
177 objects->push_back(iter->second);
178 cached_objects_.erase(iter++);
179 } else {
180 break;
181 }
182 }
183}

◆ GetLatestKObjects() [1/2]

void apollo::perception::lidar::MlfTrackData::GetLatestKObjects ( size_t  k,
std::vector< TrackedObjectConstPtr > *  objects 
) const

在文件 mlf_track_data.cc 第 219 行定义.

220 {
221 objects->clear();
222 size_t i = 0;
223 for (auto obj_it = history_objects_.rbegin();
224 obj_it != history_objects_.rend(); ++obj_it) {
225 if (i < k) {
226 objects->push_back(obj_it->second);
227 ++i;
228 } else {
229 break;
230 }
231 }
232}
std::map< double, TrackedObjectPtr > history_objects_
Definition track_data.h:134

◆ GetLatestKObjects() [2/2]

void apollo::perception::lidar::MlfTrackData::GetLatestKObjects ( size_t  k,
std::vector< TrackedObjectPtr > *  objects 
)

在文件 mlf_track_data.cc 第 204 行定义.

205 {
206 objects->clear();
207 size_t i = 0;
208 for (auto obj_it = history_objects_.rbegin();
209 obj_it != history_objects_.rend(); ++obj_it) {
210 if (i < k) {
211 objects->push_back(obj_it->second);
212 ++i;
213 } else {
214 break;
215 }
216 }
217}

◆ GetLatestSensorObject() [1/2]

std::pair< double, TrackedObjectPtr > apollo::perception::lidar::MlfTrackData::GetLatestSensorObject ( const std::string &  sensor_name)
inline

Get latest sensor object

参数
sensor_name
返回
std::pair<double, TrackedObjectPtr>

在文件 mlf_track_data.h 第 121 行定义.

122 {
123 auto iter = sensor_history_objects_.find(sensor_name);
124 if (iter != sensor_history_objects_.end()) {
125 auto& history_objects = iter->second;
126 if (history_objects.size() != 0) {
127 return *history_objects.rbegin();
128 }
129 }
130 return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
131 }
std::map< std::string, TimedObjects > sensor_history_objects_
std::shared_ptr< TrackedObject > TrackedObjectPtr

◆ GetLatestSensorObject() [2/2]

std::pair< double, TrackedObjectConstPtr > apollo::perception::lidar::MlfTrackData::GetLatestSensorObject ( const std::string &  sensor_name) const
inline

Get latest sensor object

参数
sensor_name
返回
std::pair<double, TrackedObjectConstPtr>

在文件 mlf_track_data.h 第 138 行定义.

139 {
140 auto iter = sensor_history_objects_.find(sensor_name);
141 if (iter != sensor_history_objects_.end()) {
142 auto& history_objects = iter->second;
143 if (history_objects.size() != 0) {
144 return *history_objects.rbegin();
145 }
146 }
147 return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
148 }

◆ GetObjectsInIntervalByOrder() [1/2]

void apollo::perception::lidar::MlfTrackData::GetObjectsInIntervalByOrder ( double  time,
std::vector< TrackedObjectConstPtr > *  objects 
)

在文件 mlf_track_data.cc 第 234 行定义.

235 {
236 for (auto obj_it = history_objects_.begin();
237 obj_it != history_objects_.end(); ++obj_it) {
238 if (obj_it->second->timestamp >= time) {
239 objects->push_back(obj_it->second);
240 }
241 }
242}

◆ GetObjectsInIntervalByOrder() [2/2]

void apollo::perception::lidar::MlfTrackData::GetObjectsInIntervalByOrder ( double  time,
std::vector< TrackedObjectConstPtr > *  objects 
) const

在文件 mlf_track_data.cc 第 244 行定义.

245 {
246 for (auto obj_it = history_objects_.begin();
247 obj_it != history_objects_.end(); ++obj_it) {
248 if (obj_it->second->timestamp >= time) {
249 objects->push_back(obj_it->second);
250 }
251 }
252}

◆ PredictState()

void apollo::perception::lidar::MlfTrackData::PredictState ( double  timestamp) const

Predict state

参数
timestamp

在文件 mlf_track_data.cc 第 140 行定义.

140 {
141 if (history_objects_.empty()) {
142 return;
143 }
144 auto latest_iter = history_objects_.rbegin();
145 const double latest_time = latest_iter->first;
146 const auto& latest_object = latest_iter->second;
147 double time_diff = timestamp - latest_time;
148
149 const Eigen::Vector3d& latest_anchor_point =
150 latest_object->belief_anchor_point;
151 const Eigen::Vector3d& latest_velocity = latest_object->output_velocity;
152
153 predict_.state.resize(6);
154 predict_.state(0) = static_cast<float>(latest_anchor_point(0) +
155 latest_velocity(0) * time_diff);
156 predict_.state(1) = static_cast<float>(latest_anchor_point(1) +
157 latest_velocity(1) * time_diff);
158 predict_.state(2) = static_cast<float>(latest_anchor_point(2) +
159 latest_velocity(2) * time_diff);
160 predict_.state(3) = static_cast<float>(latest_velocity(0));
161 predict_.state(4) = static_cast<float>(latest_velocity(1));
162 predict_.state(5) = static_cast<float>(latest_velocity(2));
163
165 // TODO(.): predict cloud and polygon if needed in future.
166}

◆ PushTrackedObjectToCache()

void apollo::perception::lidar::MlfTrackData::PushTrackedObjectToCache ( TrackedObjectPtr  obj)

Push tracked object to cache

参数
obj

在文件 mlf_track_data.cc 第 85 行定义.

85 {
86 double timestamp = obj->object_ptr->latest_tracked_time;
87 if (cached_objects_.find(timestamp) == cached_objects_.end()) {
88 cached_objects_.insert(std::make_pair(timestamp, obj));
90 } else {
91 AINFO << "Push object timestamp " << timestamp << " from sensor "
92 << obj->sensor_info.name << " already exist in cache, ignore push.";
93 }
94}
#define AINFO
Definition log.h:42

◆ PushTrackedObjectToTrack()

void apollo::perception::lidar::MlfTrackData::PushTrackedObjectToTrack ( TrackedObjectPtr  obj)

Push tracked object to track

参数
obj

在文件 mlf_track_data.cc 第 50 行定义.

50 {
51 // double timestamp = obj->object_ptr->latest_tracked_time;
52 double timestamp = obj->timestamp;
53 if (history_objects_.find(timestamp) == history_objects_.end()) {
54 auto pair = std::make_pair(timestamp, obj);
55 history_objects_.insert(pair);
56 sensor_history_objects_[obj->sensor_info.name].insert(pair);
57 age_++;
58 if (age_ == 1) { // the first timestamp
59 if (obj->is_fake) {
60 AERROR << "obj is fake";
61 return;
62 }
65 }
66 obj->track_id = track_id_;
67 obj->tracking_time = timestamp - first_tracked_time_;
68 duration_ = obj->tracking_time;
69 if (obj->is_fake) {
72 } else {
77 }
79 } else {
80 AINFO << "Push object timestamp " << timestamp << " from sensor "
81 << obj->sensor_info.name << " already exist in track, ignore push.";
82 }
83}
void RemoveStaleHistory(double timestamp)
Remove stale history data
#define AERROR
Definition log.h:44

◆ RemoveStaleHistory()

void apollo::perception::lidar::MlfTrackData::RemoveStaleHistory ( double  timestamp)

Remove stale history data

参数
timestamp

在文件 mlf_track_data.cc 第 197 行定义.

197 {
199 for (auto& map : sensor_history_objects_) {
200 RemoveStaleDataFromMap(timestamp, &map.second);
201 }
202}
void RemoveStaleDataFromMap(double timestamp, std::map< double, TrackedObjectPtr > *data)

◆ Reset() [1/2]

void apollo::perception::lidar::MlfTrackData::Reset ( )
overridevirtual

◆ Reset() [2/2]

void apollo::perception::lidar::MlfTrackData::Reset ( TrackedObjectPtr  obj,
int  track_id 
)

Reset all data

参数
obj
track_id

在文件 mlf_track_data.cc 第 44 行定义.

44 {
45 Reset();
46 track_id_ = track_id;
48}
void PushTrackedObjectToCache(TrackedObjectPtr obj)
Push tracked object to cache

◆ ToObject()

bool apollo::perception::lidar::MlfTrackData::ToObject ( const Eigen::Vector3d &  local_to_global_offset,
double  timestamp,
base::ObjectPtr  object,
bool  update_time = true 
) const

Convert tracked object to base object

参数
local_to_global_offset
timestamp
object
返回
true
false

在文件 mlf_track_data.cc 第 96 行定义.

97 {
98 if (history_objects_.empty()) {
99 return false;
100 }
101 auto latest_iter = history_objects_.rbegin();
102 const double latest_time = latest_iter->first;
103 const auto& latest_object = latest_iter->second;
104 latest_object->ToObject(object);
105 // predict object
106 double time_diff = timestamp - latest_time;
107 double offset_x = time_diff * object->velocity(0) + local_to_global_offset(0);
108 double offset_y = time_diff * object->velocity(1) + local_to_global_offset(1);
109 double offset_z = time_diff * object->velocity(2) + local_to_global_offset(2);
110 // a). update polygon
111 for (auto& pt : object->polygon) {
112 pt.x += offset_x;
113 pt.y += offset_y;
114 pt.z += offset_z;
115 }
116
117 // b). update center
118 object->center(0) += offset_x;
119 object->center(1) += offset_y;
120 object->center(2) += offset_z;
121 // c). update anchor point
122 object->anchor_point(0) += offset_x;
123 object->anchor_point(1) += offset_y;
124 object->anchor_point(2) += offset_z;
125 if (update_time) {
126 // d). update tracking timestamp
127 object->tracking_time += time_diff;
128 // e). update latest track timestamp
129 object->latest_tracked_time += time_diff;
130 }
131 // f). update cloud world in lidar supplement
132 for (auto& pt : object->lidar_supplement.cloud_world) {
133 pt.x += offset_x;
134 pt.y += offset_y;
135 pt.z += offset_z;
136 }
137 return true;
138}

类成员变量说明

◆ cached_objects_

TimedObjects apollo::perception::lidar::MlfTrackData::cached_objects_

在文件 mlf_track_data.h 第 164 行定义.

◆ consecutive_invisible_time_

double apollo::perception::lidar::MlfTrackData::consecutive_invisible_time_ = 0.0

在文件 mlf_track_data.h 第 170 行定义.

◆ duration_

double apollo::perception::lidar::MlfTrackData::duration_ = 0.0

在文件 mlf_track_data.h 第 169 行定义.

◆ first_tracked_time_

double apollo::perception::lidar::MlfTrackData::first_tracked_time_ = 0.0

在文件 mlf_track_data.h 第 173 行定义.

◆ is_current_state_predicted_

bool apollo::perception::lidar::MlfTrackData::is_current_state_predicted_ = true

在文件 mlf_track_data.h 第 175 行定义.

◆ is_front_critical_track_

bool apollo::perception::lidar::MlfTrackData::is_front_critical_track_ = false

在文件 mlf_track_data.h 第 176 行定义.

◆ is_reserve_blind_cone_

bool apollo::perception::lidar::MlfTrackData::is_reserve_blind_cone_ = false

在文件 mlf_track_data.h 第 177 行定义.

◆ kMaxHistoryTime

const double apollo::perception::lidar::MlfTrackData::kMaxHistoryTime = 2.0
static

在文件 mlf_track_data.h 第 179 行定义.

◆ latest_cached_time_

double apollo::perception::lidar::MlfTrackData::latest_cached_time_ = 0.0

在文件 mlf_track_data.h 第 172 行定义.

◆ latest_visible_time_

double apollo::perception::lidar::MlfTrackData::latest_visible_time_ = 0.0

在文件 mlf_track_data.h 第 171 行定义.

◆ predict_

MlfPredict apollo::perception::lidar::MlfTrackData::predict_
mutable

在文件 mlf_track_data.h 第 167 行定义.

◆ sensor_history_objects_

std::map<std::string, TimedObjects> apollo::perception::lidar::MlfTrackData::sensor_history_objects_

在文件 mlf_track_data.h 第 163 行定义.


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