velodyne_manager.cpp 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * @Description:
  3. * @Author: yct
  4. * @Date: 2021-07-23 16:39:04
  5. * @LastEditTime: 2021-07-28 16:29:13
  6. * @LastEditors: yct
  7. */
  8. #include "velodyne_manager.h"
  9. #include "../tool/proto_tool.h"
  10. //初始化 雷达 管理模块。如下三选一
  11. Error_manager Velodyne_manager::velodyne_manager_init()
  12. {
  13. return velodyne_manager_init_from_protobuf(VELODYNE_MANAGER_PARAMETER_PATH);
  14. }
  15. //初始化 雷达 管理模块。从文件读取
  16. Error_manager Velodyne_manager::velodyne_manager_init_from_protobuf(std::string prototxt_path)
  17. {
  18. velodyne::velodyneManagerParams t_velo_params;
  19. if (!proto_tool::read_proto_param(prototxt_path, t_velo_params))
  20. {
  21. return Error_manager(WJ_MANAGER_READ_PROTOBUF_ERROR, MINOR_ERROR, "velodyne_manager read_proto_param failed");
  22. }
  23. return velodyne_manager_init_from_protobuf(t_velo_params);
  24. }
  25. //初始化 雷达 管理模块。从protobuf读取
  26. Error_manager Velodyne_manager::velodyne_manager_init_from_protobuf(velodyne::velodyneManagerParams & velodyne_parameters)
  27. {
  28. LOG(INFO) << " ---velodyne_manager_init_from_protobuf run--- "<< this;
  29. Error_manager t_error;
  30. if ( m_velodyne_manager_status != E_UNKNOWN)
  31. {
  32. return Error_manager(Error_code::WJ_MANAGER_INIT_ERROR, Error_level::MINOR_ERROR,
  33. " velodyne_manager::velodyne_manager_init_from_protobuf init repeat error ");
  34. }
  35. //创建雷达设备
  36. int t_velodyne_lidar_size = velodyne_parameters.velodyne_lidars_size();
  37. for(int i=0;i<t_velodyne_lidar_size;++i)
  38. {
  39. Velodyne_lidar_device* p_velodyne_lidar_device(new Velodyne_lidar_device);
  40. t_error = p_velodyne_lidar_device->init(velodyne_parameters.velodyne_lidars(i));
  41. // LOG(WARNING) << wanji_parameters.wj_lidar(i).DebugString();
  42. if ( t_error != Error_code::SUCCESS )
  43. {
  44. delete(p_velodyne_lidar_device);
  45. return t_error;
  46. }
  47. m_velodyne_lidar_device_map[i] = (p_velodyne_lidar_device);
  48. }
  49. //创建预测算法
  50. int t_ground_region_size = velodyne_parameters.region_size;
  51. for(int i=0;i<t_ground_region_size;++i)
  52. {
  53. Region_worker* p_region_worker(new Region_worker);
  54. Point2D_tool::Point2D_box t_point2d_box;
  55. t_point2d_box.x_min = wanji_parameters.regions(i).minx();
  56. t_point2d_box.x_max = wanji_parameters.regions(i).maxx();
  57. t_point2d_box.y_min = wanji_parameters.regions(i).miny();
  58. t_point2d_box.y_max = wanji_parameters.regions(i).maxy();
  59. // changed by yct, 传入终端index,仅普爱使用
  60. t_error = p_region_worker->init(t_point2d_box, &m_cloud_collection_mutex, mp_cloud_collection, i);
  61. if ( t_error != Error_code::SUCCESS )
  62. {
  63. delete(p_region_worker);
  64. return t_error;
  65. }
  66. m_region_worker_map[i] = p_region_worker;
  67. }
  68. //启动 收集点云的线程。默认 。
  69. m_collect_cloud_condition.reset(false, false, false);
  70. mp_collect_cloud_thread = new std::thread(&Wanji_manager::collect_cloud_thread_fun, this);
  71. //启动 执行的线程。默认 。
  72. m_execute_condition.reset(false, false, false);
  73. mp_execute_thread = new std::thread(&Wanji_manager::execute_thread_fun, this);
  74. m_wanji_manager_status = E_READY;
  75. return Error_code::SUCCESS;
  76. }
  77. // 反初始化
  78. Error_manager Velodyne_manager::Velodyne_manager_uninit()
  79. {
  80. }