41 std::vector<TrackObjectPair> *assignments,
42 std::vector<size_t> *unassigned_tracks,
43 std::vector<size_t> *unassigned_objects) {
44 size_t num_track = radar_tracks.size();
45 const auto &objects = radar_frame.
objects;
46 double object_timestamp = radar_frame.
timestamp;
47 size_t num_obj = objects.size();
48 if (num_track == 0 || num_obj == 0) {
49 unassigned_tracks->resize(num_track);
50 unassigned_objects->resize(num_obj);
51 std::iota(unassigned_tracks->begin(), unassigned_tracks->end(), 0);
52 std::iota(unassigned_objects->begin(), unassigned_objects->end(), 0);
55 std::vector<bool> track_used(num_track,
false);
56 std::vector<bool> object_used(num_obj,
false);
57 for (
size_t i = 0; i < num_track; ++i) {
58 const auto &track_object = radar_tracks[i]->GetObsRadar();
59 double track_timestamp = radar_tracks[i]->GetTimestamp();
60 if (track_object.get() ==
nullptr) {
61 AERROR <<
"track_object is not available";
64 int track_object_track_id = track_object->track_id;
65 for (
size_t j = 0; j < num_obj; ++j) {
66 int object_track_id = objects[j]->track_id;
67 if (track_object_track_id == object_track_id &&
70 assignments->push_back(std::pair<size_t, size_t>(i, j));
72 object_used[j] =
true;
76 for (
size_t i = 0; i < track_used.size(); ++i) {
78 unassigned_tracks->push_back(i);
81 for (
size_t i = 0; i < object_used.size(); ++i) {
82 if (!object_used[i]) {
83 unassigned_objects->push_back(i);
virtual void IDMatch(const std::vector< RadarTrackPtr > &radar_tracks, const base::Frame &radar_frame, std::vector< TrackObjectPair > *assignments, std::vector< size_t > *unassigned_tracks, std::vector< size_t > *unassigned_objects)
Target association by id.
virtual bool RefinedTrack(const base::ObjectPtr &track_object, double track_timestamp, const base::ObjectPtr &radar_object, double radar_timestamp)
After the IDMatch, then track targets based on their features.