wanji_716N_device.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * @Author: yct 18202736439@163.com
  3. * @Date: 2022-09-22 18:00:51
  4. * @LastEditors: yct 18202736439@163.com
  5. * @LastEditTime: 2022-09-25 22:10:59
  6. * @FilePath: /puai_wj_2021/wanji_lidar/wanji_716N_device.h
  7. * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  8. */
  9. #ifndef WJ_716N_ENCAPSULATION_HH
  10. #define WJ_716N_ENCAPSULATION_HH
  11. #include <chrono>
  12. #include <mutex>
  13. #include <thread>
  14. #include <atomic>
  15. #include <string>
  16. #include <unistd.h>
  17. #include "glog/logging.h"
  18. #include "async_client.h"
  19. #include "wj_716N_lidar_protocol.h"
  20. class Wanji_716N_lidar_device
  21. {
  22. public:
  23. //万集设备身状态
  24. enum Wanji_716N_device_status
  25. {
  26. E_UNKNOWN = 0, //未知
  27. E_READY = 1, //正常待机
  28. E_DISCONNECT = 2, //断连
  29. E_BUSY = 3, //工作正忙
  30. E_FAULT =10, //故障
  31. };
  32. public:
  33. // 无参构造函数
  34. Wanji_716N_lidar_device();
  35. // 析构函数
  36. ~Wanji_716N_lidar_device();
  37. // 初始化
  38. Error_manager init(std::string ip,int port,
  39. Point2D_tool::Polar_coordinates_box t_polar_coordinates_box,
  40. Point2D_tool::Point2D_box t_point2D_box,
  41. Point2D_tool::Point2D_transform t_point2D_transform);
  42. //反初始化
  43. Error_manager uninit();
  44. //检查雷达状态,是否正常运行
  45. Error_manager check_status();
  46. //判断是否为待机,如果已经准备好,则可以执行任务。
  47. bool is_ready();
  48. //外部调用获取新的点云, 获取指令时间之后的点云, 如果没有就会等待点云刷新, 直到超时, (内置while)
  49. Error_manager get_new_cloud_and_wait(std::mutex* p_mutex, pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud,
  50. std::chrono::system_clock::time_point command_time, int timeout_ms=1500);
  51. //外部调用获取当前点云, 获取指令时间之后的点云, 如果没有就会报错, 不会等待
  52. Error_manager get_current_cloud(std::mutex* p_mutex, pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud,
  53. std::chrono::system_clock::time_point command_time);
  54. //外部调用获取最新的点云, 获取指令时间往前一个周期内的点云, 如果没有就会报错, 不会等待
  55. Error_manager get_last_cloud(std::mutex* p_mutex, pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud,
  56. std::chrono::system_clock::time_point command_time);
  57. //外部调用获取最新的点云, 获取指令时间往前一个周期内的点云, 如果没有就会报错, 不会等待
  58. //注:函数内部不加锁, 由外部统一加锁.
  59. Error_manager get_last_cloud(pcl::PointCloud<pcl::PointXYZ>::Ptr p_cloud,
  60. std::chrono::system_clock::time_point command_time);
  61. public:
  62. Wanji_716N_device_status get_status();
  63. protected:
  64. void updata_status();
  65. // //mp_laser_manager_thread 线程执行函数,
  66. // //thread_work 内部线程负责获取点云结果
  67. // void execute_thread_fun();
  68. protected:
  69. //状态
  70. Wanji_716N_device_status m_wanji_lidar_device_status; //万集设备身状态
  71. //子模块
  72. Async_Client m_async_client; //异步客户端, 负责雷达通信, 接受雷达数据
  73. wj_716N_lidar_protocol m_protocol; // 万集雷达协议
  74. //中间缓存
  75. Thread_safe_queue<Binary_buf*> m_communication_data_queue; //通信数据队列
  76. //任务执行线程
  77. std::thread* mp_execute_thread; //执行的线程指针,内存由本类管理
  78. Thread_condition m_execute_condition; //执行的条件变量
  79. };
  80. #endif // !WJ_716N_ENCAPSULATION_HH