|
@@ -265,6 +265,7 @@ bool Ground_region::classify_ceres_detect(pcl::PointCloud<pcl::PointXYZ>::Ptr cl
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ LOG(WARNING) << error_str;
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -299,6 +300,7 @@ Error_manager Ground_region::init(velodyne::Region region, pcl::PointCloud<pcl::
|
|
|
m_region = region;
|
|
|
m_detector = new detect_wheel_ceres3d(left_model,right_model);
|
|
|
mp_cloud_collection = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
|
|
|
+ mp_cloud_filtered = pcl::PointCloud<pcl::PointXYZ>::Ptr(new pcl::PointCloud<pcl::PointXYZ>);
|
|
|
m_measure_thread = new std::thread(&Ground_region::thread_measure_func, this);
|
|
|
m_measure_condition.reset();
|
|
|
m_region_status = E_READY;
|
|
@@ -340,6 +342,11 @@ Error_manager Ground_region::detect(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, d
|
|
|
if (cloud_filtered->size() == 0)
|
|
|
return Error_manager(VELODYNE_REGION_EMPTY_CLOUD, NORMAL, "filtered no point");
|
|
|
|
|
|
+ m_filtered_cloud_mutex.lock();
|
|
|
+ mp_cloud_filtered->clear();
|
|
|
+ mp_cloud_filtered->operator+=(*cloud_filtered);
|
|
|
+ m_filtered_cloud_mutex.unlock();
|
|
|
+
|
|
|
float start_z = m_region.minz();
|
|
|
float max_z = 0.2;
|
|
|
float center_z = (start_z + max_z) / 2.0;
|
|
@@ -352,7 +359,7 @@ Error_manager Ground_region::detect(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud, d
|
|
|
{
|
|
|
detect_wheel_ceres3d::Detect_result result;
|
|
|
bool ret = classify_ceres_detect(cloud_filtered, center_z, result);
|
|
|
- // std::cout << "z: " << center_z <<", "<<start_z<<"," << max_z << std::endl;
|
|
|
+ // std::cout << "z: " << center_z <<", "<<start_z<<"," << max_z <<(ret?"clustered":"clustering failed")<< std::endl;
|
|
|
if (ret)
|
|
|
{
|
|
|
results.push_back(result);
|
|
@@ -453,8 +460,20 @@ Error_manager Ground_region::get_last_wheel_information(Common_data::Car_wheel_i
|
|
|
|
|
|
Error_manager Ground_region::update_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud)
|
|
|
{
|
|
|
+ // // 点云z转90度,调试用
|
|
|
+ //Eigen::AngleAxisd rot_z = Eigen::AngleAxisd(M_PI_2, Eigen::Vector3d::UnitZ());
|
|
|
+ //for (size_t i = 0; i < cloud->size(); i++)
|
|
|
+ //{
|
|
|
+ // Eigen::Vector3d t_point(cloud->points[i].x, cloud->points[i].y, cloud->points[i].z);
|
|
|
+ // t_point = rot_z.toRotationMatrix() * t_point;
|
|
|
+ // cloud->points[i].x = t_point.x();
|
|
|
+ // cloud->points[i].y = t_point.y();
|
|
|
+ // cloud->points[i].z = t_point.z();
|
|
|
+ //}
|
|
|
+
|
|
|
std::lock_guard<std::mutex> lck(m_cloud_collection_mutex);
|
|
|
mp_cloud_collection = cloud;
|
|
|
+ // LOG(WARNING) << "update region cloud size: " << mp_cloud_collection->size() << ",,, input size: " << cloud->size();
|
|
|
m_cloud_collection_time = std::chrono::system_clock::now();
|
|
|
m_measure_condition.notify_one(false, true);
|
|
|
return SUCCESS;
|
|
@@ -490,6 +509,7 @@ void Ground_region::thread_measure_func()
|
|
|
else
|
|
|
{
|
|
|
m_car_wheel_information.correctness = false;
|
|
|
+ // LOG(ERROR) << ec.to_string();
|
|
|
}
|
|
|
}
|
|
|
m_region_status = E_READY;
|