//laser_task_command,是雷达任务指令的相关功能 //功能:用作应用层向laser模块传输任务,的指令消息 //用法:应用层直接调用laser的接口函数,并将Laser_task类作为参数传递 //CLaser类则按照Laser_task的功能码和指定的参数,执行相应的功能 //并将结果填充到Laser_task,返回给应用层 #include "laser_task_command.h" //构造函数,构造函数锁定任务类型为LASER_TASK,后续不允许更改 Laser_task::Laser_task() { //构造函数锁定任务类型为LASER_TASK,后续不允许更改 m_task_type = LASER_TASK; m_task_statu = TASK_CREATED; //m_task_statu_information默认为空 m_task_frame_maxnum = 0; mp_task_point_cloud = NULL; //m_task_error_manager 默认为空 mp_task_cloud_lock=NULL; } //析构函数 Laser_task::~Laser_task() { } //初始化任务单,必须初始化之后才可以使用,(必选参数) // input:task_statu 任务状态 // output:p_task_point_cloud 三维点云容器的智能指针 // input:p_task_cloud_lock 三维点云的数据保护锁 //注:task_frame_maxnum默认为0,如果为0,则使用laser默认的点云的采集帧数最大值 TASK_FRAME_MAXNUM_DEFAULT Error_manager Laser_task::task_init(Task_statu task_statu, pcl::PointCloud* p_task_point_cloud, std::mutex* p_task_cloud_lock) { if(p_task_point_cloud == NULL) { return Error_manager(Error_code::POINTER_IS_NULL, Error_level::MINOR_ERROR, "Laser_task::task_init p_task_point_cloud is null"); } if(p_task_cloud_lock==NULL) { return Error_manager(POINTER_IS_NULL,MINOR_ERROR,"laser task input lock is null"); } m_task_statu = task_statu; m_task_statu_information.clear(); m_task_frame_maxnum = TASK_FRAME_MAXNUM_DEFAULT; mp_task_cloud_lock=p_task_cloud_lock; mp_task_point_cloud = p_task_point_cloud; m_task_error_manager.error_manager_clear_all(); return Error_code::SUCCESS; } //初始化任务单,必须初始化之后才可以使用,(可选参数) // input:task_statu任务状态 // input:task_statu_information状态说明 // input:task_frame_maxnum点云的采集帧数最大值 // output:p_task_point_cloud三维点云容器的智能指针 // input:p_task_cloud_lock 三维点云的数据保护锁 //注:task_frame_maxnum默认为0,如果为0,则使用laser默认的点云的采集帧数最大值 TASK_FRAME_MAXNUM_DEFAULT Error_manager Laser_task::task_init(Task_statu task_statu, std::string & task_statu_information, unsigned int task_frame_maxnum, pcl::PointCloud* p_task_point_cloud, std::mutex* p_task_cloud_lock) { if(p_task_point_cloud == NULL) { return Error_manager(Error_code::POINTER_IS_NULL, Error_level::MINOR_ERROR, "Laser_task::task_init p_task_point_cloud is null"); } if(p_task_cloud_lock==NULL) { return Error_manager(POINTER_IS_NULL,MINOR_ERROR,"laser task input lock is null"); } m_task_statu = task_statu; m_task_statu_information = task_statu_information; if(task_frame_maxnum == 0) { m_task_frame_maxnum = TASK_FRAME_MAXNUM_DEFAULT; } else { m_task_frame_maxnum = task_frame_maxnum; } mp_task_cloud_lock=p_task_cloud_lock; mp_task_point_cloud = p_task_point_cloud; m_task_error_manager.error_manager_clear_all(); return Error_code::SUCCESS; } //push点云,把 point_xyz 添加到 p_task_point_cloud 里面。 Error_manager Laser_task::task_push_point(pcl::PointXYZ point_xyz) { if(mp_task_cloud_lock==NULL) { return Error_manager(POINTER_IS_NULL,MINOR_ERROR, "push_point laser task input lock is null"); } if(mp_task_point_cloud==NULL) { return Error_manager(Error_code::POINTER_IS_NULL, Error_level::MINOR_ERROR, "Laser_task::task_push_point p_task_point_cloud is null"); } //加锁,并添加三维点。 mp_task_cloud_lock->lock(); mp_task_point_cloud->push_back(point_xyz); mp_task_cloud_lock->unlock(); return SUCCESS; } //获取 点云的采集帧数最大值 unsigned int Laser_task::get_task_frame_maxnum() { return m_task_frame_maxnum; } //获取 三维点云容器的智能指针 pcl::PointCloud* Laser_task::get_task_point_cloud() { return mp_task_point_cloud; } //设置 任务状态 void Laser_task::set_task_statu(Task_statu task_statu) { m_task_statu = task_statu; } //设置 任务状态说明 void Laser_task::set_task_statu_information(std::string & task_statu_information) { m_task_statu_information = task_statu_information; } //设置 点云的采集帧数最大值 void Laser_task::set_task_frame_maxnum(unsigned int task_frame_maxnum) { m_task_frame_maxnum = task_frame_maxnum; } //设置 三维点云容器的智能指针 void Laser_task::set_task_point_cloud(pcl::PointCloud* p_task_point_cloud) { mp_task_point_cloud = p_task_point_cloud; } //设置 错误码 void Laser_task::set_task_error_manager(Error_manager & error_manager) { m_task_error_manager = error_manager; } //获取采集的点云保存路径 std::string Laser_task::get_save_path() { return m_save_path; } //设置采集的点云保存路径 void Laser_task::set_save_path(std::string save_path) { m_save_path=save_path; }