YDLIDAR X2 SDK  V1.4.1
ydlidar_driver.h
1 #ifndef YDLIDAR_DRIVER_H
2 #define YDLIDAR_DRIVER_H
3 #include <stdlib.h>
4 #include <map>
5 #include "serial.h"
6 #include "locker.h"
7 #include "thread.h"
8 #include "ydlidar_protocol.h"
9 
10 #if !defined(__cplusplus)
11 #ifndef __cplusplus
12 #error "The YDLIDAR SDK requires a C++ compiler to be built"
13 #endif
14 #endif
15 
16 using namespace std;
17 using namespace serial;
18 
19 namespace ydlidar {
20 
22  public:
27  YDlidarDriver();
28 
33  virtual ~YDlidarDriver();
34 
47  result_t connect(const char *port_path, uint32_t baudrate);
48 
52  void disconnect();
53 
59  static std::string getSDKVersion();
60 
66  static std::map<std::string, std::string> lidarPortList();
67 
74  bool isConnected() const;
75 
80  bool isScanning() const;
81 
86  uint32_t getPointTime() const;
87 
94  void setAutoReconnect(const bool &enable);
95 
96 
106  result_t startScan(bool force = false, uint32_t timeout = DEFAULT_TIMEOUT) ;
107 
114  result_t stop();
115 
116 
127  result_t grabScanData(node_info *nodebuffer, size_t &count,
128  uint32_t timeout = DEFAULT_TIMEOUT) ;
129 
130 
141  result_t ascendScanData(node_info *nodebuffer, size_t count);
142 
149  result_t startMotor();
150 
157  result_t stopMotor();
158 
162  void flush();
163 
164  protected:
165 
170  result_t createThread();
171 
172 
182  result_t startAutoScan(bool force = false, uint32_t timeout = DEFAULT_TIMEOUT) ;
183 
184 
190  result_t waitPackage(node_info *node, uint32_t timeout = DEFAULT_TIMEOUT);
191 
202  result_t waitScanData(node_info *nodebuffer, size_t &count,
203  uint32_t timeout = DEFAULT_TIMEOUT);
204 
208  int cacheScanData();
209 
219  result_t sendCommand(uint8_t cmd, const void *payload = NULL,
220  size_t payloadsize = 0);
221 
232  result_t waitResponseHeader(lidar_ans_header *header,
233  uint32_t timeout = DEFAULT_TIMEOUT);
234 
246  result_t waitForData(size_t data_count, uint32_t timeout = DEFAULT_TIMEOUT,
247  size_t *returned_size = NULL);
248 
257  result_t getData(uint8_t *data, size_t size);
258 
267  result_t sendData(const uint8_t *data, size_t size);
268 
272  void disableDataGrabbing();
273 
277  void setDTR();
278 
282  void clearDTR();
283 
284 
285  public:
290 
291 
292  enum {
293  DEFAULT_TIMEOUT = 2000,
294  DEFAULT_HEART_BEAT = 1000,
295  MAX_SCAN_NODES = 2048,
296  DEFAULT_TIMEOUT_COUNT = 3,
297  };
298  enum {
299  YDLIDAR_F4 = 1,
300  YDLIDAR_T1 = 2,
301  YDLIDAR_F2 = 3,
302  YDLIDAR_S4 = 4,
303  YDLIDAR_G4 = 5,
304  YDLIDAR_X4 = 6,
305  YDLIDAR_F4PRO = 6,
306  YDLIDAR_G4C = 9,
308  };
309  node_info scan_node_buf[2048];
315 
316  private:
317  serial::Serial *_serial;
318  node_packages packages;
319 
320  float IntervalSampleAngle;
321  float IntervalSampleAngle_LastPackage;
322  int PackageSampleBytes;
323  bool isSupportMotorCtrl;
324  bool CheckSumResult;
325  uint32_t m_baudrate;
326  uint32_t m_pointTime;
327  uint32_t trans_delay;
328  uint16_t package_Sample_Index;
329  uint16_t FirstSampleAngle;
330  uint16_t LastSampleAngle;
331  uint16_t CheckSum;
332  uint16_t CheckSumCal;
333  uint16_t SampleNumlAndCTCal;
334  uint16_t LastSampleAngleCal;
335  uint16_t Valu8Tou16;
336 
337  std::string serial_port;
338 
339 };
340 }
341 
342 #endif // YDLIDAR_DRIVER_H
size_t scan_node_count
激光点数
Definition: ydlidar_driver.h:310
Definition: v8stdint.h:199
Event _dataEvent
数据同步事件
Definition: ydlidar_driver.h:311
Definition: locker.h:167
Thread _thread
线程id
Definition: ydlidar_driver.h:314
Definition: ydlidar_protocol.h:97
Locker _lock
线程锁
Definition: ydlidar_driver.h:312
Locker _serial_lock
串口锁
Definition: ydlidar_driver.h:313
Definition: thread.h:22
Definition: serial.h:11
bool m_isConnected
串口连接状体
Definition: ydlidar_driver.h:286
bool isAutoconnting
是否正在自动连接中
Definition: ydlidar_driver.h:289
bool isAutoReconnect
异常自动从新连接
Definition: ydlidar_driver.h:288
Definition: ydlidar_driver.h:21
bool m_isScanning
扫图状态
Definition: ydlidar_driver.h:287
Definition: ydlidar_protocol.h:15
Definition: serial.h:107
Definition: locker.h:20
Definition: ydlidar_protocol.h:39