velodyne_manager.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * @Description: velodyne多线雷达管理类
  3. * @Author: yct
  4. * @Date: 2021-07-23 16:37:33
  5. * @LastEditTime: 2021-07-27 16:04:00
  6. * @LastEditors: yct
  7. */
  8. #ifndef VELODYNE_MANAGER_HH
  9. #define VELODYNE_MANAGER_HH
  10. #include <thread>
  11. #include <map>
  12. #include "../tool/singleton.h"
  13. #include "../error_code/error_code.h"
  14. class Velodyne_manager : public Singleton<Velodyne_manager>
  15. {
  16. // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
  17. friend class Singleton<Velodyne_manager>;
  18. //万集管理任务超时时间1000ms,
  19. #define VELODYNE_MANAGER_EXECUTE_TIMEOUT_MS 1000
  20. //万集配置参数的默认路径
  21. #define VELODYNE_MANAGER_PARAMETER_PATH "../setting/velodyne_manager.prototxt"
  22. //雷达管理的状态
  23. enum Velodyne_manager_status
  24. {
  25. E_UNKNOWN = 0, //未知
  26. E_READY = 1, //准备,待机
  27. E_BUSY = 2, //工作正忙
  28. E_ISSUED_SCAN = 3, //下发任务, 获取点云
  29. E_WAIT_SCAN = 4, //等待任务, 扫描点云
  30. E_ISSUED_DETECT = 5, //下发任务, 算法预测
  31. E_WAIT_DETECT = 6, //等待任务, 算法预测
  32. E_FAULT = 10, //故障
  33. };
  34. public:
  35. // 必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
  36. Velodyne_manager(const Velodyne_manager &) = delete;
  37. Velodyne_manager &operator=(const Velodyne_manager &) = delete;
  38. ~Velodyne_manager() = default;
  39. //初始化 雷达 管理模块。如下三选一
  40. Error_manager velodyne_manager_init();
  41. //初始化 雷达 管理模块。从文件读取
  42. Error_manager velodyne_manager_init_from_protobuf(std::string prototxt_path);
  43. //初始化 雷达 管理模块。从protobuf读取
  44. Error_manager velodyne_manager_init_from_protobuf(wj::wjManagerParams& velodyne_parameters);
  45. // 反初始化
  46. Error_manager Velodyne_manager_uninit();
  47. private:
  48. // 父类的构造函数必须保护,子类的构造函数必须私有。
  49. Velodyne_manager() = default;
  50. };
  51. #endif // !VELODYNE_MANAGER_HH