Sick511FileLaser.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*************************
  2. sick 511 �״� �ļ����ݽ���
  3. *************************/
  4. #ifndef __SICK_511_LASER_FILE__HH
  5. #define __SICK_511_LASER_FILE__HH
  6. #include "Laser.h"
  7. #include <fstream>
  8. class CSick511FileLaser :
  9. public Laser_base
  10. {
  11. public:
  12. CSick511FileLaser(int id, Laser_proto::laser_parameter laser_param);
  13. virtual ~CSick511FileLaser();
  14. //雷达链接设备,为3个线程添加线程执行函数。
  15. virtual Error_manager connect_laser();
  16. //雷达断开链接,释放3个线程
  17. virtual Error_manager disconnect_laser();
  18. //对外的接口函数,负责接受并处理任务单,
  19. //input:p_laser_task 雷达任务单,基类的指针,指向子类的实例,(多态)
  20. //注:这个函数为虚函数,实际的处理任务的代码由子类重载并实现。
  21. virtual Error_manager execute_task(Task_Base* p_laser_task);
  22. //检查雷达状态,是否正常运行
  23. virtual Error_manager check_laser();
  24. //雷达的启动接口函数, 让雷达进行扫描,一般需要子类重载,不同的雷达开始方式不同。
  25. virtual Error_manager start_scan();
  26. //雷达的停止接口函数, 让雷达停止扫描,一般需要子类重载,不同的雷达结束方式不同。
  27. virtual Error_manager stop_scan();
  28. //结束任务单,stop之后,要检查线程状态和数据结果,然后才能 end_task
  29. virtual Error_manager end_task();
  30. protected:
  31. //接受二进制消息的功能函数,每次只接受一个CBinaryData
  32. // 纯虚函数,必须由子类重载,
  33. virtual bool receive_buf_to_queue(Binary_buf& data);
  34. //将二进制消息转化为三维点云的功能函数,每次只转化一个CBinaryData,
  35. // 纯虚函数,必须由子类重载,
  36. virtual Buf_type transform_buf_to_points(Binary_buf* pData, std::vector<CPoint3D>& points);
  37. protected:
  38. int FindHead(char* buf, int b_len);
  39. int FindTail(char* buf, int b_len);
  40. protected:
  41. virtual bool GetData(Binary_buf* pData, std::vector<float>& distance,
  42. float& freq, float& start_angle);
  43. long Str0x2Long(const char* data, int len);
  44. protected:
  45. std::ifstream m_stream_read;
  46. std::string m_file;
  47. bool m_start_read;
  48. std::mutex m_mutex;
  49. };
  50. #endif