123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- //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<pcl::PointXYZ>::Ptr p_task_point_cloud,
- std::mutex* p_task_cloud_lock)
- {
- if(p_task_point_cloud.get() == 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<pcl::PointXYZ>::Ptr p_task_point_cloud,
- std::mutex* p_task_cloud_lock)
- {
- if(p_task_point_cloud.get() == 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.get()==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;
- }
- //获取采集的点云保存文件的使能标志位
- bool Laser_task::get_task_save_flag()
- {
- return m_task_save_flag;
- }
- //获取采集的点云保存路径
- std::string Laser_task::get_task_save_path()
- {
- return m_task_save_path;
- }
- //获取 三维点云容器的智能指针
- std::mutex* Laser_task::get_task_cloud_lock()
- {
- return mp_task_cloud_lock;
- }
- //获取 三维点云容器的智能指针
- pcl::PointCloud<pcl::PointXYZ>::Ptr 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_save_path(std::string task_save_path)
- {
- m_task_save_path=task_save_path;
- }
- //设置 三维点云容器的智能指针
- void Laser_task::set_task_point_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr 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;
- }
|