Apollo 11.0
自动驾驶开放平台
mlf_track_data.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2018 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16#pragma once
17
18#include <map>
19#include <memory>
20#include <string>
21#include <utility>
22#include <vector>
23
26
27namespace apollo {
28namespace perception {
29namespace lidar {
30
31struct MlfPredict {
32 Eigen::VectorXf state;
35 double timestamp;
40 void Reset() {
41 state.setZero();
42 polygon.clear();
43 cloud.clear();
44 timestamp = 0.0;
45 }
46};
47
48class MlfTrackData : public TrackData {
49 public:
50 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
51
52 MlfTrackData() = default;
53 ~MlfTrackData() = default;
54
59 void Reset() override;
66 void Reset(TrackedObjectPtr obj, int track_id);
67
74
81
91 bool ToObject(const Eigen::Vector3d& local_to_global_offset, double timestamp,
92 base::ObjectPtr object, bool update_time = true) const;
93
99 void RemoveStaleHistory(double timestamp);
100
106 void PredictState(double timestamp) const;
107
114 std::vector<TrackedObjectPtr>* objects);
115
122 std::pair<double, TrackedObjectPtr> GetLatestSensorObject(
123 const std::string& sensor_name) {
124 auto iter = sensor_history_objects_.find(sensor_name);
125 if (iter != sensor_history_objects_.end()) {
126 auto& history_objects = iter->second;
127 if (history_objects.size() != 0) {
128 return *history_objects.rbegin();
129 }
130 }
131 return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
132 }
139 std::pair<double, TrackedObjectConstPtr> GetLatestSensorObject(
140 const std::string& sensor_name) const {
141 auto iter = sensor_history_objects_.find(sensor_name);
142 if (iter != sensor_history_objects_.end()) {
143 auto& history_objects = iter->second;
144 if (history_objects.size() != 0) {
145 return *history_objects.rbegin();
146 }
147 }
148 return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
149 }
150
151 void GetLatestKObjects(size_t k, std::vector<TrackedObjectPtr>* objects);
152
153 void GetLatestKObjects(size_t k,
154 std::vector<TrackedObjectConstPtr>* objects) const;
155
156 void GetObjectsInInterval(double time,
157 std::vector<TrackedObjectPtr>* objects);
158
159 void GetObjectsInInterval(double time,
160 std::vector<TrackedObjectConstPtr>* objects) const;
161
162 void GetObjectsInIntervalByOrder(double time,
163 std::vector<TrackedObjectConstPtr>* objects);
164
165 void GetObjectsInIntervalByOrder(double time,
166 std::vector<TrackedObjectConstPtr>* objects) const;
167
169
170 bool IsForegroundTrack() const;
171
173
174 public:
175 typedef std::map<double, TrackedObjectPtr> TimedObjects;
176 std::map<std::string, TimedObjects> sensor_history_objects_;
178
179 // buffer for predict data
181
182 double duration_ = 0.0;
187
191
193
194 static const double kMaxHistoryTime;
195};
196
197typedef std::shared_ptr<MlfTrackData> MlfTrackDataPtr;
198typedef std::shared_ptr<const MlfTrackData> MlfTrackDataConstPtr;
199
200} // namespace lidar
201} // namespace perception
202} // namespace apollo
bool IsBackgroundMovable(TrackedObjectPtr obj)
void GetObjectsInIntervalByOrder(double time, std::vector< TrackedObjectConstPtr > *objects)
void PushTrackedObjectToTrack(TrackedObjectPtr obj)
Push tracked object to track
void RemoveStaleHistory(double timestamp)
Remove stale history data
void GetLatestKObjects(size_t k, std::vector< TrackedObjectPtr > *objects)
void GetObjectsInInterval(double time, std::vector< TrackedObjectPtr > *objects)
std::pair< double, TrackedObjectPtr > GetLatestSensorObject(const std::string &sensor_name)
Get latest sensor object
void UpdateTrackableState(TrackedObjectPtr obj)
void PredictState(double timestamp) const
Predict state
std::map< std::string, TimedObjects > sensor_history_objects_
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 PushTrackedObjectToCache(TrackedObjectPtr obj)
Push tracked object to cache
EIGEN_MAKE_ALIGNED_OPERATOR_NEW MlfTrackData()=default
void GetAndCleanCachedObjectsInTimeInterval(std::vector< TrackedObjectPtr > *objects)
Get and clean cached objects in time interval
std::pair< double, TrackedObjectConstPtr > GetLatestSensorObject(const std::string &sensor_name) const
Get latest sensor object
std::map< double, TrackedObjectPtr > TimedObjects
std::shared_ptr< Object > ObjectPtr
Definition object.h:127
std::shared_ptr< const MlfTrackData > MlfTrackDataConstPtr
std::shared_ptr< MlfTrackData > MlfTrackDataPtr
std::shared_ptr< TrackedObject > TrackedObjectPtr
class register implement
Definition arena_queue.h:37