locate_manager_task.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. //
  2. // Created by zx on 2019/12/30.
  3. //
  4. #include "locate_manager_task.h"
  5. #include <glog/logging.h>
  6. Locate_manager_task::Locate_manager_task()
  7. {
  8. //构造函数锁定任务类型为 LOCATE_MANGER_TASK,后续不允许更改
  9. m_task_type = LOCATE_MANGER_TASK;
  10. m_task_statu = TASK_CREATED;
  11. m_task_statu_information.clear();
  12. m_task_error_manager.error_manager_clear_all();
  13. m_task_save_flag = false;//默认不保存,false
  14. m_task_save_path.clear();
  15. mp_task_point_cloud_map = NULL;
  16. mp_task_cloud_lock = NULL;
  17. m_task_locate_information.locate_x = 0; //整车的中心点x值
  18. m_task_locate_information.locate_y = 0; //整车的中心点y值
  19. m_task_locate_information.locate_angle = 0; //整车的旋转角
  20. m_task_locate_information.locate_length = 0; //整车的长度
  21. m_task_locate_information.locate_width = 0; //整车的宽度, 也是左右轮的距离
  22. m_task_locate_information.locate_height = 0; //整车的高度
  23. m_task_locate_information.locate_wheel_base = 0; //整车的轮距, 前后轮的距离
  24. m_task_locate_information.locate_wheel_width = 0; //整车的轮距, 左右轮的距离
  25. m_task_locate_information.locate_correct = false; //整车的校准标记位
  26. }
  27. Locate_manager_task::~Locate_manager_task()
  28. {
  29. }
  30. //初始化任务单,必须初始化之后才可以使用,(必选参数)
  31. // input:p_task_cloud_lock 三维点云的数据保护锁
  32. // output:p_task_point_cloud 三维点云容器的智能指针
  33. Error_manager Locate_manager_task::task_init(std::mutex* p_task_cloud_lock,
  34. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map)
  35. {
  36. if(p_task_point_cloud_map == NULL)
  37. {
  38. return Error_manager(POINTER_IS_NULL, MINOR_ERROR,
  39. "Laser_task::task_init p_task_point_cloud is null");
  40. }
  41. if(p_task_cloud_lock==NULL)
  42. {
  43. return Error_manager(POINTER_IS_NULL,MINOR_ERROR,
  44. "Laser_manager_task::task_init p_task_cloud_lock is null");
  45. }
  46. m_task_statu = TASK_CREATED;
  47. m_task_statu_information.clear();
  48. m_task_error_manager.error_manager_clear_all();
  49. m_task_save_flag = false;
  50. m_task_save_path.clear();
  51. mp_task_cloud_lock=p_task_cloud_lock;
  52. mp_task_point_cloud_map = p_task_point_cloud_map;
  53. m_task_locate_information.locate_x = 0; //整车的中心点x值
  54. m_task_locate_information.locate_y = 0; //整车的中心点y值
  55. m_task_locate_information.locate_angle = 0; //整车的旋转角
  56. m_task_locate_information.locate_length = 0; //整车的长度
  57. m_task_locate_information.locate_width = 0; //整车的宽度, 也是左右轮的距离
  58. m_task_locate_information.locate_height = 0; //整车的高度
  59. m_task_locate_information.locate_wheel_base = 0; //整车的轮距, 前后轮的距离
  60. m_task_locate_information.locate_wheel_width = 0; //整车的轮距, 左右轮的距离
  61. m_task_locate_information.locate_correct = false; //整车的校准标记位
  62. return Error_code::SUCCESS;
  63. }
  64. //初始化任务单,必须初始化之后才可以使用,(可选参数)
  65. // input:task_statu 任务状态
  66. // input:task_statu_information 状态说明
  67. // input:tast_receiver 接受对象
  68. // input:task_over_time 超时时间
  69. // input:task_save_flag 是否保存
  70. // input:task_save_path 保存路径
  71. // input:p_task_cloud_lock 三维点云的数据保护锁
  72. // output:p_task_pmutexoint_cloud 三维点云容器的智能指针
  73. Error_manager Locate_manager_task::task_init(Task_statu task_statu,
  74. std::string task_statu_information,
  75. void* p_tast_receiver,
  76. std::chrono::milliseconds task_over_time,
  77. bool task_save_flag,
  78. std::string task_save_path,
  79. std::mutex* p_task_cloud_lock,
  80. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map,
  81. bool cloud_aggregation_flag
  82. )
  83. {
  84. if(p_task_point_cloud_map == NULL)
  85. {
  86. return Error_manager(POINTER_IS_NULL, MINOR_ERROR,
  87. "Laser_task::task_init p_task_point_cloud is null");
  88. }
  89. if(p_task_cloud_lock==NULL)
  90. {
  91. return Error_manager(POINTER_IS_NULL,MINOR_ERROR,
  92. "Laser_manager_task::task_init p_task_cloud_lock is null");
  93. }
  94. m_task_statu = task_statu;
  95. m_task_statu_information = task_statu_information;
  96. mp_tast_receiver = p_tast_receiver;
  97. m_task_over_time = task_over_time;
  98. m_task_error_manager.error_manager_clear_all();
  99. m_task_save_flag = task_save_flag;
  100. m_task_save_path = task_save_path;
  101. mp_task_cloud_lock=p_task_cloud_lock;
  102. mp_task_point_cloud_map = p_task_point_cloud_map;
  103. m_cloud_aggregation_flag = cloud_aggregation_flag;
  104. m_task_locate_information.locate_x = 0; //整车的中心点x值
  105. m_task_locate_information.locate_y = 0; //整车的中心点y值
  106. m_task_locate_information.locate_angle = 0; //整车的旋转角
  107. m_task_locate_information.locate_length = 0; //整车的长度
  108. m_task_locate_information.locate_width = 0; //整车的宽度, 也是左右轮的距离
  109. m_task_locate_information.locate_height = 0; //整车的高度
  110. m_task_locate_information.locate_wheel_base = 0; //整车的轮距, 前后轮的距离
  111. m_task_locate_information.locate_wheel_width = 0; //整车的轮距, 左右轮的距离
  112. m_task_locate_information.locate_correct = false; //整车的校准标记位
  113. return Error_code::SUCCESS;
  114. }
  115. //更新定位信息
  116. Error_manager Locate_manager_task::task_update_locate_information(Locate_information locate_information)
  117. {
  118. set_task_locate_information(locate_information);
  119. return Error_code::SUCCESS;
  120. }
  121. //获取保存文件的使能标志位
  122. bool Locate_manager_task::get_task_save_flag()
  123. {
  124. return m_task_save_flag;
  125. }
  126. //获取保存路径
  127. std::string Locate_manager_task::get_task_save_path()
  128. {
  129. return m_task_save_path;
  130. }
  131. //获取 三维点云容器的锁
  132. std::mutex* Locate_manager_task::get_task_cloud_lock()
  133. {
  134. return mp_task_cloud_lock;
  135. }
  136. //获取 三维点云容器的智能指针map
  137. std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* Locate_manager_task::get_task_point_cloud_map()
  138. {
  139. return mp_task_point_cloud_map;
  140. }
  141. //获取 所有雷达的三维点云是否聚集的标志位
  142. bool Locate_manager_task::get_cloud_aggregation_flag()
  143. {
  144. return m_cloud_aggregation_flag;
  145. }
  146. //获取测量结果 整车的定位信息
  147. Locate_information Locate_manager_task::get_task_locate_information()
  148. {
  149. return m_task_locate_information;
  150. }
  151. //获取测量结果 整车的定位信息
  152. Locate_information* Locate_manager_task::get_task_locate_information_ex()
  153. {
  154. return &m_task_locate_information;
  155. }
  156. //设置保存文件的使能标志位
  157. void Locate_manager_task::set_task_save_flag(bool task_save_flag)
  158. {
  159. m_task_save_flag = task_save_flag;
  160. }
  161. //设置保存路径
  162. void Locate_manager_task::set_task_save_path(std::string task_save_path)
  163. {
  164. m_task_save_path = task_save_path;
  165. }
  166. //设置 保存标志位和路径
  167. void Locate_manager_task::set_task_save_flag_and_path(bool task_save_flag, std::string task_save_path)
  168. {
  169. m_task_save_flag = task_save_flag;
  170. m_task_save_path = task_save_path;
  171. }
  172. //设置 三维点云容器的锁
  173. void Locate_manager_task::set_task_cloud_lock(std::mutex* mp_task_cloud_lock)
  174. {
  175. mp_task_cloud_lock = mp_task_cloud_lock;
  176. }
  177. //设置 三维点云容器的智能指针
  178. void Locate_manager_task::set_task_point_cloud(std::map<int,pcl::PointCloud<pcl::PointXYZ>::Ptr>* p_task_point_cloud_map)
  179. {
  180. mp_task_point_cloud_map = p_task_point_cloud_map;
  181. }
  182. //设置 所有雷达的三维点云是否聚集的标志位
  183. void Locate_manager_task::set_cloud_aggregation_flag(bool cloud_aggregation_flag)
  184. {
  185. m_cloud_aggregation_flag = cloud_aggregation_flag;
  186. }
  187. //设置测量结果 整车的定位信息
  188. void Locate_manager_task::set_task_locate_information(Locate_information task_locate_information)
  189. {
  190. m_task_locate_information = task_locate_information;
  191. }