/* * 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 #include #include "../error_code/error_code.h" #include #include #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::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::Ptr>* p_task_point_cloud_map, bool cloud_aggregation_flag, unsigned int task_frame_maxnum, bool is_select_all_laser, std::vector 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::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::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& get_select_laser_id_vector(); //设置 被选中的雷达编号。 void set_select_laser_id_vector(std::vector& 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::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 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