24size_t Track::s_track_idx_ = 1;
25double Track::s_max_lidar_invisible_period_ = 0.25;
26double Track::s_max_radar_invisible_period_ = 0.50;
27double Track::s_max_camera_invisible_period_ = 0.75;
35 std::shared_ptr<base::Object> fused_base_obj =
fused_object_->GetBaseObject();
36 std::shared_ptr<const base::Object> sensor_base_obj = obj->GetBaseObject();
37 *fused_base_obj = *sensor_base_obj;
38 fused_base_obj->track_id = track_id;
56 const std::string& sensor_id)
const {
59 return lidar_it->second;
64 return radar_it->second;
69 return camera_it->second;
90 for (
auto it = objects.begin(); it != objects.end(); ++it) {
91 if (obj ==
nullptr || obj->GetTimestamp() < it->second->GetTimestamp()) {
99 int ret_track_id =
static_cast<int>(s_track_idx_);
100 if (s_track_idx_ == std::numeric_limits<unsigned int>::max()) {
110 std::string sensor_id = obj->GetSensorId();
111 auto it = objects->find(sensor_id);
112 if (it == objects->end()) {
113 (*objects)[sensor_id] = obj;
120 std::string sensor_id = obj->GetSensorId();
132 double time_diff = obj->GetTimestamp() -
fused_object_->GetTimestamp();
137 s_max_lidar_invisible_period_);
140 s_max_radar_invisible_period_);
143 s_max_camera_invisible_period_);
149 fused_object_->GetBaseObject()->latest_tracked_time = obj->GetTimestamp();
156 double measurement_timestamp) {
158 measurement_timestamp,
159 s_max_lidar_invisible_period_);
161 measurement_timestamp,
162 s_max_radar_invisible_period_);
164 measurement_timestamp,
165 s_max_camera_invisible_period_);
173 const std::string& sensor_id,
174 double measurement_timestamp,
175 double max_invisible_period) {
176 for (
auto it = objects->begin(); it != objects->end();) {
177 double period = measurement_timestamp - it->second->GetTimestamp();
178 if (it->first == sensor_id) {
179 it->second->SetInvisiblePeriod(period);
180 }
else if (it->second->GetInvisiblePeriod() > 0.0) {
181 it->second->SetInvisiblePeriod(period);
184 if (period > max_invisible_period) {
185 it->second =
nullptr;
186 it = objects->erase(it);
194 const std::string& sensor_id,
195 double measurement_timestamp,
196 double max_invisible_period) {
197 for (
auto it = objects->begin(); it != objects->end();) {
198 if (it->first != sensor_id) {
199 double period = measurement_timestamp - it->second->GetTimestamp();
200 if (period > max_invisible_period) {
201 it->second =
nullptr;
202 it = objects->erase(it);
213 std::shared_ptr<base::Object> dst_obj =
fused_object_->GetBaseObject();
214 if (src_object !=
nullptr) {
215 std::shared_ptr<const base::Object> src_obj = src_object->GetBaseObject();
217 dst_obj->lidar_supplement = src_obj->lidar_supplement;
218 }
else if (
IsRadar(src_object)) {
219 dst_obj->radar_supplement = src_obj->radar_supplement;
221 dst_obj->camera_supplement = src_obj->camera_supplement;
226 dst_obj->lidar_supplement.Reset();
229 dst_obj->radar_supplement.Reset();
232 dst_obj->camera_supplement.Reset();
237 std::shared_ptr<base::Object> dst_obj =
fused_object_->GetBaseObject();
238 std::shared_ptr<const base::Object> src_obj = src_object->GetBaseObject();
240 dst_obj->confidence = src_obj->confidence;
241 dst_obj->velocity_converged = src_obj->velocity_converged;
242 }
else if (
IsRadar(src_object)) {
245 dst_obj->confidence = src_obj->confidence;
251 return (sensor_obj !=
nullptr && sensor_obj->GetInvisiblePeriod() < 1.0e-6);
256 if (it->second->GetInvisiblePeriod() < 1.0e-6) {
265 if (it->second->GetInvisiblePeriod() < 1.0e-6) {
274 if (it->second->GetInvisiblePeriod() < 1.0e-6) {
282 std::shared_ptr<base::Object> fused_base_object =
284 std::shared_ptr<const base::Object> measurement_base_object =
285 obj->GetBaseObject();
286 int track_id = fused_base_object->track_id;
287 *fused_base_object = *measurement_base_object;
288 fused_base_object->track_id = track_id;
292 const std::string& sensor_id,
double measurement_timestamp) {}
295 std::ostringstream oss;
296 oss <<
"fusion_track[id: " << this->
GetTrackId() <<
", fused_object("
299 oss <<
"lidar_measurments[number: " <<
lidar_objects_.size() <<
",";
301 oss <<
"(sensor_id: " << it->first
302 <<
", invisible_t: " << it->second->GetInvisiblePeriod()
303 <<
", info: " << it->second->GetBaseObject()->ToString() <<
")\n";
307 oss <<
"radar_measurments[number: " <<
radar_objects_.size() <<
",";
309 oss <<
"(sensor_id: " << it->first
310 <<
", invisible_t: " << it->second->GetInvisiblePeriod()
311 <<
", info: " << it->second->GetBaseObject()->ToString() <<
")\n";
317 oss <<
"(sensor_id: " << it->first
318 <<
", invisible_t: " << it->second->GetInvisiblePeriod()
319 <<
", info: " << it->second->GetBaseObject()->ToString() <<
")\n";
bool IsCameraVisible() const
Is camera visible
static size_t GenerateNewTrackId()
Generate new track id
void UpdateUnfusedState(const SensorObjectPtr &src_object)
update no fusion state
FusedObjectPtr fused_object_
void UpdateWithSensorObjectForBackground(const SensorObjectPtr &obj)
int GetTrackId() const
Get the track id
bool IsVisible(const std::string &sensor_id) const
Is visible
SensorObjectConstPtr GetSensorObject(const std::string &sensor_id) const
Get the sensor object object
void UpdateSensorObjectWithoutMeasurement(SensorId2ObjectMap *objects, const std::string &sensor_id, double measurement_timestamp, double max_invisible_period)
std::string DebugString() const
Debug information
bool IsRadarVisible() const
Is radar visible
SensorId2ObjectMap radar_objects_
bool Initialize(SensorObjectPtr obj, bool is_background=false)
Initialize
SensorObjectConstPtr GetLatestRadarObject() const
Get the latest radar object object
void UpdateSupplementState(const SensorObjectPtr &src_object=nullptr)
Update supplement state
void UpdateSensorObject(SensorId2ObjectMap *objects, const SensorObjectPtr &obj)
SensorObjectConstPtr GetLatestSensorObject(const SensorId2ObjectMap &objects) const
Get the Latest Sensor Object object
void UpdateSensorObjectWithMeasurement(SensorId2ObjectMap *objects, const std::string &sensor_id, double measurement_timestamp, double max_invisible_period)
bool IsLidarVisible() const
Is lidar visible
void UpdateWithSensorObject(const SensorObjectPtr &obj)
Update by SensorObject
SensorId2ObjectMap lidar_objects_
void UpdateWithoutSensorObject(const std::string &sensor_id, double measurement_timestamp)
Update without SensorObject
SensorObjectConstPtr GetLatestCameraObject() const
Get the latest camera object object
SensorObjectConstPtr GetLatestLidarObject() const
Get the latest lidar object object
void UpdateWithoutSensorObjectForBackground(const std::string &sensor_id, double measurement_timestamp)
SensorId2ObjectMap camera_objects_
std::shared_ptr< const SensorObject > SensorObjectConstPtr
std::shared_ptr< SensorObject > SensorObjectPtr
bool IsCamera(const SensorObjectConstPtr &obj)
bool IsLidar(const SensorObjectConstPtr &obj)
bool IsRadar(const SensorObjectConstPtr &obj)
std::map< std::string, SensorObjectPtr > SensorId2ObjectMap