Apollo  6.0
Open source self driving car software
track.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 
17 #pragma once
18 
19 #include <map>
20 #include <memory>
21 #include <string>
22 
23 #include "gtest/gtest_prod.h"
24 
26 
27 namespace apollo {
28 namespace perception {
29 namespace fusion {
30 
31 typedef std::map<std::string, SensorObjectPtr> SensorId2ObjectMap;
32 
33 class Track {
34  public:
35  Track();
36  virtual ~Track() = default;
37 
38  Track(const Track&) = delete;
39  Track& operator=(const Track&) = delete;
40 
41  // static members initialization
42  inline static void SetMaxLidarInvisiblePeriod(double period) {
43  s_max_lidar_invisible_period_ = period;
44  }
45  inline static void SetMaxRadarInvisiblePeriod(double period) {
46  s_max_radar_invisible_period_ = period;
47  }
48  inline static void SetMaxCameraInvisiblePeriod(double period) {
49  s_max_camera_invisible_period_ = period;
50  }
51 
52  bool Initialize(SensorObjectPtr obj, bool is_background = false);
53 
54  void Reset();
55 
56  SensorObjectConstPtr GetSensorObject(const std::string& sensor_id) const;
60 
62  inline SensorId2ObjectMap& GetLidarObjects() { return lidar_objects_; }
63 
64  inline const SensorId2ObjectMap& GetLidarObjects() const {
65  return lidar_objects_;
66  }
67 
68  inline SensorId2ObjectMap& GetRadarObjects() { return radar_objects_; }
69 
70  inline const SensorId2ObjectMap& GetRadarObjects() const {
71  return radar_objects_;
72  }
73 
74  inline SensorId2ObjectMap& GetCameraObjects() { return camera_objects_; }
75 
76  inline const SensorId2ObjectMap& GetCameraObjects() const {
77  return camera_objects_;
78  }
79 
80  inline int GetTrackId() const {
81  return fused_object_->GetBaseObject()->track_id;
82  }
83 
84  inline double GetTrackingPeriod() const { return tracking_period_; }
85 
86  inline size_t GetTrackedTimes() const { return tracked_times_; }
87 
88  inline void AddTrackedTimes() { ++tracked_times_; }
89 
90  inline double GetExistenceProb() const { return existence_prob_; }
91 
92  inline void SetExistenceProb(double prob) { existence_prob_ = prob; }
93 
94  inline double GetToicProb() const { return toic_prob_; }
95 
96  inline void SetToicProb(double prob) { toic_prob_ = prob; }
97  inline bool IsBackground() const { return is_background_; }
98 
99  inline bool IsAlive() const { return is_alive_; }
100 
101  bool IsVisible(const std::string& sensor_id) const;
102  bool IsLidarVisible() const;
103  bool IsRadarVisible() const;
104  bool IsCameraVisible() const;
105 
106  static size_t GenerateNewTrackId();
107 
108  void UpdateWithSensorObject(const SensorObjectPtr& obj);
109 
110  void UpdateWithoutSensorObject(const std::string& sensor_id,
111  double measurement_timestamp);
112 
113  std::string DebugString() const;
114 
115  protected:
116  // update state
117  void UpdateSupplementState(const SensorObjectPtr& src_object = nullptr);
118  void UpdateUnfusedState(const SensorObjectPtr& src_object);
119 
121  const SensorId2ObjectMap& objects) const;
122  void UpdateSensorObject(SensorId2ObjectMap* objects,
123  const SensorObjectPtr& obj);
124  void UpdateSensorObjectWithoutMeasurement(SensorId2ObjectMap* objects,
125  const std::string& sensor_id,
126  double measurement_timestamp,
127  double max_invisible_period);
128  void UpdateSensorObjectWithMeasurement(SensorId2ObjectMap* objects,
129  const std::string& sensor_id,
130  double measurement_timestamp,
131  double max_invisible_period);
133  void UpdateWithoutSensorObjectForBackground(const std::string& sensor_id,
134  double measurement_timestamp);
135 
136  protected:
137  SensorId2ObjectMap lidar_objects_;
138  SensorId2ObjectMap radar_objects_;
139  SensorId2ObjectMap camera_objects_;
140 
142  double tracking_period_ = 0.0;
143  double existence_prob_ = 0.0;
144  double toic_prob_ = 0.0;
145 
146  bool is_background_ = false;
147  bool is_alive_ = true;
148 
149  size_t tracked_times_ = 0;
150 
151  private:
152  FRIEND_TEST(TrackTest, test);
153 
154  static size_t s_track_idx_;
155  static double s_max_lidar_invisible_period_;
156  static double s_max_radar_invisible_period_;
157  static double s_max_camera_invisible_period_;
158 };
159 
160 typedef std::shared_ptr<Track> TrackPtr;
161 typedef std::shared_ptr<const Track> TrackConstPtr;
162 
163 } // namespace fusion
164 } // namespace perception
165 } // namespace apollo
std::shared_ptr< const Track > TrackConstPtr
Definition: track.h:161
const SensorId2ObjectMap & GetCameraObjects() const
Definition: track.h:76
bool is_alive_
Definition: track.h:147
const SensorId2ObjectMap & GetRadarObjects() const
Definition: track.h:70
bool Initialize(SensorObjectPtr obj, bool is_background=false)
static void SetMaxRadarInvisiblePeriod(double period)
Definition: track.h:45
int GetTrackId() const
Definition: track.h:80
SensorId2ObjectMap & GetLidarObjects()
Definition: track.h:62
double GetExistenceProb() const
Definition: track.h:90
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
bool is_background_
Definition: track.h:146
void SetExistenceProb(double prob)
Definition: track.h:92
double GetTrackingPeriod() const
Definition: track.h:84
bool IsVisible(const std::string &sensor_id) const
Track & operator=(const Track &)=delete
SensorObjectConstPtr GetSensorObject(const std::string &sensor_id) const
SensorId2ObjectMap & GetRadarObjects()
Definition: track.h:68
void UpdateWithoutSensorObjectForBackground(const std::string &sensor_id, double measurement_timestamp)
void UpdateWithSensorObjectForBackground(const SensorObjectPtr &obj)
std::shared_ptr< SensorObject > SensorObjectPtr
Definition: sensor_object.h:68
SensorObjectConstPtr GetLatestCameraObject() const
void UpdateSensorObjectWithMeasurement(SensorId2ObjectMap *objects, const std::string &sensor_id, double measurement_timestamp, double max_invisible_period)
SensorId2ObjectMap & GetCameraObjects()
Definition: track.h:74
static void SetMaxLidarInvisiblePeriod(double period)
Definition: track.h:42
void AddTrackedTimes()
Definition: track.h:88
SensorObjectConstPtr GetLatestLidarObject() const
double existence_prob_
Definition: track.h:143
double GetToicProb() const
Definition: track.h:94
SensorId2ObjectMap radar_objects_
Definition: track.h:138
bool IsAlive() const
Definition: track.h:99
std::shared_ptr< Track > TrackPtr
Definition: track.h:160
void SetToicProb(double prob)
Definition: track.h:96
std::shared_ptr< FusedObject > FusedObjectPtr
Definition: sensor_object.h:84
double toic_prob_
Definition: track.h:144
void UpdateSensorObjectWithoutMeasurement(SensorId2ObjectMap *objects, const std::string &sensor_id, double measurement_timestamp, double max_invisible_period)
void UpdateWithoutSensorObject(const std::string &sensor_id, double measurement_timestamp)
FusedObjectPtr GetFusedObject()
Definition: track.h:61
SensorObjectConstPtr GetLatestSensorObject(const SensorId2ObjectMap &objects) const
double tracking_period_
Definition: track.h:142
SensorId2ObjectMap camera_objects_
Definition: track.h:139
FusedObjectPtr fused_object_
Definition: track.h:141
void UpdateSensorObject(SensorId2ObjectMap *objects, const SensorObjectPtr &obj)
bool IsBackground() const
Definition: track.h:97
size_t tracked_times_
Definition: track.h:149
SensorId2ObjectMap lidar_objects_
Definition: track.h:137
std::string DebugString() const
Definition: track.h:33
size_t GetTrackedTimes() const
Definition: track.h:86
void UpdateSupplementState(const SensorObjectPtr &src_object=nullptr)
const SensorId2ObjectMap & GetLidarObjects() const
Definition: track.h:64
void UpdateWithSensorObject(const SensorObjectPtr &obj)
static void SetMaxCameraInvisiblePeriod(double period)
Definition: track.h:48
SensorObjectConstPtr GetLatestRadarObject() const
std::shared_ptr< const SensorObject > SensorObjectConstPtr
Definition: sensor_object.h:69
void UpdateUnfusedState(const SensorObjectPtr &src_object)
std::map< std::string, SensorObjectPtr > SensorId2ObjectMap
Definition: track.h:31