123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- //
- // 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 <pcl/point_types.h>
- #include <pcl/common/common.h>
- #include <mutex>
- #include <map>
- //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<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_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<int,pcl::PointCloud<pcl::PointXYZ>::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<int,pcl::PointCloud<pcl::PointXYZ>::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<int,pcl::PointCloud<pcl::PointXYZ>::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<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, 每个雷达的数据都是独立的.
- //测量结果 整车的定位信息,注:这个不需要外部导入,构造的时候就会初始化为0;
- Locate_information m_task_locate_information;
- };
- #endif //LOCATE_TASK_H
|