1 #ifndef YDLIDAR_DRIVER_H 2 #define YDLIDAR_DRIVER_H 9 #if !defined(__cplusplus) 11 #error "The YDLIDAR SDK requires a C++ compiler to be built" 14 #if !defined(_countof) 15 #define _countof(_Array) (int)(sizeof(_Array) / sizeof(_Array[0])) 18 #define LIDAR_CMD_STOP 0x65 19 #define LIDAR_CMD_SCAN 0x60 20 #define LIDAR_CMD_FORCE_SCAN 0x61 21 #define LIDAR_CMD_RESET 0x80 22 #define LIDAR_CMD_FORCE_STOP 0x00 23 #define LIDAR_CMD_GET_EAI 0x55 24 #define LIDAR_CMD_GET_DEVICE_INFO 0x90 25 #define LIDAR_CMD_GET_DEVICE_HEALTH 0x92 26 #define LIDAR_ANS_TYPE_DEVINFO 0x4 27 #define LIDAR_ANS_TYPE_DEVHEALTH 0x6 28 #define LIDAR_CMD_SYNC_BYTE 0xA5 29 #define LIDAR_CMDFLAG_HAS_PAYLOAD 0x80 30 #define LIDAR_ANS_SYNC_BYTE1 0xA5 31 #define LIDAR_ANS_SYNC_BYTE2 0x5A 32 #define LIDAR_ANS_TYPE_MEASUREMENT 0x81 33 #define LIDAR_RESP_MEASUREMENT_SYNCBIT (0x1<<0) 34 #define LIDAR_RESP_MEASUREMENT_QUALITY_SHIFT 2 35 #define LIDAR_RESP_MEASUREMENT_CHECKBIT (0x1<<0) 36 #define LIDAR_RESP_MEASUREMENT_ANGLE_SHIFT 1 38 #define LIDAR_CMD_RUN_POSITIVE 0x06 39 #define LIDAR_CMD_RUN_INVERSION 0x07 40 #define LIDAR_CMD_SET_AIMSPEED_ADDMIC 0x09 41 #define LIDAR_CMD_SET_AIMSPEED_DISMIC 0x0A 42 #define LIDAR_CMD_SET_AIMSPEED_ADD 0x0B 43 #define LIDAR_CMD_SET_AIMSPEED_DIS 0x0C 44 #define LIDAR_CMD_GET_AIMSPEED 0x0D 46 #define LIDAR_CMD_SET_SAMPLING_RATE 0xD0 47 #define LIDAR_CMD_GET_SAMPLING_RATE 0xD1 48 #define LIDAR_STATUS_OK 0x0 49 #define LIDAR_STATUS_WARNING 0x1 50 #define LIDAR_STATUS_ERROR 0x2 52 #define LIDAR_CMD_ENABLE_LOW_POWER 0x01 53 #define LIDAR_CMD_DISABLE_LOW_POWER 0x02 54 #define LIDAR_CMD_STATE_MODEL_MOTOR 0x05 55 #define LIDAR_CMD_ENABLE_CONST_FREQ 0x0E 56 #define LIDAR_CMD_DISABLE_CONST_FREQ 0x0F 58 #define LIDAR_CMD_SAVE_SET_EXPOSURE 0x94 59 #define LIDAR_CMD_SET_LOW_EXPOSURE 0x95 60 #define LIDAR_CMD_ADD_EXPOSURE 0x96 61 #define LIDAR_CMD_DIS_EXPOSURE 0x97 63 #define LIDAR_CMD_SET_HEART_BEAT 0xD9 64 #define LIDAR_CMD_SET_SETPOINTSFORONERINGFLAG 0xae 66 #define PackageSampleMaxLngth 0x100 72 #define Node_Default_Quality (10<<2) 74 #define Node_NotSync 2 75 #define PackagePaidBytes 10 84 uint16_t angle_q6_checkbit;
87 } __attribute__((packed)) ;
90 uint8_t PakageSampleQuality;
91 uint16_t PakageSampleDistance;
92 }__attribute__((packed));
95 uint16_t package_Head;
97 uint8_t nowPackageNum;
98 uint16_t packageFirstSampleAngle;
99 uint16_t packageLastSampleAngle;
102 } __attribute__((packed)) ;
105 uint16_t package_Head;
107 uint8_t nowPackageNum;
108 uint16_t packageFirstSampleAngle;
109 uint16_t packageLastSampleAngle;
111 uint16_t packageSampleDistance[PackageSampleMaxLngth];
112 } __attribute__((packed)) ;
119 uint8_t serialnum[16];
120 } __attribute__((packed)) ;
125 } __attribute__((packed)) ;
129 } __attribute__((packed)) ;
133 } __attribute__((packed)) ;
137 } __attribute__((packed)) ;
141 } __attribute__((packed)) ;
145 } __attribute__((packed));
149 } __attribute__((packed)) ;
153 } __attribute__((packed)) ;
160 } __attribute__((packed)) ;
168 } __attribute__((packed));
223 static void initDriver(){
248 result_t connect(
const char * port_path, uint32_t baudrate);
260 static std::string getSDKVersion();
268 const bool isscanning()
const;
276 const bool isconnected()
const;
286 void setIntensities(
const bool isintensities);
294 const bool getHeartBeat()
const;
303 void setHeartBeat(
const bool enable);
312 result_t sendHeartBeat();
320 result_t getHealth(
device_health & health, uint32_t timeout = DEFAULT_TIMEOUT);
330 result_t getDeviceInfo(
device_info & info, uint32_t timeout = DEFAULT_TIMEOUT);
341 result_t startScan(
bool force =
false, uint32_t timeout = DEFAULT_TIMEOUT) ;
362 result_t grabScanData(
node_info * nodebuffer,
size_t & count, uint32_t timeout = DEFAULT_TIMEOUT) ;
375 result_t ascendScanData(
node_info * nodebuffer,
size_t count);
385 result_t reset(uint32_t timeout = DEFAULT_TIMEOUT);
393 result_t startMotor();
401 result_t stopMotor();
413 result_t getScanFrequency(
scan_frequency & frequency, uint32_t timeout = DEFAULT_TIMEOUT);
424 result_t setScanFrequencyAdd(
scan_frequency & frequency, uint32_t timeout = DEFAULT_TIMEOUT);
435 result_t setScanFrequencyDis(
scan_frequency & frequency, uint32_t timeout = DEFAULT_TIMEOUT);
446 result_t setScanFrequencyAddMic(
scan_frequency & frequency, uint32_t timeout = DEFAULT_TIMEOUT);
457 result_t setScanFrequencyDisMic(
scan_frequency & frequency, uint32_t timeout = DEFAULT_TIMEOUT);
468 result_t getSamplingRate(
sampling_rate & rate, uint32_t timeout = DEFAULT_TIMEOUT);
479 result_t setSamplingRate(
sampling_rate & rate, uint32_t timeout = DEFAULT_TIMEOUT);
490 result_t setRotationPositive(
scan_rotation & rotation, uint32_t timeout = DEFAULT_TIMEOUT);
501 result_t setRotationInversion(
scan_rotation & rotation, uint32_t timeout = DEFAULT_TIMEOUT);
513 result_t enableLowerPower(
function_state & state, uint32_t timeout = DEFAULT_TIMEOUT);
525 result_t disableLowerPower(
function_state & state, uint32_t timeout = DEFAULT_TIMEOUT);
536 result_t getMotorState(
function_state & state, uint32_t timeout = DEFAULT_TIMEOUT);
547 result_t enableConstFreq(
function_state & state, uint32_t timeout = DEFAULT_TIMEOUT);
558 result_t disableConstFreq(
function_state & state, uint32_t timeout = DEFAULT_TIMEOUT);
570 result_t setSaveLowExposure(
scan_exposure& low_exposure, uint32_t timeout = DEFAULT_TIMEOUT);
581 result_t setLowExposure(
scan_exposure& low_exposure, uint32_t timeout = DEFAULT_TIMEOUT);
592 result_t setLowExposureAdd(
scan_exposure & exposure, uint32_t timeout = DEFAULT_TIMEOUT);
603 result_t setLowExposurerDis(
scan_exposure & exposure, uint32_t timeout = DEFAULT_TIMEOUT);
614 result_t setScanHeartbeat(
scan_heart_beat& beat,uint32_t timeout = DEFAULT_TIMEOUT);
625 result_t setPointsForOneRingFlag(
scan_points& points,uint32_t timeout = DEFAULT_TIMEOUT);
634 void simpleScanData(std::vector<scanDot> * scan_data ,
node_info *buffer,
size_t count);
653 result_t createThread();
660 result_t waitPackage(
node_info * node, uint32_t timeout = DEFAULT_TIMEOUT);
672 result_t waitScanData(
node_info * nodebuffer,
size_t & count, uint32_t timeout = DEFAULT_TIMEOUT);
688 result_t sendCommand(uint8_t cmd,
const void * payload = NULL,
size_t payloadsize = 0);
700 result_t waitResponseHeader(
lidar_ans_header * header, uint32_t timeout = DEFAULT_TIMEOUT);
713 result_t waitForData(
size_t data_count,uint32_t timeout = DEFAULT_TIMEOUT,
size_t * returned_size = NULL);
723 result_t getData(uint8_t * data,
size_t size);
733 result_t sendData(
const uint8_t * data,
size_t size);
739 void disableDataGrabbing();
758 DEFAULT_TIMEOUT = 2000,
759 DEFAULT_HEART_BEAT = 1000,
760 MAX_SCAN_NODES = 2048,
780 int PackageSampleBytes;
787 bool isSupportMotorCtrl;
790 uint32_t m_pointTime;
791 uint32_t trans_delay;
796 uint16_t package_Sample_Index;
797 float IntervalSampleAngle;
798 float IntervalSampleAngle_LastPackage;
799 uint16_t FirstSampleAngle;
800 uint16_t LastSampleAngle;
803 uint16_t CheckSunCal;
804 uint16_t SampleNumlAndCTCal;
805 uint16_t LastSampleAngleCal;
812 #endif // YDLIDAR_DRIVER_H float ang_increment
Scan resolution [rad].
Definition: ydlidar_driver.h:184
uint8_t rate
采样频率
Definition: ydlidar_driver.h:128
std::atomic< bool > isScanning
扫图状态
Definition: ydlidar_driver.h:754
size_t scan_node_count
激光点数
Definition: ydlidar_driver.h:774
Definition: ydlidar_driver.h:215
float min_angle
Start angle for the laser scan [rad]. 0 is forward and angles are measured clockwise when viewing YDL...
Definition: ydlidar_driver.h:180
std::atomic< bool > isHeartbeat
掉电保护状态
Definition: ydlidar_driver.h:755
uint8_t status
健康状体
Definition: ydlidar_driver.h:123
Event _dataEvent
数据同步事件
Definition: ydlidar_driver.h:775
Definition: ydlidar_driver.h:155
Definition: ydlidar_driver.h:122
Thread _thread
线程id
Definition: ydlidar_driver.h:777
uint16_t error_code
错误代码
Definition: ydlidar_driver.h:124
float range_res
Range Resolution [m].
Definition: ydlidar_driver.h:194
Definition: ydlidar_driver.h:170
A struct for returning configuration from the YDLIDAR.
Definition: ydlidar_driver.h:178
Locker _lock
线程锁
Definition: ydlidar_driver.h:776
A struct for returning laser readings from the YDLIDAR.
Definition: ydlidar_driver.h:199
uint64_t self_time_stamp
Self reported time stamp in nanoseconds.
Definition: ydlidar_driver.h:205
std::atomic< bool > isConnected
串口连接状体
Definition: ydlidar_driver.h:753
uint64_t system_time_stamp
System time when first range was measured in nanoseconds.
Definition: ydlidar_driver.h:207
Definition: ydlidar_driver.h:94
Definition: ydlidar_driver.h:143
std::vector< float > ranges
Array of ranges.
Definition: ydlidar_driver.h:201
uint8_t enable
掉电保护状态
Definition: ydlidar_driver.h:144
uint8_t exposure
低光功率模式
Definition: ydlidar_driver.h:140
Definition: ydlidar_driver.h:115
Definition: ydlidar_driver.h:127
std::vector< float > intensities
Array of intensities.
Definition: ydlidar_driver.h:203
float time_increment
Scan resoltuion [s].
Definition: ydlidar_driver.h:186
float scan_time
Time between scans.
Definition: ydlidar_driver.h:188
Definition: ydlidar_driver.h:217
float max_angle
Stop angle for the laser scan [rad]. 0 is forward and angles are measured clockwise when viewing YDLI...
Definition: ydlidar_driver.h:182
float max_range
Maximum range [m].
Definition: ydlidar_driver.h:192
uint16_t firmware_version
固件版本号
Definition: ydlidar_driver.h:117
Definition: ydlidar_driver.h:139
uint8_t model
雷达型号
Definition: ydlidar_driver.h:116
uint8_t hardware_version
硬件版本号
Definition: ydlidar_driver.h:118
Definition: ydlidar_driver.h:147
float min_range
Minimum range [m].
Definition: ydlidar_driver.h:190
Definition: ydlidar_driver.h:135
uint32_t frequency
扫描频率
Definition: ydlidar_driver.h:132
LaserConfig config
Configuration of scan.
Definition: ydlidar_driver.h:209
Definition: ydlidar_driver.h:82
Definition: ydlidar_driver.h:131
Definition: ydlidar_driver.h:89
Definition: ydlidar_driver.h:151
Definition: ydlidar_driver.h:104