rplidar_driver.cpp
Go to the documentation of this file.
1 /*
2  * Slamtec LIDAR SDK
3  *
4  * Copyright (c) 2014 - 2020 Shanghai Slamtec Co., Ltd.
5  * http://www.slamtec.com
6  *
7  */
8  /*
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
29  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  *
31  */
32 
33 #include "sdkcommon.h"
34 #include "hal/abs_rxtx.h"
35 #include "hal/thread.h"
36 #include "hal/types.h"
37 #include "hal/assert.h"
38 #include "hal/locker.h"
39 #include "hal/socket.h"
40 #include "hal/event.h"
41 #include "rplidar_driver.h"
42 #include "sl_crc.h"
43 #include <algorithm>
44 
45 namespace rp { namespace standalone{ namespace rplidar {
46 
48 
49  RPlidarDriver::RPlidarDriver(sl_u32 channelType)
50  :_channelType(channelType)
51  {
52  }
53 
55 
57  {
58  //_channelType = drivertype;
59  return new RPlidarDriver(drivertype);
60  }
61 
63  {
64  delete drv;
65  }
66 
67  u_result RPlidarDriver::connect(const char *path, _u32 portOrBaud, _u32 flag)
68  {
69  switch (_channelType)
70  {
72  _channel = (*createSerialPortChannel(path, portOrBaud));
73  break;
74  case CHANNEL_TYPE_TCP:
75  _channel = *createTcpChannel(path, portOrBaud);
76  break;
77  case CHANNEL_TYPE_UDP:
78  _channel = *createUdpChannel(path, portOrBaud);
79  break;
80  }
81  if (!(bool)_channel) return SL_RESULT_OPERATION_FAIL;
82 
84 
85  if (!(bool)_lidarDrv) return SL_RESULT_OPERATION_FAIL;
86 
88  return ans;
89  }
90 
92  {
93  (_lidarDrv)->disconnect();
94  }
95 
97  {
98  return (_lidarDrv)->isConnected();
99  }
100 
102  {
103  return (_lidarDrv)->reset();
104  }
105 
106  u_result RPlidarDriver::getAllSupportedScanModes(std::vector<RplidarScanMode>& outModes, _u32 timeoutInMs)
107  {
108  return (_lidarDrv)->getAllSupportedScanModes(outModes, timeoutInMs);
109  }
110 
112  {
113  return (_lidarDrv)->getTypicalScanMode(outMode, timeoutInMs);
114  }
115 
116  u_result RPlidarDriver::startScan(bool force, bool useTypicalScan, _u32 options, RplidarScanMode* outUsedScanMode)
117  {
118  return (_lidarDrv)->startScan(force, useTypicalScan, options, outUsedScanMode);
119  }
120 
121  u_result RPlidarDriver::startScanExpress(bool force, _u16 scanMode, _u32 options, RplidarScanMode* outUsedScanMode, _u32 timeout)
122  {
123  return (_lidarDrv)->startScanExpress(force, scanMode, options, outUsedScanMode, timeout);
124  }
125 
127  {
128  return (_lidarDrv)->getHealth(health, timeout);
129  }
130 
132  {
133  return (_lidarDrv)->getDeviceInfo(info, timeout);
134  }
135 
137  {
138  return (_lidarDrv)->setMotorSpeed(pwm);
139  }
140 
142  {
143  MotorCtrlSupport motorSupport;
144  u_result ans = (_lidarDrv)->checkMotorCtrlSupport(motorSupport, timeout);
145  if (motorSupport == MotorCtrlSupportNone)
146  support = false;
147  return ans;
148  }
149 
151  {
152  return (_lidarDrv)->setLidarIpConf(conf, timeout);
153  }
154 
156  {
157  return (_lidarDrv)->getLidarIpConf(conf, timeout);
158  }
159 
160  u_result RPlidarDriver::getDeviceMacAddr(_u8* macAddrArray, _u32 timeoutInMs)
161  {
162  return (_lidarDrv)->getDeviceMacAddr(macAddrArray, timeoutInMs);
163  }
164 
166  {
167  return (_lidarDrv)->stop(timeout);
168  }
169 
171  {
172  return (_lidarDrv)->grabScanDataHq(nodebuffer, count, timeout);
173  }
174 
176  {
177  return (_lidarDrv)->ascendScanData(nodebuffer, count);
178  }
179 
181  {
183  }
184 
186  {
187  return (_lidarDrv)->getScanDataWithIntervalHq(nodebuffer, count);
188  }
189 
191  {
192  return (_lidarDrv)->setMotorSpeed(DEFAULT_MOTOR_SPEED);
193  }
195  {
196  return (_lidarDrv)->setMotorSpeed(0);
197  }
198 
199 }}}
_u16
uint16_t _u16
Definition: rptypes.h:66
sdkcommon.h
u_result
uint32_t u_result
Definition: rptypes.h:100
sl_lidar_response_measurement_node_hq_t
Definition: sl_lidar_cmd.h:272
rp::standalone::rplidar::RPlidarDriver::disconnect
void disconnect()
Disconnect with the RPLIDAR and close the serial port.
Definition: rplidar_driver.cpp:91
types.h
rp::standalone::rplidar::RPlidarDriver::getAllSupportedScanModes
u_result getAllSupportedScanModes(std::vector< RplidarScanMode > &outModes, _u32 timeoutInMs=DEFAULT_TIMEOUT)
Get all scan modes that supported by lidar.
Definition: rplidar_driver.cpp:106
rp::standalone::rplidar::RPlidarDriver::_channelType
sl_u32 _channelType
Definition: rplidar_driver.h:238
rp::standalone::rplidar::RPlidarDriver::getTypicalScanMode
u_result getTypicalScanMode(_u16 &outMode, _u32 timeoutInMs=DEFAULT_TIMEOUT)
Get typical scan mode of lidar.
Definition: rplidar_driver.cpp:111
rp::standalone::rplidar::RPlidarDriver::stopMotor
u_result stopMotor()
Stop RPLIDAR's motor when using accessory board.
Definition: rplidar_driver.cpp:194
rp::standalone::rplidar::RPlidarDriver::getHealth
u_result getHealth(rplidar_response_device_health_t &health, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:126
rp::standalone::rplidar::RPlidarDriver::_channel
IChannel * _channel
Definition: rplidar_driver.h:239
rp::standalone::rplidar::RPlidarDriver::getLidarIpConf
u_result getLidarIpConf(rplidar_ip_conf_t &conf, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:155
assert.h
rp::standalone::rplidar::RPlidarDriver::CreateDriver
static RPlidarDriver * CreateDriver(_u32 drivertype=CHANNEL_TYPE_SERIALPORT)
Definition: rplidar_driver.cpp:56
_u8
uint8_t _u8
Definition: rptypes.h:63
sl::CHANNEL_TYPE_UDP
@ CHANNEL_TYPE_UDP
Definition: sl_lidar_driver.h:286
sl::LidarScanMode
Definition: sl_lidar_driver.h:73
rp::standalone::rplidar::RPlidarDriver::setLidarIpConf
u_result setLidarIpConf(const rplidar_ip_conf_t &conf, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:150
rp::standalone::rplidar::RPlidarDriver::connect
u_result connect(const char *path, _u32 portOrBaud, _u32 flag=0)
Definition: rplidar_driver.cpp:67
sl::MotorCtrlSupport
MotorCtrlSupport
Definition: sl_lidar_driver.h:276
rp::standalone::rplidar::RPlidarDriver::startMotor
u_result startMotor()
Start RPLIDAR's motor when using accessory board.
Definition: rplidar_driver.cpp:190
rplidar_response_measurement_node_t
sl_lidar_response_measurement_node_t rplidar_response_measurement_node_t
Definition: rplidar_cmd.h:136
rp::standalone::rplidar::RPlidarDriver::getDeviceMacAddr
u_result getDeviceMacAddr(_u8 *macAddrArray, _u32 timeoutInMs=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:160
rp::standalone::rplidar::RPlidarDriver::_lidarDrv
ILidarDriver * _lidarDrv
Definition: rplidar_driver.h:240
rp::standalone::rplidar::RPlidarDriver::grabScanDataHq
u_result grabScanDataHq(rplidar_response_measurement_node_hq_t *nodebuffer, size_t &count, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:170
locker.h
sl_crc.h
rp::standalone::rplidar::RPlidarDriver::~RPlidarDriver
virtual ~RPlidarDriver()
Definition: rplidar_driver.cpp:54
sl::createSerialPortChannel
Result< IChannel * > createSerialPortChannel(const std::string &device, int baudrate)
Definition: sl_serial_channel.cpp:141
rp::standalone::rplidar::RPlidarDriver::getScanDataWithIntervalHq
u_result getScanDataWithIntervalHq(rplidar_response_measurement_node_hq_t *nodebuffer, size_t &count)
Definition: rplidar_driver.cpp:185
rplidar_ip_conf_t
sl_lidar_ip_conf_t rplidar_ip_conf_t
Definition: rplidar_cmd.h:197
rp::standalone::rplidar::RPlidarDriver::checkMotorCtrlSupport
u_result checkMotorCtrlSupport(bool &support, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:141
rplidar_driver.h
rp::standalone::rplidar::RPlidarDriver::stop
u_result stop(_u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:165
sl::createTcpChannel
Result< IChannel * > createTcpChannel(const std::string &ip, int port)
Definition: sl_tcp_channel.cpp:120
event.h
sl::MotorCtrlSupportNone
@ MotorCtrlSupportNone
Definition: sl_lidar_driver.h:278
sl::CHANNEL_TYPE_SERIALPORT
@ CHANNEL_TYPE_SERIALPORT
Definition: sl_lidar_driver.h:284
rp::standalone::rplidar::RPlidarDriver::reset
u_result reset(_u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:101
rplidar_response_device_info_t
sl_lidar_response_device_info_t rplidar_response_device_info_t
Definition: rplidar_cmd.h:195
rp::standalone::rplidar::RPlidarDriver::ascendScanData
u_result ascendScanData(rplidar_response_measurement_node_hq_t *nodebuffer, size_t count)
Definition: rplidar_driver.cpp:175
abs_rxtx.h
sl::CHANNEL_TYPE_TCP
@ CHANNEL_TYPE_TCP
Definition: sl_lidar_driver.h:285
RESULT_OPERATION_NOT_SUPPORT
#define RESULT_OPERATION_NOT_SUPPORT
Definition: rptypes.h:109
flag
sl_u8 flag
Definition: sl_lidar_cmd.h:2
sl::createUdpChannel
Result< IChannel * > createUdpChannel(const std::string &ip, int port)
Definition: sl_udp_channel.cpp:125
rp::standalone::rplidar::RPlidarDriver::isConnected
bool isConnected()
Returns TRUE when the connection has been established.
Definition: rplidar_driver.cpp:96
SL_RESULT_OPERATION_FAIL
#define SL_RESULT_OPERATION_FAIL
Definition: sl_types.h:75
rp::standalone::rplidar::RPlidarDriver::setMotorPWM
u_result setMotorPWM(_u16 pwm)
Definition: rplidar_driver.cpp:136
rp::standalone::rplidar::RPlidarDriver::startScan
u_result startScan(bool force, bool useTypicalScan, _u32 options=0, RplidarScanMode *outUsedScanMode=NULL)
Definition: rplidar_driver.cpp:116
socket.h
rp::standalone::rplidar::RPlidarDriver::getScanDataWithInterval
u_result getScanDataWithInterval(rplidar_response_measurement_node_t *nodebuffer, size_t &count)
Definition: rplidar_driver.cpp:180
drv
ILidarDriver * drv
Definition: node.cpp:54
sl_result
uint32_t sl_result
Definition: sl_types.h:69
rp
Definition: rplidar_driver.h:43
rp::standalone::rplidar::RPlidarDriver::DisposeDriver
static void DisposeDriver(RPlidarDriver *drv)
Definition: rplidar_driver.cpp:62
sl::createLidarDriver
Result< ILidarDriver * > createLidarDriver()
Definition: sl_lidar_driver.cpp:1698
_u32
uint32_t _u32
Definition: rptypes.h:69
rp::standalone::rplidar::RPlidarDriver::startScanExpress
u_result startScanExpress(bool force, _u16 scanMode, _u32 options=0, RplidarScanMode *outUsedScanMode=NULL, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:121
thread.h
rplidar_response_device_health_t
sl_lidar_response_device_health_t rplidar_response_device_health_t
Definition: rplidar_cmd.h:196
rp::standalone::rplidar::RPlidarDriver::RPlidarDriver
RPlidarDriver()
Definition: rplidar_driver.cpp:47
rp::standalone::rplidar::RPlidarDriver
Definition: rplidar_driver.h:53
DEFAULT_MOTOR_SPEED
#define DEFAULT_MOTOR_SPEED
Definition: sl_lidar_cmd.h:116
rp::standalone::rplidar::RPlidarDriver::getDeviceInfo
u_result getDeviceInfo(rplidar_response_device_info_t &info, _u32 timeout=DEFAULT_TIMEOUT)
Definition: rplidar_driver.cpp:131


rplidar_ros
Author(s):
autogenerated on Fri Aug 2 2024 08:42:14