#pragma once #include "tool/singleton.hpp" #include #include #include #include #include #include #include #include "tool/point3D_tool.hpp" class WheelCeresDetector : public Singleton { friend class Singleton; public: struct WheelDetectResult { bool haveCloud = false; bool segmentOk = false; bool detectOk = false; bool detectOkOnTime = false; pcl::PointXYZ center; float confidence = 0; float theta = 0; float loss = 0; void reset() { haveCloud = false; segmentOk = false; detectOk = false; detectOkOnTime = false; center.x = 0; center.y = 0; center.z = 0; confidence = 0; theta = 0; loss = 0; } std::string info() { char str[512]; sprintf(str, "x: %.3f, y: %.3f, z: %.3f, theta: %.3f loss: %.3f conf: %.3f\n", center.x, center.y, center.z, theta, loss, confidence); return str; } }; WheelCeresDetector &operator=(const WheelCeresDetector &) = delete; ~WheelCeresDetector() override = default; // 单轮检测 bool detect(pcl::PointCloud::Ptr in_cloud_ptr, pcl::PointCloud::Ptr out_cloud_ptr, WheelDetectResult &result, bool left_model); bool detect(pcl::PointCloud::Ptr left_in_cloud, pcl::PointCloud::Ptr left_out_cloud, WheelDetectResult &left_result, pcl::PointCloud::Ptr right_in_cloud, pcl::PointCloud::Ptr right_out_cloud, WheelDetectResult &right_result); bool detect(std::vector::Ptr> vct_wheels_cloud, pcl::PointCloud::Ptr left_out_cloud, WheelCeresDetector::WheelDetectResult *wheels_result); protected: // 父类的构造函数必须保护,子类的构造函数必须私有。 WheelCeresDetector() = default; private: std::vector singleWheelModel(); std::vector singleLeftWheelModel(); std::vector singleRightWheelModel(); void doubleWheelModel( std::vector& linel,std::vector& liner); private: std::vector line_; };