31 std::string sensor_name = new_object->sensor_info.name;
33 track_data->GetLatestSensorObject(sensor_name).second;
34 if (latest_object ==
nullptr) {
35 latest_object = track_data->GetLatestObject().second;
37 if (latest_object.get() ==
nullptr) {
38 AERROR <<
"latest_object is not available";
42 double latest_time = latest_object->object_ptr->latest_tracked_time;
43 double current_time = new_object->object_ptr->latest_tracked_time;
44 double time_diff = current_time - latest_time;
45 if (fabs(time_diff) < EPSILON_TIME) {
46 time_diff = DEFAULT_FPS;
59 int64_t corner_index = 0;
60 float corner_velocity_gain = 0.0f;
61 std::vector<float> corner_velocity_gain_norms(4);
62 for (
int i = 0; i < 4; ++i) {
63 corner_velocity_gain_norms[i] =
64 static_cast<float>((new_object->measured_corners_velocity[i] -
65 latest_object->belief_velocity)
68 std::vector<float>::iterator corener_min_gain =
69 std::min_element(std::begin(corner_velocity_gain_norms),
70 std::end(corner_velocity_gain_norms));
71 corner_velocity_gain = *corener_min_gain;
72 corner_index = corener_min_gain - corner_velocity_gain_norms.begin();
74 std::vector<float> velocity_gain_norms(3);
75 velocity_gain_norms[0] = corner_velocity_gain;
76 velocity_gain_norms[1] =
77 static_cast<float>((new_object->measured_barycenter_velocity -
78 latest_object->belief_velocity)
80 velocity_gain_norms[2] =
static_cast<float>(
81 (new_object->measured_center_velocity - latest_object->belief_velocity)
83 std::vector<float>::iterator min_gain = std::min_element(
84 std::begin(velocity_gain_norms), std::end(velocity_gain_norms));
85 int64_t min_gain_pos = min_gain - velocity_gain_norms.begin();
86 if (min_gain_pos == 0) {
87 new_object->selected_measured_velocity =
88 new_object->measured_corners_velocity[corner_index];
90 if (min_gain_pos == 1) {
91 new_object->selected_measured_velocity =
92 new_object->measured_barycenter_velocity;
94 if (min_gain_pos == 2) {
95 new_object->selected_measured_velocity =
96 new_object->measured_center_velocity;
103 int pre_num =
static_cast<int>(
104 latest_object->object_ptr->radar4d_supplement.cloud_world.size());
105 int cur_num =
static_cast<int>(
106 new_object->object_ptr->radar4d_supplement.cloud_world.size());
107 double quality_based_on_point_diff_ratio =
108 (latest_object->sensor_info.name == new_object->sensor_info.name)
109 ? (1.0 - fabs(pre_num - cur_num) / std::max(pre_num, cur_num))
112 double quality_based_on_association_score =
113 pow(1.0 - new_object->association_score, 2.0);
114 new_object->update_quality = std::min(quality_based_on_association_score,
115 quality_based_on_point_diff_ratio);