18#include "modules/perception/radar_detection/proto/tracker_config.pb.h"
28double ContiArsTracker::s_tracking_time_win_ = 0.06;
31 :
BaseTracker(), matcher_(nullptr), track_manager_(nullptr) {
32 name_ =
"ContiArsTracker";
36 if (track_manager_ !=
nullptr) {
37 delete track_manager_;
42 std::string config_file =
62 matcher_init_options.
config_path = matcher_param.config_path();
63 matcher_init_options.
config_file = matcher_param.config_file();
65 BaseMatcherRegisterer::GetInstanceByName(matcher_param.name());
66 CHECK_NOTNULL(matcher);
67 matcher_.reset(matcher);
68 ACHECK(matcher_->Init(matcher_init_options))
69 <<
"Failed to init radar preprocessor.";
72 ACHECK(track_manager_ !=
nullptr)
73 <<
"Failed to get RadarTrackManager instance.";
80 TrackObjects(detected_frame);
81 CollectTrackedFrame(tracked_frame);
85void ContiArsTracker::TrackObjects(
const base::Frame &radar_frame) {
86 std::vector<TrackObjectPair> assignments;
87 std::vector<size_t> unassigned_tracks;
88 std::vector<size_t> unassigned_objects;
90 const auto &radar_tracks = track_manager_->
GetTracks();
91 matcher_->Match(radar_tracks, radar_frame, matcher_options, &assignments,
92 &unassigned_tracks, &unassigned_objects);
93 UpdateAssignedTracks(radar_frame, assignments);
94 UpdateUnassignedTracks(radar_frame, unassigned_tracks);
96 CreateNewTracks(radar_frame, unassigned_objects);
99void ContiArsTracker::UpdateAssignedTracks(
100 const base::Frame &radar_frame, std::vector<TrackObjectPair> assignments) {
102 for (
size_t i = 0; i < assignments.size(); ++i) {
103 radar_tracks[assignments[i].first]->UpdataObsRadar(
108void ContiArsTracker::UpdateUnassignedTracks(
109 const base::Frame &radar_frame,
110 const std::vector<size_t> &unassigned_tracks) {
111 double timestamp = radar_frame.timestamp;
113 for (
size_t i = 0; i < unassigned_tracks.size(); ++i) {
114 if (radar_tracks[unassigned_tracks[i]]->GetObs() !=
nullptr) {
115 double radar_time = radar_tracks[unassigned_tracks[i]]->GetTimestamp();
116 double time_diff = fabs(timestamp - radar_time);
117 if (time_diff > s_tracking_time_win_) {
118 radar_tracks[unassigned_tracks[i]]->SetDead();
121 radar_tracks[unassigned_tracks[i]]->SetDead();
126void ContiArsTracker::DeleteLostTracks() { track_manager_->
RemoveLostTracks(); }
128void ContiArsTracker::CreateNewTracks(
129 const base::Frame &radar_frame,
130 const std::vector<size_t> &unassigned_objects) {
131 for (
size_t i = 0; i < unassigned_objects.size(); ++i) {
133 radar_track.reset(
new RadarTrack(radar_frame.objects[unassigned_objects[i]],
134 radar_frame.timestamp));
135 track_manager_->
AddTrack(radar_track);
139void ContiArsTracker::CollectTrackedFrame(
base::FramePtr tracked_frame) {
140 if (tracked_frame ==
nullptr) {
141 AERROR <<
"tracked_frame is nullptr";
144 auto &objects = tracked_frame->objects;
145 const auto &radar_tracks = track_manager_->
GetTracks();
146 for (
size_t i = 0; i < radar_tracks.size(); ++i) {
147 if (radar_tracks[i]->ConfirmTrack()) {
150 *
object = *track_object;
151 object->tracking_time = radar_tracks[i]->GetTrackingTime();
152 object->track_id = radar_tracks[i]->GetObsId();
153 object->latest_tracked_time = radar_tracks[i]->GetTimestamp();
154 objects.push_back(
object);
virtual ~ContiArsTracker()
bool Init(const TrackerInitOptions &options) override
Init ContiArsTracker config
bool Track(const base::Frame &detected_frame, const TrackerOptions &options, base::FramePtr tracked_frame) override
Tracking objects.
std::vector< RadarTrackPtr > & mutable_tracks()
Get tracked targets, which can modify data.
int RemoveLostTracks()
Remove already lost targets.
const std::vector< RadarTrackPtr > & GetTracks() const
Get the Tracks object
void AddTrack(const RadarTrackPtr &track)
Add radar tracked object.
static void SetChosenFilter(const std::string &chosen_filter)
Set the Chosen Filter object
static void SetUseFilter(bool use_filter)
Set the Use Filter object
static void SetTrackedTimesThreshold(const int &threshold)
Set the Tracked Times Threshold object
bool GetProtoFromFile(const std::string &file_name, google::protobuf::Message *message)
Parses the content of the file specified by the file_name as a representation of protobufs,...
std::shared_ptr< Object > ObjectPtr
std::shared_ptr< Frame > FramePtr
std::shared_ptr< RadarTrack > RadarTrackPtr
std::string GetConfigFile(const std::string &config_path, const std::string &config_file)
#define PERCEPTION_REGISTER_TRACKER(name)
std::vector< std::shared_ptr< Object > > objects
optional string chosen_filter
optional double tracked_times_threshold
optional double tracking_time_window
optional perception::PluginParam matcher_param