sl_lidar_driver_impl.h
Go to the documentation of this file.
1 /*
2  * Slamtec LIDAR SDK
3  *
4  * Copyright (c) 2020 Shanghai Slamtec Co., Ltd.
5  * http://www.slamtec.com
6  */
7  /*
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice,
12  * this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  */
31 
32 #pragma once
33 #include "sl_lidar_driver.h"
34 
35 namespace sl {
37  {
38  public:
39  enum {
41  };
42 
43  enum
44  {
47  };
48 
49  enum {
52  };
53  public:
55  :_channel(NULL)
56  , _isConnected(false)
57  , _isScanning(false)
63  {}
64 
65  sl_result connect(IChannel* channel);
66  void disconnect();
67  bool isConnected();
68  sl_result reset(sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
69  sl_result getAllSupportedScanModes(std::vector<LidarScanMode>& outModes, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
70  sl_result getTypicalScanMode(sl_u16& outMode, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
71  sl_result startScan(bool force, bool useTypicalScan, sl_u32 options = 0, LidarScanMode* outUsedScanMode = nullptr);
72  sl_result startScanNormal(bool force, sl_u32 timeout = DEFAULT_TIMEOUT);
73  sl_result startScanExpress(bool force, sl_u16 scanMode, sl_u32 options = 0, LidarScanMode* outUsedScanMode = nullptr, sl_u32 timeout = DEFAULT_TIMEOUT);
74  sl_result stop(sl_u32 timeout = DEFAULT_TIMEOUT);
75  DEPRECATED(sl_result grabScanData(sl_lidar_response_measurement_node_t * nodebuffer, size_t& count, sl_u32 timeout = DEFAULT_TIMEOUT));
76  sl_result grabScanDataHq(sl_lidar_response_measurement_node_hq_t* nodebuffer, size_t& count, sl_u32 timeout = DEFAULT_TIMEOUT);
77  sl_result getDeviceInfo(sl_lidar_response_device_info_t& info, sl_u32 timeout = DEFAULT_TIMEOUT);
79  sl_result getFrequency(const LidarScanMode& scanMode, const sl_lidar_response_measurement_node_hq_t* nodes, size_t count, float& frequency);
80  sl_result setLidarIpConf(const sl_lidar_ip_conf_t& conf, sl_u32 timeout);
81  sl_result getHealth(sl_lidar_response_device_health_t& health, sl_u32 timeout = DEFAULT_TIMEOUT);
82  sl_result getDeviceMacAddr(sl_u8* macAddrArray, sl_u32 timeoutInMs);
83  sl_result ascendScanData(sl_lidar_response_measurement_node_t * nodebuffer, size_t count);
86  sl_result setMotorSpeed(sl_u16 speed = DEFAULT_MOTOR_PWM);//
87  sl_result negotiateSerialBaudRate(sl_u32 requiredBaudRate, sl_u32* baudRateDetected = NULL);
88 
89  protected:
91  sl_result checkSupportConfigCommands(bool& outSupport, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
92  sl_result getScanModeCount(sl_u16& modeCount, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
93  sl_result setLidarConf(sl_u32 type, const void* payload, size_t payloadSize, sl_u32 timeout);
94  sl_result getLidarConf(sl_u32 type, std::vector<sl_u8> &outputBuf, const std::vector<sl_u8> &reserve = std::vector<sl_u8>(), sl_u32 timeout = DEFAULT_TIMEOUT);
95  sl_result getLidarSampleDuration(float& sampleDurationRes, sl_u16 scanModeID, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
96  sl_result getMaxDistance(float &maxDistance, sl_u16 scanModeID, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
97  sl_result getScanModeAnsType(sl_u8 &ansType, sl_u16 scanModeID, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
98  sl_result getScanModeName(char* modeName, sl_u16 scanModeID, sl_u32 timeoutInMs = DEFAULT_TIMEOUT);
99  //DEPRECATED(sl_result getSampleDuration_uS(sl_lidar_response_sample_rate_t & rateInfo, sl_u32 timeout = DEFAULT_TIMEOUT));
100  //DEPRECATED (sl_result checkExpressScanSupported(bool & support, sl_u32 timeout = DEFAULT_TIMEOUT));
101  //DEPRECATED(sl_result getFrequency(bool inExpressMode, size_t count, float & frequency, bool & is4kmode));
102  private:
103  sl_result _sendCommand(sl_u16 cmd, const void * payload = NULL, size_t payloadsize = 0 );
105  template <typename T>
106  sl_result _waitResponse(T &payload ,sl_u8 ansType, _u32 timeout = DEFAULT_TIMEOUT);
107  void _disableDataGrabbing();
108  sl_result _waitNode(sl_lidar_response_measurement_node_t * node, sl_u32 timeout = DEFAULT_TIMEOUT);
109  sl_result _waitScanData(sl_lidar_response_measurement_node_t * nodebuffer, size_t & count, sl_u32 timeout = DEFAULT_TIMEOUT);
111  void _ultraCapsuleToNormal(const sl_lidar_response_ultra_capsule_measurement_nodes_t & capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount);
112  sl_result _waitCapsuledNode(sl_lidar_response_capsule_measurement_nodes_t & node, sl_u32 timeout = DEFAULT_TIMEOUT);
113  void _capsuleToNormal(const sl_lidar_response_capsule_measurement_nodes_t & capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount);
114  void _dense_capsuleToNormal(const sl_lidar_response_capsule_measurement_nodes_t & capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount);
116  sl_result _waitHqNode(sl_lidar_response_hq_capsule_measurement_nodes_t & node, sl_u32 timeout = DEFAULT_TIMEOUT);
117  void _HqToNormal(const sl_lidar_response_hq_capsule_measurement_nodes_t & node_hq, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount);
119  sl_result _waitUltraCapsuledNode(sl_lidar_response_ultra_capsule_measurement_nodes_t & node, sl_u32 timeout = DEFAULT_TIMEOUT);
122 
123  private:
128 
134 
138 
141 
142  sl_lidar_response_capsule_measurement_nodes_t _cached_previous_capsuledata;
143  sl_lidar_response_dense_capsule_measurement_nodes_t _cached_previous_dense_capsuledata;
144  sl_lidar_response_ultra_capsule_measurement_nodes_t _cached_previous_ultracapsuledata;
145  sl_lidar_response_hq_capsule_measurement_nodes_t _cached_previous_Hqdata;
148  };
149 
150 }
void _capsuleToNormal(const sl_lidar_response_capsule_measurement_nodes_t &capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount)
size_t _cached_scan_node_hq_count_for_interval_retrieve
sl_result setLidarConf(sl_u32 type, const void *payload, size_t payloadSize, sl_u32 timeout)
sl_result _waitHqNode(sl_lidar_response_hq_capsule_measurement_nodes_t &node, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result checkSupportConfigCommands(bool &outSupport, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result getDeviceInfo(sl_lidar_response_device_info_t &info, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result _cacheScanData()
sl_result getTypicalScanMode(sl_u16 &outMode, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
Get typical scan mode of lidar.
Definition: sl_crc.h:38
sl_result getLidarConf(sl_u32 type, std::vector< sl_u8 > &outputBuf, const std::vector< sl_u8 > &reserve=std::vector< sl_u8 >(), sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result getDeviceMacAddr(sl_u8 *macAddrArray, sl_u32 timeoutInMs)
sl_result _waitResponseHeader(sl_lidar_ans_header_t *header, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result getScanModeName(char *modeName, sl_u16 scanModeID, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result grabScanDataHq(sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &count, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_lidar_response_measurement_node_hq_t _cached_scan_node_hq_buf_for_interval_retrieve[8192]
sl_result startScanNormal(bool force, sl_u32 timeout=DEFAULT_TIMEOUT)
void _ultraCapsuleToNormal(const sl_lidar_response_ultra_capsule_measurement_nodes_t &capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount)
sl_result reset(sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result _waitScanData(sl_lidar_response_measurement_node_t *nodebuffer, size_t &count, sl_u32 timeout=DEFAULT_TIMEOUT)
DEPRECATED(sl_result grabScanData(sl_lidar_response_measurement_node_t *nodebuffer, size_t &count, sl_u32 timeout=DEFAULT_TIMEOUT))
sl_result setMotorSpeed(sl_u16 speed=DEFAULT_MOTOR_PWM)
sl_result _cacheHqScanData()
sl_result stop(sl_u32 timeout=DEFAULT_TIMEOUT)
sl_lidar_response_dense_capsule_measurement_nodes_t _cached_previous_dense_capsuledata
sl_result _waitCapsuledNode(sl_lidar_response_capsule_measurement_nodes_t &node, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_lidar_response_hq_capsule_measurement_nodes_t _cached_previous_Hqdata
void _HqToNormal(const sl_lidar_response_hq_capsule_measurement_nodes_t &node_hq, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount)
MotorCtrlSupport
rp::hal::Thread _cachethread
sl_result _cacheUltraCapsuledScanData()
sl_u32 type
Definition: sl_lidar_cmd.h:43
sl_result _sendCommand(sl_u16 cmd, const void *payload=NULL, size_t payloadsize=0)
sl_result negotiateSerialBaudRate(sl_u32 requiredBaudRate, sl_u32 *baudRateDetected=NULL)
sl_result _waitNode(sl_lidar_response_measurement_node_t *node, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result getLidarSampleDuration(float &sampleDurationRes, sl_u16 scanModeID, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result startScanExpress(bool force, sl_u16 scanMode, sl_u32 options=0, LidarScanMode *outUsedScanMode=nullptr, sl_u32 timeout=DEFAULT_TIMEOUT)
void _disableDataGrabbing()
sl_result _waitResponse(T &payload, sl_u8 ansType, _u32 timeout=DEFAULT_TIMEOUT)
sl_lidar_response_measurement_node_hq_t node_hq[96]
Definition: sl_lidar_cmd.h:45
sl_lidar_response_measurement_node_hq_t _cached_scan_node_hq_buf[8192]
sl_lidar_response_capsule_measurement_nodes_t _cached_previous_capsuledata
sl_result getScanModeCount(sl_u16 &modeCount, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result getAllSupportedScanModes(std::vector< LidarScanMode > &outModes, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
Get all scan modes that supported by lidar.
sl_result getMaxDistance(float &maxDistance, sl_u16 scanModeID, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_u8 payload[0]
Definition: sl_lidar_cmd.h:44
sl_result getScanDataWithIntervalHq(sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &count)
sl_result getScanModeAnsType(sl_u8 &ansType, sl_u16 scanModeID, sl_u32 timeoutInMs=DEFAULT_TIMEOUT)
sl_result connect(IChannel *channel)
sl_result checkMotorCtrlSupport(MotorCtrlSupport &support, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result getFrequency(const LidarScanMode &scanMode, const sl_lidar_response_measurement_node_hq_t *nodes, size_t count, float &frequency)
sl_result ascendScanData(sl_lidar_response_measurement_node_t *nodebuffer, size_t count)
uint32_t _u32
Definition: rptypes.h:69
sl_lidar_response_ultra_capsule_measurement_nodes_t _cached_previous_ultracapsuledata
MotorCtrlSupport _isSupportingMotorCtrl
sl_result getHealth(sl_lidar_response_device_health_t &health, sl_u32 timeout=DEFAULT_TIMEOUT)
void _dense_capsuleToNormal(const sl_lidar_response_capsule_measurement_nodes_t &capsule, sl_lidar_response_measurement_node_hq_t *nodebuffer, size_t &nodeCount)
sl_result _waitUltraCapsuledNode(sl_lidar_response_ultra_capsule_measurement_nodes_t &node, sl_u32 timeout=DEFAULT_TIMEOUT)
sl_result startScan(bool force, bool useTypicalScan, sl_u32 options=0, LidarScanMode *outUsedScanMode=nullptr)
const std::string header
uint32_t sl_result
Definition: sl_types.h:69
sl_result startMotor()
sl_result setLidarIpConf(const sl_lidar_ip_conf_t &conf, sl_u32 timeout)
sl_result _clearRxDataCache()
sl_result _cacheCapsuledScanData()


rplidar_ros
Author(s):
autogenerated on Tue Jun 13 2023 02:07:38