52 double timestamp = obj->timestamp;
54 auto pair = std::make_pair(timestamp, obj);
80 AINFO <<
"Push object timestamp " << timestamp <<
" from sensor "
81 << obj->sensor_info.name <<
" already exist in track, ignore push.";
86 double timestamp = obj->object_ptr->latest_tracked_time;
91 AINFO <<
"Push object timestamp " << timestamp <<
" from sensor "
92 << obj->sensor_info.name <<
" already exist in cache, ignore push.";
102 const double latest_time = latest_iter->first;
103 const auto& latest_object = latest_iter->second;
104 latest_object->ToObject(
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);
111 for (
auto& pt :
object->polygon) {
118 object->center(0) += offset_x;
119 object->center(1) += offset_y;
120 object->center(2) += offset_z;
122 object->anchor_point(0) += offset_x;
123 object->anchor_point(1) += offset_y;
124 object->anchor_point(2) += offset_z;
127 object->tracking_time += time_diff;
129 object->latest_tracked_time += time_diff;
132 for (
auto& pt :
object->lidar_supplement.cloud_world) {
145 const double latest_time = latest_iter->first;
146 const auto& latest_object = latest_iter->second;
147 double time_diff = timestamp - latest_time;
149 const Eigen::Vector3d& latest_anchor_point =
150 latest_object->belief_anchor_point;
151 const Eigen::Vector3d& latest_velocity = latest_object->output_velocity;
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);
169 std::vector<TrackedObjectPtr>* objects) {
173 const auto& timestamp = iter->first;
177 objects->push_back(iter->second);
186 std::map<double, TrackedObjectPtr>* data) {
187 auto iter = data->begin();
188 while (iter != data->end()) {
189 if (iter->first < timestamp) {
205 std::vector<TrackedObjectPtr>* objects) {
211 objects->push_back(obj_it->second);
220 std::vector<TrackedObjectConstPtr>* objects)
const {
226 objects->push_back(obj_it->second);
235 std::vector<TrackedObjectConstPtr>* objects) {
238 if (obj_it->second->timestamp >= time) {
239 objects->push_back(obj_it->second);
245 std::vector<TrackedObjectConstPtr>* objects)
const {
248 if (obj_it->second->timestamp >= time) {
249 objects->push_back(obj_it->second);
void GetObjectsInIntervalByOrder(double time, std::vector< TrackedObjectConstPtr > *objects)
double latest_visible_time_
static const double kMaxHistoryTime
double consecutive_invisible_time_
TimedObjects cached_objects_
void PushTrackedObjectToTrack(TrackedObjectPtr obj)
Push tracked object to track
void RemoveStaleHistory(double timestamp)
Remove stale history data
bool is_reserve_blind_cone_
void GetLatestKObjects(size_t k, std::vector< TrackedObjectPtr > *objects)
bool is_front_critical_track_
bool is_current_state_predicted_
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
void Reset() override
Reset
double first_tracked_time_
void GetAndCleanCachedObjectsInTimeInterval(std::vector< TrackedObjectPtr > *objects)
Get and clean cached objects in time interval
double latest_cached_time_
int consecutive_invisible_count_
std::map< double, TrackedObjectPtr > history_objects_
virtual void Reset()
Reset
std::shared_ptr< Object > ObjectPtr
void RemoveStaleDataFromMap(double timestamp, std::map< double, TrackedObjectPtr > *data)
std::shared_ptr< TrackedObject > TrackedObjectPtr
void Reset()
Reset all data