Train_Identify_arm/ai_matrix/mypcl/mypcl.h

86 lines
3.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MYPCL_H_
#define MYPCL_H_
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/common/common.h>
#include <pcl/common/transforms.h>
#include <pcl/filters/crop_box.h>
#include <pcl/compression/octree_pointcloud_compression.h>
#include <mutex>
#include <sstream>
#include <fstream>
#include <dirent.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string>
namespace ai_matrix
{
class MyPcl final
{
public:
static MyPcl *getins();
//点云压缩
void compressPCD(const pcl::PointCloud<pcl::PointXYZRGB> &cloud, std::stringstream &compressedData);
//拟合车厢边缘线
void insert_plane_line(pcl::PointCloud<pcl::PointXYZRGB> &line, float x_min, float x_max, float y, float z, unsigned char r, unsigned char g, unsigned char b, float step = 0.02);
//拟合装载区域边缘线
void insert_load_line(pcl::PointCloud<pcl::PointXYZRGB> &line, float x_min, float x_max, float y_min, float y_max, float z, unsigned char r, unsigned char g, unsigned char b, float step = 0.02);
//拟合限制线
void insert_bound_line(pcl::PointCloud<pcl::PointXYZRGB> &line, float y_min, float y_max, float z_min, float z_max, float x, unsigned char r, unsigned char g, unsigned char b, float step = 0.02);
//拟合识别物体边缘框
void insert_object_line(pcl::PointCloud<pcl::PointXYZRGB> &line, float x_min, float x_max, float y, float z_min, float z_max, unsigned char r, unsigned char g, unsigned char b, float step = 0.02);
//坐标变换1有参照物时用
void coords_convert(const pcl::PointCloud<pcl::PointXYZ> &cloud_in, pcl::PointCloud<pcl::PointXYZ> &cloud_out, const Eigen::Matrix4f &tf, float thetaz = 0);
//坐标变换2无参照物时用
void coords_convert(const pcl::PointCloud<pcl::PointXYZ> &cloud_in, pcl::PointCloud<pcl::PointXYZ> &cloud_out, float thetax = 0, float thetay = 0, float thetaz = 0, float radarz = 0, bool reverse = false);
//取中心立方体
void cube_cloud(const pcl::PointCloud<pcl::PointXYZ> &cloud_in, std::vector<int> &indices, const Eigen::Vector3f &min, const Eigen::Vector3f &max);
//取中心立方体
void cube_cloud(const pcl::PointCloud<pcl::PointXYZ> &cloud_in, pcl::PointCloud<pcl::PointXYZ> &cloud_out, const Eigen::Vector3f &min, const Eigen::Vector3f &max);
//取中心立方体
void cube_cloud(const pcl::PointCloud<pcl::PointXYZ> &cloud_in, pcl::PointCloud<pcl::PointXYZ> &cloud_out, std::vector<int> &indices, const Eigen::Vector3f &min, const Eigen::Vector3f &max);
private:
MyPcl() = default;
MyPcl(const MyPcl &) = delete;
MyPcl(MyPcl &&) = delete;
MyPcl &operator=(const MyPcl &) = delete;
MyPcl &operator=(MyPcl &&) = delete;
~MyPcl() = default;
//定义一个嵌套类,负责释放内存,操作系统自动完成,不用担心内存泄露
class GarbageCollector
{
public:
~GarbageCollector()
{
if (MyPcl::ins)
{
delete MyPcl::ins;
MyPcl::ins = nullptr;
}
}
};
static GarbageCollector gc;
static MyPcl *ins;
static std::mutex mx; //锁,保证线程安全
};
}
#endif