|
@@ -99,6 +99,9 @@ void DetectManager::run() {
|
|
LOG(INFO) << "detect thread running in " << std::this_thread::get_id();
|
|
LOG(INFO) << "detect thread running in " << std::this_thread::get_id();
|
|
|
|
|
|
DetectResult m_detect_result_record;
|
|
DetectResult m_detect_result_record;
|
|
|
|
+ stableValue detect_result_theta_memery_box;
|
|
|
|
+ stableValue detect_result_width_memery_box;
|
|
|
|
+ stableValue detect_result_wheel_base_memery_box;
|
|
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> vct_wheel_cloud;
|
|
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> vct_wheel_cloud;
|
|
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> vct_tires_cloud;
|
|
std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> vct_tires_cloud;
|
|
for (int i = 0; i < DeviceAzimuth::DEVICE_AZIMUTH_MAX; i++) {
|
|
for (int i = 0; i < DeviceAzimuth::DEVICE_AZIMUTH_MAX; i++) {
|
|
@@ -200,22 +203,21 @@ void DetectManager::run() {
|
|
cost = std::chrono::steady_clock::now() - t_start_time;
|
|
cost = std::chrono::steady_clock::now() - t_start_time;
|
|
DLOG(INFO) << "cost time is " << cost.count() * 1000 << " ms";
|
|
DLOG(INFO) << "cost time is " << cost.count() * 1000 << " ms";
|
|
|
|
|
|
- bool ceres_detect_ret = false;
|
|
|
|
auto wheel_detect = detect_wheel_ceres::iter();
|
|
auto wheel_detect = detect_wheel_ceres::iter();
|
|
// 轮毂平面检测
|
|
// 轮毂平面检测
|
|
Car_pose_detector::CarDetectResult wheel_ransic_ret;
|
|
Car_pose_detector::CarDetectResult wheel_ransic_ret;
|
|
- wheel_detect->detect_ransic(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF], vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
|
|
- vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR], vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
|
|
- wheel_ransic_ret.wheels_center_x, wheel_ransic_ret.wheels_center_y,
|
|
|
|
- wheel_ransic_ret.theta, wheel_ransic_ret.wheel_base, wheel_ransic_ret.wheel_width,
|
|
|
|
- wheel_ransic_ret.front_wheels_theta, wheel_ransic_ret.loss);
|
|
|
|
|
|
+ wheel_ransic_ret.correct = wheel_detect->detect_ransic(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF], vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
|
|
+ vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR], vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
|
|
+ wheel_ransic_ret.wheels_center_x, wheel_ransic_ret.wheels_center_y,
|
|
|
|
+ wheel_ransic_ret.theta, wheel_ransic_ret.wheel_base, wheel_ransic_ret.wheel_width,
|
|
|
|
+ wheel_ransic_ret.front_wheels_theta, wheel_ransic_ret.loss);
|
|
// 轮胎平面检测
|
|
// 轮胎平面检测
|
|
Car_pose_detector::CarDetectResult tires_ransic_ret;
|
|
Car_pose_detector::CarDetectResult tires_ransic_ret;
|
|
- wheel_detect->detect_ransic(vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF], vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
|
|
- vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR], vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
|
|
- tires_ransic_ret.wheels_center_x, tires_ransic_ret.wheels_center_y,
|
|
|
|
- tires_ransic_ret.theta, tires_ransic_ret.wheel_base, tires_ransic_ret.wheel_width,
|
|
|
|
- tires_ransic_ret.front_wheels_theta, tires_ransic_ret.loss);
|
|
|
|
|
|
+ tires_ransic_ret.correct = wheel_detect->detect_ransic(vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF], vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
|
|
+ vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR], vct_tires_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
|
|
+ tires_ransic_ret.wheels_center_x, tires_ransic_ret.wheels_center_y,
|
|
|
|
+ tires_ransic_ret.theta, tires_ransic_ret.wheel_base, tires_ransic_ret.wheel_width,
|
|
|
|
+ tires_ransic_ret.front_wheels_theta, tires_ransic_ret.loss);
|
|
|
|
|
|
// 双模型检测:采用上次测量结果的数据
|
|
// 双模型检测:采用上次测量结果的数据
|
|
Car_pose_detector::CarDetectResult wheel_2step_ret;
|
|
Car_pose_detector::CarDetectResult wheel_2step_ret;
|
|
@@ -228,7 +230,7 @@ void DetectManager::run() {
|
|
}
|
|
}
|
|
if (m_detect_result_record.car.wheel_width < 1.0 || m_detect_result_record.car.wheel_base < 2.0 ||
|
|
if (m_detect_result_record.car.wheel_width < 1.0 || m_detect_result_record.car.wheel_base < 2.0 ||
|
|
have_cloud.size() > 2) {
|
|
have_cloud.size() > 2) {
|
|
- ceres_detect_ret = wheel_detect->detect_2Step(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF],
|
|
|
|
|
|
+ wheel_2step_ret.correct = wheel_detect->detect_2Step(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
@@ -253,7 +255,7 @@ void DetectManager::run() {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- ceres_detect_ret = wheel_detect->detect_dynP(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF],
|
|
|
|
|
|
+ wheel_2step_ret.correct = wheel_detect->detect_dynP(vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RF],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_LR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
vct_wheel_cloud[DeviceAzimuth::DEVICE_AZIMUTH_RR],
|
|
@@ -268,24 +270,26 @@ void DetectManager::run() {
|
|
// 综合测量结果
|
|
// 综合测量结果
|
|
if (MergeAllMeaureResult(detect_result.car, wheel_ransic_ret, tires_ransic_ret, wheel_2step_ret) == MeasureStatu::Measure_Failture) {
|
|
if (MergeAllMeaureResult(detect_result.car, wheel_ransic_ret, tires_ransic_ret, wheel_2step_ret) == MeasureStatu::Measure_Failture) {
|
|
detect_statu = MeasureStatu::Measure_Failture;
|
|
detect_statu = MeasureStatu::Measure_Failture;
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
+ // 如果车辆运动,不断刷新运动时间,如果由运动转为静止则刷新运动状态到静止
|
|
|
|
+ float move_distance = detect_result.car.wheels_center_y - m_detect_result_record.car.wheels_center_y;
|
|
|
|
+ if (fabs(move_distance) > 0.1) {
|
|
|
|
+ move_statu = true;
|
|
|
|
+ } else if (move_statu()) {
|
|
|
|
+ move_statu = false;
|
|
|
|
+ }
|
|
|
|
|
|
- // 如果车辆运动,不断刷新运动时间,如果由运动转为静止则刷新运动状态到静止
|
|
|
|
- float move_distance = detect_result.car.wheels_center_y - m_detect_result_record.car.wheels_center_y;
|
|
|
|
- if (fabs(move_distance) > 0.1) {
|
|
|
|
- move_statu = true;
|
|
|
|
- } else if (move_statu()) {
|
|
|
|
- move_statu = false;
|
|
|
|
- }
|
|
|
|
- if (ceres_detect_ret) {
|
|
|
|
- // 记录下测量结果
|
|
|
|
m_detect_result_record = detect_result;
|
|
m_detect_result_record = detect_result;
|
|
|
|
+ detect_result_theta_memery_box.save(detect_result.car.theta);
|
|
|
|
+ detect_result_width_memery_box.save(detect_result.car.wheel_width);
|
|
|
|
+ detect_result_wheel_base_memery_box.save(detect_result.car.wheel_base);
|
|
|
|
+ m_detect_result_record.car.theta = detect_result_theta_memery_box.value();
|
|
|
|
+ m_detect_result_record.car.wheel_width = detect_result_width_memery_box.value();
|
|
|
|
+ m_detect_result_record.car.wheel_base = detect_result_wheel_base_memery_box.value();
|
|
|
|
+ LOG(INFO) << m_detect_result_record.car.info();
|
|
detect_statu = Measure_OK;
|
|
detect_statu = Measure_OK;
|
|
m_detect_result_time_lock_data = m_detect_result_record;
|
|
m_detect_result_time_lock_data = m_detect_result_record;
|
|
- } else {
|
|
|
|
- detect_statu = Measure_Failture;
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LOG(INFO) << "detect thread " << std::this_thread::get_id() << " closed.";
|
|
LOG(INFO) << "detect thread " << std::this_thread::get_id() << " closed.";
|
|
@@ -309,10 +313,14 @@ Error_manager DetectManager::WheelCloudOptimize(std::vector<pcl::PointCloud<pcl:
|
|
pcl::PointCloud<pcl::PointXYZ>::Ptr filtered_cloud(new pcl::PointCloud<pcl::PointXYZ>);
|
|
pcl::PointCloud<pcl::PointXYZ>::Ptr filtered_cloud(new pcl::PointCloud<pcl::PointXYZ>);
|
|
for (int device_index = 0; device_index < DeviceAzimuth::DEVICE_AZIMUTH_MAX; device_index++) {
|
|
for (int device_index = 0; device_index < DeviceAzimuth::DEVICE_AZIMUTH_MAX; device_index++) {
|
|
if (vct_wheel_cloud[device_index]->empty()) { continue; }
|
|
if (vct_wheel_cloud[device_index]->empty()) { continue; }
|
|
-
|
|
|
|
vox.setInputCloud(vct_wheel_cloud[device_index]); //设置需要过滤的点云给滤波对象
|
|
vox.setInputCloud(vct_wheel_cloud[device_index]); //设置需要过滤的点云给滤波对象
|
|
vox.filter(*vct_wheel_cloud[device_index]); //执行滤波处理,存储输出
|
|
vox.filter(*vct_wheel_cloud[device_index]); //执行滤波处理,存储输出
|
|
|
|
+// Eigen::Vector4f centroid; //质心
|
|
|
|
+// pcl::compute3DCentroid(*vct_wheel_cloud[device_index], centroid); // 计算质心
|
|
|
|
+// result.wheel[device_index].center = pcl::PointXYZ(centroid[0], centroid[1], 0);
|
|
}
|
|
}
|
|
|
|
+// LOG(INFO) << "wheel base: " << result.wheel[0].center.y - result.wheel[2].center.y;
|
|
|
|
+// LOG(INFO) << "wheel base: " << result.wheel[1].center.y - result.wheel[3].center.y;
|
|
|
|
|
|
return {};
|
|
return {};
|
|
}
|
|
}
|
|
@@ -367,48 +375,71 @@ Error_manager DetectManager::YoloSegMergeData(cv::Mat &merge_mat, JetStream::Lab
|
|
seg_results.mutable_boxes(device_index)->set_width(iter->rect.width);
|
|
seg_results.mutable_boxes(device_index)->set_width(iter->rect.width);
|
|
seg_results.mutable_boxes(device_index)->set_height(iter->rect.height);
|
|
seg_results.mutable_boxes(device_index)->set_height(iter->rect.height);
|
|
seg_results.mutable_boxes(device_index)->set_confidence(iter->prob);
|
|
seg_results.mutable_boxes(device_index)->set_confidence(iter->prob);
|
|
- if (iter->prob > 0.6) {
|
|
|
|
- // 内外椭圆参数
|
|
|
|
- float a1 = iter->rect.width * 0.5;
|
|
|
|
- float b1 = iter->rect.height * 0.5;
|
|
|
|
- float a2 = iter->rect.width * 0.57;
|
|
|
|
- float b2 = iter->rect.height * 0.57;
|
|
|
|
-
|
|
|
|
- //
|
|
|
|
- int center_x = iter->rect.x + iter->rect.width * 0.5;
|
|
|
|
- int center_y = iter->rect.y + iter->rect.height * 0.5;
|
|
|
|
- int min_x = MAX(0, center_x - a2);
|
|
|
|
- int min_y = MAX(0, center_y - b2);
|
|
|
|
- float a12 = a1 * a1;
|
|
|
|
- float b12 = b1 * b1;
|
|
|
|
- float a22 = a2 * a2;
|
|
|
|
- float b22 = b2 * b2;
|
|
|
|
-
|
|
|
|
- for (int x_value = min_x; x_value < center_x; x_value++) {
|
|
|
|
- auto t_x_value = x_value - center_x;
|
|
|
|
- for (int y_value = min_y; y_value < center_y; y_value++) {
|
|
|
|
- auto t_y_value = y_value - center_y;
|
|
|
|
-
|
|
|
|
- if (!isElliptical(t_x_value, t_y_value, a22, b22)) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- auto x_value_sym = 2 * center_x - x_value;
|
|
|
|
- auto y_value_sym = 2 * center_y - y_value;
|
|
|
|
- if (isElliptical(t_x_value, t_y_value, a12, b12)) {
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value, x_value));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value, x_value_sym));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value_sym, x_value));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value_sym, x_value_sym));
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value, x_value));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value, x_value_sym));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value_sym, x_value));
|
|
|
|
- seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value_sym, x_value_sym));
|
|
|
|
|
|
+ if (iter->prob > 0.6) {
|
|
|
|
+ struct segResultColInfo {
|
|
|
|
+ int max = -1e8;
|
|
|
|
+ int min = 1e8;
|
|
|
|
+ };
|
|
|
|
+ segResultColInfo col_info[1280];
|
|
|
|
+ for (auto &point: seg_points) {
|
|
|
|
+ col_info[point.x].max = MAX(point.y, col_info[point.x].max);
|
|
|
|
+ col_info[point.x].min = MIN(point.y, col_info[point.x].min);
|
|
|
|
+ seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(point.y, point.x));
|
|
|
|
+ }
|
|
|
|
+ for (int col_index = 0; col_index < 1280; col_index++) {
|
|
|
|
+ if (col_info[col_index].max < 0 || col_info[col_index].min > 960) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ for (int row_index = col_info[col_index].max; row_index < col_info[col_index].max + 10; row_index++) {
|
|
|
|
+ seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(row_index, col_index));
|
|
|
|
+ }
|
|
|
|
+ for (int row_index = col_info[col_index].min; row_index > col_info[col_index].min - 10; row_index--) {
|
|
|
|
+ seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(row_index, col_index));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // // 内外椭圆参数
|
|
|
|
+ // float a1 = iter->rect.width * 0.5;
|
|
|
|
+ // float b1 = iter->rect.height * 0.5;
|
|
|
|
+ // float a2 = iter->rect.width * 0.57;
|
|
|
|
+ // float b2 = iter->rect.height * 0.57;
|
|
|
|
+
|
|
|
|
+ // //
|
|
|
|
+ // int center_x = iter->rect.x + iter->rect.width * 0.5;
|
|
|
|
+ // int center_y = iter->rect.y + iter->rect.height * 0.5;
|
|
|
|
+ // int min_x = MAX(0, center_x - a2);
|
|
|
|
+ // int min_y = MAX(0, center_y - b2);
|
|
|
|
+ // float a12 = a1 * a1;
|
|
|
|
+ // float b12 = b1 * b1;
|
|
|
|
+ // float a22 = a2 * a2;
|
|
|
|
+ // float b22 = b2 * b2;
|
|
|
|
+
|
|
|
|
+ // for (int x_value = min_x; x_value < center_x; x_value++) {
|
|
|
|
+ // auto t_x_value = x_value - center_x;
|
|
|
|
+ // for (int y_value = min_y; y_value < center_y; y_value++) {
|
|
|
|
+ // auto t_y_value = y_value - center_y;
|
|
|
|
+
|
|
|
|
+ // if (!isElliptical(t_x_value, t_y_value, a22, b22)) {
|
|
|
|
+ // continue;
|
|
|
|
+ // }
|
|
|
|
+ // auto x_value_sym = 2 * center_x - x_value;
|
|
|
|
+ // auto y_value_sym = 2 * center_y - y_value;
|
|
|
|
+ // if (isElliptical(t_x_value, t_y_value, a12, b12)) {
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value, x_value));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value, x_value_sym));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value_sym, x_value));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_wheels()->set_point(getPixelIndex(y_value_sym, x_value_sym));
|
|
|
|
+ // continue;
|
|
|
|
+ // }
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value, x_value));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value, x_value_sym));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value_sym, x_value));
|
|
|
|
+ // seg_results.mutable_boxes(device_index)->add_tires()->set_point(getPixelIndex(y_value_sym, x_value_sym));
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ // cv::imshow("merge_mat", merge_mat);
|
|
|
|
+ // cv::waitKey(1);
|
|
cost = std::chrono::steady_clock::now() - t_start_time;
|
|
cost = std::chrono::steady_clock::now() - t_start_time;
|
|
DLOG(INFO) << __FUNCTION__ << "cost time is " << cost.count() * 1000 << " ms";
|
|
DLOG(INFO) << __FUNCTION__ << "cost time is " << cost.count() * 1000 << " ms";
|
|
return {};
|
|
return {};
|
|
@@ -427,37 +458,72 @@ MeasureStatu DetectManager::MergeAllMeaureResult(Car_pose_detector::CarDetectRes
|
|
Car_pose_detector::CarDetectResult &wheel_ransic,
|
|
Car_pose_detector::CarDetectResult &wheel_ransic,
|
|
Car_pose_detector::CarDetectResult &tires_ransic,
|
|
Car_pose_detector::CarDetectResult &tires_ransic,
|
|
Car_pose_detector::CarDetectResult &wheel_2step) {
|
|
Car_pose_detector::CarDetectResult &wheel_2step) {
|
|
- if (fabs(wheel_ransic.theta - tires_ransic.theta) * 180.0 / M_PI < 0.7) {
|
|
|
|
- merge_result.wheels_center_x = tires_ransic.wheels_center_x;
|
|
|
|
- merge_result.wheels_center_y = tires_ransic.wheels_center_y;
|
|
|
|
- merge_result.wheel_width = wheel_2step.wheel_width;
|
|
|
|
- merge_result.wheel_base = wheel_2step.wheel_base;
|
|
|
|
- merge_result.theta = tires_ransic.theta;
|
|
|
|
|
|
+ LOG(INFO) << wheel_ransic.info();
|
|
|
|
+ LOG(INFO) << tires_ransic.info();
|
|
|
|
+ LOG(INFO) << wheel_2step.info();
|
|
|
|
+ if (!wheel_ransic.correct && !tires_ransic.correct) {
|
|
|
|
+ LOG(INFO) << "----------------------------------------------------";
|
|
|
|
+ return MeasureStatu::Measure_Failture;
|
|
|
|
+ } else if (wheel_ransic.correct && !tires_ransic.correct) {
|
|
|
|
+ merge_result.wheel_width = wheel_ransic.wheel_width;
|
|
|
|
+ merge_result.front_wheels_theta = wheel_ransic.front_wheels_theta;
|
|
|
|
+ if (wheel_2step.correct && !isCarDetectResultNearly(wheel_2step, wheel_ransic)) {
|
|
|
|
+ merge_result.wheels_center_x = wheel_ransic.wheels_center_x;
|
|
|
|
+ merge_result.wheels_center_y = wheel_ransic.wheels_center_y;
|
|
|
|
+ merge_result.wheel_base = wheel_ransic.wheel_base;
|
|
|
|
+ merge_result.theta = wheel_ransic.theta;
|
|
|
|
+ } else if (wheel_2step.correct && isCarDetectResultNearly(wheel_2step, wheel_ransic)) {
|
|
|
|
+ merge_result.wheels_center_x = (wheel_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
|
|
+ merge_result.wheels_center_y = (wheel_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
|
|
+ merge_result.wheel_base = (wheel_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
|
|
+ merge_result.theta = wheel_ransic.theta;
|
|
|
|
+ } else {
|
|
|
|
+ LOG(INFO) << "----------------------------------------------------";
|
|
|
|
+ return MeasureStatu::Measure_Failture;
|
|
|
|
+ }
|
|
|
|
+ } else if (tires_ransic.correct && !wheel_ransic.correct) {
|
|
|
|
+ merge_result.wheel_width = tires_ransic.wheel_width;
|
|
merge_result.front_wheels_theta = tires_ransic.front_wheels_theta;
|
|
merge_result.front_wheels_theta = tires_ransic.front_wheels_theta;
|
|
- } else {
|
|
|
|
- if (isCarDetectResultNearly(wheel_2step, tires_ransic)) {
|
|
|
|
|
|
+ if (wheel_2step.correct && !isCarDetectResultNearly(wheel_2step, tires_ransic)) {
|
|
|
|
+ merge_result.wheels_center_x = tires_ransic.wheels_center_x;
|
|
|
|
+ merge_result.wheels_center_y = tires_ransic.wheels_center_y;
|
|
|
|
+ merge_result.wheel_base = tires_ransic.wheel_base;
|
|
|
|
+ merge_result.theta = tires_ransic.theta;
|
|
|
|
+ } else if (wheel_2step.correct && isCarDetectResultNearly(wheel_2step, tires_ransic)) {
|
|
merge_result.wheels_center_x = (tires_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
merge_result.wheels_center_x = (tires_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
merge_result.wheels_center_y = (tires_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
merge_result.wheels_center_y = (tires_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
- merge_result.wheel_width = tires_ransic.wheel_width * 0.3 + wheel_2step.wheels_center_y * 0.7;
|
|
|
|
merge_result.wheel_base = (tires_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
merge_result.wheel_base = (tires_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
merge_result.theta = tires_ransic.theta;
|
|
merge_result.theta = tires_ransic.theta;
|
|
- merge_result.front_wheels_theta = tires_ransic.front_wheels_theta;
|
|
|
|
- } else if (isCarDetectResultNearly(wheel_2step, wheel_ransic)) {
|
|
|
|
- merge_result.wheels_center_x = (wheel_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
|
|
- merge_result.wheels_center_y = (wheel_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
|
|
- merge_result.wheel_width = wheel_ransic.wheel_width * 0.3 + wheel_2step.wheels_center_y * 0.7;
|
|
|
|
- merge_result.wheel_base = (wheel_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
|
|
- merge_result.theta = wheel_ransic.theta;
|
|
|
|
- merge_result.front_wheels_theta = wheel_ransic.front_wheels_theta;
|
|
|
|
} else {
|
|
} else {
|
|
|
|
+ LOG(INFO) << "----------------------------------------------------";
|
|
return MeasureStatu::Measure_Failture;
|
|
return MeasureStatu::Measure_Failture;
|
|
}
|
|
}
|
|
|
|
+ } else {
|
|
|
|
+ merge_result.wheel_width = wheel_ransic.wheel_width * 0.7 + tires_ransic.wheel_width * 0.3;
|
|
|
|
+ merge_result.front_wheels_theta = (wheel_ransic.front_wheels_theta + tires_ransic.front_wheels_theta) * 0.5;
|
|
|
|
+ if (fabs(wheel_ransic.theta - tires_ransic.theta) * 180.0 / M_PI < 0.7) {
|
|
|
|
+ merge_result.wheels_center_x = wheel_ransic.wheels_center_x;
|
|
|
|
+ merge_result.wheels_center_y = wheel_ransic.wheels_center_y;
|
|
|
|
+ merge_result.wheel_base = wheel_ransic.wheel_base * 0.7 + tires_ransic.wheel_base * 0.3;
|
|
|
|
+ merge_result.theta = wheel_ransic.theta;
|
|
|
|
+ } else {
|
|
|
|
+ if (isCarDetectResultNearly(wheel_2step, tires_ransic)) {
|
|
|
|
+ merge_result.wheels_center_x = (tires_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
|
|
+ merge_result.wheels_center_y = (tires_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
|
|
+ merge_result.wheel_base = (tires_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
|
|
+ merge_result.theta = tires_ransic.theta;
|
|
|
|
+ } else if (isCarDetectResultNearly(wheel_2step, wheel_ransic)) {
|
|
|
|
+ merge_result.wheels_center_x = (wheel_ransic.wheels_center_x + wheel_2step.wheels_center_x) * 0.5;
|
|
|
|
+ merge_result.wheels_center_y = (wheel_ransic.wheels_center_y + wheel_2step.wheels_center_y) * 0.5;
|
|
|
|
+ merge_result.wheel_base = (wheel_ransic.wheel_base + wheel_2step.wheel_base) * 0.5;
|
|
|
|
+ merge_result.theta = wheel_ransic.theta;
|
|
|
|
+ } else {
|
|
|
|
+ LOG(INFO) << "----------------------------------------------------";
|
|
|
|
+ return MeasureStatu::Measure_Failture;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
- LOG(INFO) << wheel_ransic.info();
|
|
|
|
- LOG(INFO) << tires_ransic.info();
|
|
|
|
- LOG(INFO) << wheel_2step.info();
|
|
|
|
LOG(INFO) << merge_result.info();
|
|
LOG(INFO) << merge_result.info();
|
|
return MeasureStatu::Measure_OK;
|
|
return MeasureStatu::Measure_OK;
|
|
}
|
|
}
|