locate_manager_task.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //
  2. // Created by zx on 2019/12/30.
  3. //
  4. #ifndef LOCATE_TASK_H
  5. #define LOCATE_TASK_H
  6. #include "../task/task_command_manager.h"
  7. #include "../error_code/error_code.h"
  8. #include <pcl/point_types.h>
  9. #include <pcl/common/common.h>
  10. #include <mutex>
  11. #include <map>
  12. //lacate测量结果结构体, 整车的信息,
  13. typedef struct Locate_information
  14. {
  15. float locate_x; //整车的中心点x值, 四轮的中心
  16. float locate_y; //整车的中心点y值, 四轮的中心
  17. float locate_angle; //整车的旋转角, 四轮的旋转角
  18. float locate_length; //整车的长度, 用于规避碰撞
  19. float locate_width; //整车的宽度, 用于规避碰撞
  20. float locate_height; //整车的高度, 用于规避碰撞
  21. float locate_wheel_base; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车
  22. float locate_wheel_width; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车
  23. bool locate_correct; //整车的校准标记位
  24. //注:理论上, 车宽和左右轮距应该是一样的, 但是实际上车宽比左右轮距略大,
  25. }Locate_information;
  26. /*
  27. * 测量任务类,负责维护测量任务所需的输入参数以及测量的结果
  28. */
  29. class Locate_manager_task: public Task_Base
  30. {
  31. public:
  32. Locate_manager_task();
  33. ~Locate_manager_task();
  34. //初始化任务单,必须初始化之后才可以使用,(必选参数)
  35. // input:p_task_cloud_lock 三维点云的数据保护锁
  36. // output:p_task_point_cloud 三维点云容器的智能指针
  37. Error_manager task_init(std::mutex* p_task_cloud_lock,
  38. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map
  39. );
  40. //初始化任务单,必须初始化之后才可以使用,(可选参数)
  41. // input:task_statu 任务状态
  42. // input:task_statu_information 状态说明
  43. // input:tast_receiver 接受对象
  44. // input:task_over_time 超时时间
  45. // input:task_save_flag 是否保存
  46. // input:task_save_path 保存路径
  47. // input:p_task_cloud_lock 三维点云的数据保护锁
  48. // output:p_task_pmutexoint_cloud 三维点云容器的智能指针
  49. Error_manager task_init(Task_statu task_statu,
  50. std::string task_statu_information,
  51. void* p_tast_receiver,
  52. std::chrono::milliseconds task_over_time,
  53. bool task_save_flag,
  54. std::string task_save_path,
  55. std::mutex* p_task_cloud_lock,
  56. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map,
  57. bool cloud_aggregation_flag
  58. );
  59. //更新定位信息
  60. Error_manager task_update_locate_information(Locate_information locate_information);
  61. public: //get or set member variable
  62. //获取保存文件的使能标志位
  63. bool get_task_save_flag();
  64. //获取保存路径
  65. std::string get_task_save_path();
  66. //获取 三维点云容器的锁
  67. std::mutex* get_task_cloud_lock();
  68. //获取 三维点云容器的智能指针map
  69. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* get_task_point_cloud_map();
  70. //获取 所有雷达的三维点云是否聚集的标志位
  71. bool get_cloud_aggregation_flag();
  72. //获取测量结果 整车的定位信息
  73. Locate_information get_task_locate_information();
  74. //获取测量结果 整车的定位信息
  75. Locate_information* get_task_locate_information_ex();
  76. //设置保存文件的使能标志位
  77. void set_task_save_flag(bool task_save_flag);
  78. //设置保存路径
  79. void set_task_save_path(std::string task_save_path);
  80. //设置 保存标志位和路径
  81. void set_task_save_flag_and_path(bool task_save_flag, std::string task_save_path);
  82. //设置 三维点云容器的锁
  83. void set_task_cloud_lock(std::mutex* p_task_cloud_lock);
  84. //设置 三维点云容器的智能指针
  85. void set_task_point_cloud(std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map);
  86. //设置 所有雷达的三维点云是否聚集的标志位
  87. void set_cloud_aggregation_flag(bool cloud_aggregation_flag);
  88. //设置测量结果 整车的定位信息
  89. void set_task_locate_information(Locate_information task_locate_information);
  90. protected:
  91. //任务执行中间文件的保存使能标志位,//默认不保存,false
  92. bool m_task_save_flag;
  93. //任务执行中间文件的保存路径,任务输入
  94. std::string m_task_save_path;
  95. //三维点云的数据保护锁,任务输入,
  96. std::mutex* mp_task_cloud_lock;
  97. //三维点云的智能指针map,任务输入//这里只是智能指针,实际内存由任务发送方管理管理,初始化时必须保证内存有效。
  98. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* mp_task_point_cloud_map;
  99. //所有雷达的三维点云是否聚集的标志位,
  100. bool m_cloud_aggregation_flag;
  101. //m_cloud_aggregation_flag==true :: mp_task_point_cloud_map里面只有一个cloud
  102. //m_cloud_aggregation_flag==false:: mp_task_point_cloud_map里面有很多个cloud, 每个雷达的数据都是独立的.
  103. //测量结果 整车的定位信息,注:这个不需要外部导入,构造的时候就会初始化为0;
  104. Locate_information m_task_locate_information;
  105. };
  106. #endif //LOCATE_TASK_H