123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /*
- * Laser_manager_task 是雷达管理的任务单。
- * 外部通过它对 Laser_manager 下发任务。
- *
- //用法:上级直接调用 Laser_manager 的接口函数 execute_task ,并将 Laser_manager_task 类作为参数传递
- // Laser_manager 类则按照 Laser_manager_task 的功能码和指定的参数,执行相应的功能
- //并将结果填充到 Laser_manager_task ,返回给上级。
- *
- *
- * */
- #ifndef LASER_MANAGER_TASK_H
- #define LASER_MANAGER_TASK_H
- #include <pcl/point_types.h>
- #include <pcl/common/common.h>
- #include "../error_code/error_code.h"
- #include <vector>
- #include <mutex>
- #include "../task/task_command_manager.h"
- #include "../laser/laser_task_command.h"
- #include "../laser/Laser.h"
- class Laser_manager_task:public Task_Base
- {
- public://API functions
- //构造函数,构造函数锁定任务类型为 LASER_MANGER_SCAN_TASK ,后续不允许更改
- Laser_manager_task();
- Laser_manager_task(const Laser_manager_task& other) = delete;
- ~Laser_manager_task();
- //初始化任务单,必须初始化之后才可以使用,(必选参数)
- // input:p_task_cloud_lock 三维点云的数据保护锁
- // output:p_task_point_cloud 三维点云容器的智能指针
- //注:task_frame_maxnum默认为0,如果为0,则使用laser默认的点云的采集帧数最大值 TASK_FRAME_MAXNUM_DEFAULT
- Error_manager task_init(std::mutex* p_task_cloud_lock,
- std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map);
- //初始化任务单,必须初始化之后才可以使用,(可选参数)
- // input:task_statu 任务状态
- // input:task_statu_information 状态说明
- // input:tast_receiver 接受对象
- // input:task_over_time 超时时间
- // input:task_frame_maxnum 点云的采集帧数最大值
- // input:task_save_flag 是否保存
- // input:task_save_path 保存路径
- // input:p_task_cloud_lock 三维点云的数据保护锁
- // output:p_task_point_cloud 三维点云容器的智能指针
- // input:m_is_select_all_laser 是否选取所有的雷达
- // input:select_laser_number_vector 选取的指定雷达id
- //注:task_frame_maxnum默认为0,如果为0,则使用laser默认的点云的采集帧数最大值 TASK_FRAME_MAXNUM_DEFAULT
- Error_manager task_init(Task_statu task_statu,
- std::string task_statu_information,
- void* p_tast_receiver,
- std::chrono::milliseconds task_over_time,
- bool task_save_flag,
- std::string task_save_path,
- std::mutex* p_task_cloud_lock,
- std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map,
- bool cloud_aggregation_flag,
- unsigned int task_frame_maxnum,
- bool is_select_all_laser,
- std::vector<int> select_laser_id_vector
- );
- //把 Laser_manager_task 转化为 Laser_task,注意 task_statu 从外部载入。
- //output:p_laser_task 雷达扫描任务的指针,
- //input:laser_index 雷达编号
- //input:p_laser_base 接受任务的 子雷达
- //input:task_statu 外部载入的任务状态,默认为 TASK_CREATED
- //input:task_over_time 超时时间,一般要比上级任务的时间短一些
- Error_manager trans_to_laser_task(Laser_task * p_laser_task, int laser_index,Laser_base* p_laser_base,
- Task_statu task_statu = TASK_CREATED,
- std::chrono::milliseconds task_over_time = std::chrono::milliseconds(TASK_OVER_TIME_DEFAULT));
- public://get or set member variable
- //获取 点云的采集帧数最大值
- unsigned int get_task_frame_maxnum();
- //获取采集的点云保存文件的使能标志位
- bool get_task_save_flag();
- //获取采集的点云保存路径
- std::string get_task_save_path();
- //获取 三维点云容器的智能指针
- std::mutex* get_task_cloud_lock();
- //获取 三维点云容器的智能指针map
- std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* get_task_point_cloud_map();
- //获取 所有雷达的三维点云是否聚集的标志位
- bool get_cloud_aggregation_flag();
- //设置 点云的采集帧数最大值
- void set_task_frame_maxnum(unsigned int task_frame_maxnum);
- //设置采集的点云保存文件的使能标志位
- void set_task_save_flag(bool task_save_flag);
- //设置采集的点云保存路径
- void set_task_save_path(std::string task_save_path);
- //设置采集的点云保存标志位和路径
- void set_task_save_flag_and_path(bool task_save_flag, std::string task_save_path);
- //设置 三维点云容器的锁
- void set_task_cloud_lock(std::mutex* p_task_cloud_lock);
- //设置 三维点云容器的智能指针
- void set_task_point_cloud(std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map);
- //设置 所有雷达的三维点云是否聚集的标志位
- void set_cloud_aggregation_flag(bool cloud_aggregation_flag);
- //获取 是否选取所有的雷达
- bool get_select_all_laser_flag();
- //设置 是否选取所有的雷达
- void set_select_all_laser_flag( bool select_all_laser_flag);
- //获取 被选中的雷达编号。
- std::vector<int>& get_select_laser_id_vector();
- //设置 被选中的雷达编号。
- void set_select_laser_id_vector(std::vector<int>& select_laser_id_vector);
- protected://member variable
- //点云的采集帧数最大值,任务输入
- unsigned int m_task_frame_maxnum;
- //雷达保存文件的使能标志位,//默认不保存,false
- bool m_task_save_flag;
- //点云保存文件的路径,任务输入
- std::string m_task_save_path;
- //三维点云的数据保护锁,任务输入
- std::mutex* mp_task_cloud_lock;
- //采集结果,三维点云容器的map指针,任务输出, map的内存由发送方管理,
- //map内部是空的, 处理任务过程再往里面push点云
- std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* mp_task_point_cloud_map;
- //所有雷达的三维点云是否聚集的标志位,
- bool m_cloud_aggregation_flag;
- //m_cloud_aggregation_flag==true :: mp_task_point_cloud_map里面只有一个cloud
- //m_cloud_aggregation_flag==false:: mp_task_point_cloud_map里面有很多个cloud, 每个雷达的数据都是独立的.
- bool m_select_all_laser_flag; //是否选取所有的雷达。默认为true
- std::vector<int> m_select_laser_id_vector; //被选中的雷达编号。
- //注:当 m_is_select_all_laser 为true时,m_select_laser_number_vector不用写。
- //注:当 m_is_select_all_laser 为false时,m_select_laser_number_vector 必须填写,不能为空。否则报错。
- private:
- };
- #endif //LASER_MANAGER_TASK_H
|