// // Created by zx on 2019/12/30. // #ifndef LOCATE_TASK_H #define LOCATE_TASK_H #include "../task/task_command_manager.h" #include "../error_code/error_code.h" #include #include #include #include //lacate测量结果结构体, 整车的信息, typedef struct Locate_information { float locate_x; //整车的中心点x值, 四轮的中心 float locate_y; //整车的中心点y值, 四轮的中心 float locate_angle; //整车的旋转角, 四轮的旋转角 float locate_length; //整车的长度, 用于规避碰撞 float locate_width; //整车的宽度, 用于规避碰撞 float locate_height; //整车的高度, 用于规避碰撞 float locate_wheel_base; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车 float locate_wheel_width; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车 bool locate_correct; //整车的校准标记位 //注:理论上, 车宽和左右轮距应该是一样的, 但是实际上车宽比左右轮距略大, }Locate_information; /* * 测量任务类,负责维护测量任务所需的输入参数以及测量的结果 */ class Locate_manager_task: public Task_Base { public: Locate_manager_task(); ~Locate_manager_task(); //初始化任务单,必须初始化之后才可以使用,(必选参数) // input:p_task_cloud_lock 三维点云的数据保护锁 // output:p_task_point_cloud 三维点云容器的智能指针 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_save_flag 是否保存 // input:task_save_path 保存路径 // input:p_task_cloud_lock 三维点云的数据保护锁 // output:p_task_pmutexoint_cloud 三维点云容器的智能指针 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 ); //更新定位信息 Error_manager task_update_locate_information(Locate_information locate_information); public: //get or set member variable //获取保存文件的使能标志位 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(); //获取测量结果 整车的定位信息 Locate_information get_task_locate_information(); //获取测量结果 整车的定位信息 Locate_information* get_task_locate_information_ex(); //设置保存文件的使能标志位 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); //设置测量结果 整车的定位信息 void set_task_locate_information(Locate_information task_locate_information); protected: //任务执行中间文件的保存使能标志位,//默认不保存,false bool m_task_save_flag; //任务执行中间文件的保存路径,任务输入 std::string m_task_save_path; //三维点云的数据保护锁,任务输入, std::mutex* mp_task_cloud_lock; //三维点云的智能指针map,任务输入//这里只是智能指针,实际内存由任务发送方管理管理,初始化时必须保证内存有效。 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, 每个雷达的数据都是独立的. //测量结果 整车的定位信息,注:这个不需要外部导入,构造的时候就会初始化为0; Locate_information m_task_locate_information; }; #endif //LOCATE_TASK_H