Apollo  v5.5.0
Open source self driving car software
mlf_track_data.h
Go to the documentation of this file.
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 
25 
26 namespace apollo {
27 namespace perception {
28 namespace lidar {
29 
30 struct MlfPredict {
31  Eigen::VectorXf state;
34  double timestamp;
35 
36  void Reset() {
37  state.setZero();
38  polygon.clear();
39  cloud.clear();
40  timestamp = 0.0;
41  }
42 };
43 
44 class MlfTrackData : public TrackData {
45  public:
46  MlfTrackData() = default;
47  ~MlfTrackData() = default;
48 
49  void Reset() override;
50 
51  void Reset(TrackedObjectPtr obj, int track_id);
52 
53  void PushTrackedObjectToTrack(TrackedObjectPtr obj);
54 
55  void PushTrackedObjectToCache(TrackedObjectPtr obj);
56 
57  bool ToObject(const Eigen::Vector3d& local_to_global_offset, double timestamp,
58  base::ObjectPtr object) const;
59 
60  void RemoveStaleHistory(double timestamp);
61 
62  void PredictState(double timestamp) const;
63 
64  void GetAndCleanCachedObjectsInTimeInterval(
65  std::vector<TrackedObjectPtr>* objects);
66 
67  std::pair<double, TrackedObjectPtr> GetLatestSensorObject(
68  const std::string& sensor_name) {
69  auto iter = sensor_history_objects_.find(sensor_name);
70  if (iter != sensor_history_objects_.end()) {
71  auto& history_objects = iter->second;
72  if (history_objects.size() != 0) {
73  return *history_objects.rbegin();
74  }
75  }
76  return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
77  }
78 
79  std::pair<double, TrackedObjectConstPtr> GetLatestSensorObject(
80  const std::string& sensor_name) const {
81  auto iter = sensor_history_objects_.find(sensor_name);
82  if (iter != sensor_history_objects_.end()) {
83  auto& history_objects = iter->second;
84  if (history_objects.size() != 0) {
85  return *history_objects.rbegin();
86  }
87  }
88  return std::pair<double, TrackedObjectPtr>(0.0, TrackedObjectPtr(nullptr));
89  }
90 
91  public:
92  typedef std::map<double, TrackedObjectPtr> TimedObjects;
93  std::map<std::string, TimedObjects> sensor_history_objects_;
94  TimedObjects cached_objects_;
95 
96  // buffer for predict data
98 
99  double duration_ = 0.0;
100  double consecutive_invisible_time_ = 0.0;
101  double latest_visible_time_ = 0.0;
102  double latest_cached_time_ = 0.0;
103  double first_tracked_time_ = 0.0;
104 
105  bool is_current_state_predicted_ = true;
106 
107  static const double kMaxHistoryTime;
108 };
109 
110 typedef std::shared_ptr<MlfTrackData> MlfTrackDataPtr;
111 typedef std::shared_ptr<const MlfTrackData> MlfTrackDataConstPtr;
112 
113 } // namespace lidar
114 } // namespace perception
115 } // namespace apollo
static const double kMaxHistoryTime
Definition: mlf_track_data.h:107
TimedObjects cached_objects_
Definition: mlf_track_data.h:94
std::pair< double, TrackedObjectConstPtr > GetLatestSensorObject(const std::string &sensor_name) const
Definition: mlf_track_data.h:79
Definition: blob.h:72
std::map< double, TrackedObjectPtr > TimedObjects
Definition: mlf_track_data.h:92
void Reset()
Definition: mlf_track_data.h:36
void clear() override
Definition: point_cloud.h:350
virtual void clear()
Definition: point_cloud.h:107
MlfPredict predict_
Definition: mlf_track_data.h:97
Definition: mlf_track_data.h:30
Definition: point_cloud.h:33
Definition: mlf_track_data.h:44
base::PointDCloud cloud
Definition: mlf_track_data.h:33
std::pair< double, TrackedObjectPtr > GetLatestSensorObject(const std::string &sensor_name)
Definition: mlf_track_data.h:67
std::shared_ptr< const MlfTrackData > MlfTrackDataConstPtr
Definition: mlf_track_data.h:111
std::shared_ptr< MlfTrackData > MlfTrackDataPtr
Definition: mlf_track_data.h:110
Eigen::VectorXf state
Definition: mlf_track_data.h:31
std::map< std::string, TimedObjects > sensor_history_objects_
Definition: mlf_track_data.h:93
base::PolygonDType polygon
Definition: mlf_track_data.h:32
Definition: track_data.h:35
std::shared_ptr< TrackedObject > TrackedObjectPtr
Definition: tracked_object.h:152
double timestamp
Definition: mlf_track_data.h:34
std::shared_ptr< Object > ObjectPtr
Definition: object.h:118