Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
rplidar_cmd.h
00001 /* 00002 * RPLIDAR SDK for Mbed 00003 * 00004 * Copyright (c) 2009 - 2014 RoboPeak Team 00005 * http://www.robopeak.com 00006 * Copyright (c) 2014 - 2019 Shanghai Slamtec Co., Ltd. 00007 * http://www.slamtec.com 00008 * 00009 */ 00010 /* 00011 * Redistribution and use in source and binary forms, with or without 00012 * modification, are permitted provided that the following conditions are met: 00013 * 00014 * 1. Redistributions of source code must retain the above copyright notice, 00015 * this list of conditions and the following disclaimer. 00016 * 00017 * 2. Redistributions in binary form must reproduce the above copyright notice, 00018 * this list of conditions and the following disclaimer in the documentation 00019 * and/or other materials provided with the distribution. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00022 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 00023 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00024 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 00025 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00026 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00027 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 00028 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00029 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00030 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 00031 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00032 * 00033 */ 00034 00035 00036 #pragma once 00037 #include "mbed.h" 00038 #include "rptypes.h" 00039 #include "rplidar_protocol.h" 00040 00041 // Commands 00042 //----------------------------------------- 00043 00044 // Commands without payload and response 00045 #define RPLIDAR_CMD_STOP 0x25 00046 #define RPLIDAR_CMD_SCAN 0x20 00047 #define RPLIDAR_CMD_FORCE_SCAN 0x21 00048 #define RPLIDAR_CMD_RESET 0x40 00049 00050 00051 // Commands without payload but have response 00052 #define RPLIDAR_CMD_GET_DEVICE_INFO 0x50 00053 #define RPLIDAR_CMD_GET_DEVICE_HEALTH 0x52 00054 #define RPLIDAR_CMD_GET_SAMPLERATE 0x59 //added in fw 1.17 00055 #define RPLIDAR_CMD_HQ_MOTOR_SPEED_CTRL 0xA8 00056 00057 // Commands with payload and have response 00058 #define RPLIDAR_CMD_EXPRESS_SCAN 0x82 //added in fw 1.17 00059 #define RPLIDAR_CMD_HQ_SCAN 0x83 //added in fw 1.24 00060 #define RPLIDAR_CMD_GET_LIDAR_CONF 0x84 //added in fw 1.24 00061 #define RPLIDAR_CMD_SET_LIDAR_CONF 0x85 //added in fw 1.24 00062 00063 //add for A2 to set RPLIDAR motor pwm when using accessory board 00064 #define RPLIDAR_CMD_SET_MOTOR_PWM 0xF0 00065 #define RPLIDAR_CMD_GET_ACC_BOARD_FLAG 0xFF 00066 00067 // Payloads 00068 // ------------------------------------------ 00069 #define RPLIDAR_EXPRESS_SCAN_MODE_NORMAL 0 00070 #define RPLIDAR_EXPRESS_SCAN_MODE_FIXANGLE 0 // won't been supported but keep to prevent build fail 00071 //for express working flag(extending express scan protocol) 00072 #define RPLIDAR_EXPRESS_SCAN_FLAG_BOOST 0x0001 00073 #define RPLIDAR_EXPRESS_SCAN_FLAG_SUNLIGHT_REJECTION 0x0002 00074 00075 //for ultra express working flag 00076 #define RPLIDAR_ULTRAEXPRESS_SCAN_FLAG_STD 0x0001 00077 #define RPLIDAR_ULTRAEXPRESS_SCAN_FLAG_HIGH_SENSITIVITY 0x0002 00078 00079 #define RPLIDAR_HQ_SCAN_FLAG_CCW (0x1<<0) 00080 #define RPLIDAR_HQ_SCAN_FLAG_RAW_ENCODER (0x1<<1) 00081 #define RPLIDAR_HQ_SCAN_FLAG_RAW_DISTANCE (0x1<<2) 00082 00083 typedef struct _rplidar_payload_express_scan_t { 00084 uint8_t working_mode; 00085 uint16_t working_flags; 00086 uint16_t param; 00087 } __attribute__((packed)) rplidar_payload_express_scan_t; 00088 00089 typedef struct _rplidar_payload_hq_scan_t { 00090 uint8_t flag; 00091 uint8_t reserved[32]; 00092 } __attribute__((packed)) rplidar_payload_hq_scan_t; 00093 00094 typedef struct _rplidar_payload_get_scan_conf_t { 00095 uint32_t type; 00096 uint8_t reserved[32]; 00097 } __attribute__((packed)) rplidar_payload_get_scan_conf_t; 00098 #define MAX_MOTOR_PWM 1023 00099 #define DEFAULT_MOTOR_PWM 660 00100 typedef struct _rplidar_payload_motor_pwm_t { 00101 uint16_t pwm_value; 00102 } __attribute__((packed)) rplidar_payload_motor_pwm_t; 00103 00104 typedef struct _rplidar_payload_acc_board_flag_t { 00105 uint32_t reserved; 00106 } __attribute__((packed)) rplidar_payload_acc_board_flag_t; 00107 00108 // Response 00109 // ------------------------------------------ 00110 #define RPLIDAR_ANS_TYPE_DEVINFO 0x4 00111 #define RPLIDAR_ANS_TYPE_DEVHEALTH 0x6 00112 00113 #define RPLIDAR_ANS_TYPE_MEASUREMENT 0x81 00114 // Added in FW ver 1.17 00115 #define RPLIDAR_ANS_TYPE_MEASUREMENT_CAPSULED 0x82 00116 #define RPLIDAR_ANS_TYPE_MEASUREMENT_HQ 0x83 00117 00118 00119 // Added in FW ver 1.17 00120 #define RPLIDAR_ANS_TYPE_SAMPLE_RATE 0x15 00121 //added in FW ver 1.23alpha 00122 #define RPLIDAR_ANS_TYPE_MEASUREMENT_CAPSULED_ULTRA 0x84 00123 //added in FW ver 1.24 00124 #define RPLIDAR_ANS_TYPE_GET_LIDAR_CONF 0x20 00125 #define RPLIDAR_ANS_TYPE_SET_LIDAR_CONF 0x21 00126 #define RPLIDAR_ANS_TYPE_MEASUREMENT_DENSE_CAPSULED 0x85 00127 #define RPLIDAR_ANS_TYPE_ACC_BOARD_FLAG 0xFF 00128 00129 #define RPLIDAR_RESP_ACC_BOARD_FLAG_MOTOR_CTRL_SUPPORT_MASK (0x1) 00130 typedef struct _rplidar_response_acc_board_flag_t { 00131 uint32_t support_flag; 00132 } __attribute__((packed)) rplidar_response_acc_board_flag_t; 00133 00134 00135 #define RPLIDAR_STATUS_OK 0x0 00136 #define RPLIDAR_STATUS_WARNING 0x1 00137 #define RPLIDAR_STATUS_ERROR 0x2 00138 00139 #define RPLIDAR_RESP_MEASUREMENT_SYNCBIT (0x1<<0) 00140 #define RPLIDAR_RESP_MEASUREMENT_QUALITY_SHIFT 2 00141 00142 #define RPLIDAR_RESP_HQ_FLAG_SYNCBIT (0x1<<0) 00143 00144 #define RPLIDAR_RESP_MEASUREMENT_CHECKBIT (0x1<<0) 00145 #define RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT 1 00146 00147 typedef struct _rplidar_response_sample_rate_t { 00148 uint16_t std_sample_duration_us; 00149 uint16_t express_sample_duration_us; 00150 } __attribute__((packed)) rplidar_response_sample_rate_t; 00151 00152 typedef struct _rplidar_response_measurement_node_t { 00153 uint8_t sync_quality; // syncbit:1;syncbit_inverse:1;quality:6; 00154 uint16_t angle_q6_checkbit; // check_bit:1;angle_q6:15; 00155 uint16_t distance_q2; 00156 } __attribute__((packed)) rplidar_response_measurement_node_t; 00157 00158 //[distance_sync flags] 00159 #define RPLIDAR_RESP_MEASUREMENT_EXP_ANGLE_MASK (0x3) 00160 #define RPLIDAR_RESP_MEASUREMENT_EXP_DISTANCE_MASK (0xFC) 00161 00162 typedef struct _rplidar_response_cabin_nodes_t { 00163 uint16_t distance_angle_1; // see [distance_sync flags] 00164 uint16_t distance_angle_2; // see [distance_sync flags] 00165 uint8_t offset_angles_q3; 00166 } __attribute__((packed)) rplidar_response_cabin_nodes_t; 00167 00168 00169 #define RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_1 0xA 00170 #define RPLIDAR_RESP_MEASUREMENT_EXP_SYNC_2 0x5 00171 00172 #define RPLIDAR_RESP_MEASUREMENT_HQ_SYNC 0xA5 00173 00174 #define RPLIDAR_RESP_MEASUREMENT_EXP_SYNCBIT (0x1<<15) 00175 00176 typedef struct _rplidar_response_capsule_measurement_nodes_t { 00177 uint8_t s_checksum_1; // see [s_checksum_1] 00178 uint8_t s_checksum_2; // see [s_checksum_1] 00179 uint16_t start_angle_sync_q6; 00180 rplidar_response_cabin_nodes_t cabins[16]; 00181 } __attribute__((packed)) rplidar_response_capsule_measurement_nodes_t; 00182 00183 typedef struct _rplidar_response_dense_cabin_nodes_t { 00184 uint16_t distance; 00185 } __attribute__((packed)) rplidar_response_dense_cabin_nodes_t; 00186 00187 typedef struct _rplidar_response_dense_capsule_measurement_nodes_t { 00188 uint8_t s_checksum_1; // see [s_checksum_1] 00189 uint8_t s_checksum_2; // see [s_checksum_1] 00190 uint16_t start_angle_sync_q6; 00191 rplidar_response_dense_cabin_nodes_t cabins[40]; 00192 } __attribute__((packed)) rplidar_response_dense_capsule_measurement_nodes_t; 00193 00194 // ext1 : x2 boost mode 00195 00196 #define RPLIDAR_RESP_MEASUREMENT_EXP_ULTRA_MAJOR_BITS 12 00197 #define RPLIDAR_RESP_MEASUREMENT_EXP_ULTRA_PREDICT_BITS 10 00198 00199 typedef struct _rplidar_response_ultra_cabin_nodes_t { 00200 // 31 0 00201 // | predict2 10bit | predict1 10bit | major 12bit | 00202 uint32_t combined_x3; 00203 } __attribute__((packed)) rplidar_response_ultra_cabin_nodes_t; 00204 00205 typedef struct _rplidar_response_ultra_capsule_measurement_nodes_t { 00206 uint8_t s_checksum_1; // see [s_checksum_1] 00207 uint8_t s_checksum_2; // see [s_checksum_1] 00208 uint16_t start_angle_sync_q6; 00209 rplidar_response_ultra_cabin_nodes_t ultra_cabins[32]; 00210 } __attribute__((packed)) rplidar_response_ultra_capsule_measurement_nodes_t; 00211 00212 typedef struct rplidar_response_measurement_node_hq_t { 00213 uint16_t angle_z_q14; 00214 uint32_t dist_mm_q2; 00215 uint8_t quality; 00216 uint8_t flag; 00217 } __attribute__((packed)) rplidar_response_measurement_node_hq_t; 00218 00219 typedef struct _rplidar_response_hq_capsule_measurement_nodes_t{ 00220 uint8_t sync_byte; 00221 uint64_t time_stamp; 00222 rplidar_response_measurement_node_hq_t node_hq[16]; 00223 uint32_t crc32; 00224 }__attribute__((packed)) rplidar_response_hq_capsule_measurement_nodes_t; 00225 00226 00227 # define RPLIDAR_CONF_SCAN_COMMAND_STD 0 00228 # define RPLIDAR_CONF_SCAN_COMMAND_EXPRESS 1 00229 # define RPLIDAR_CONF_SCAN_COMMAND_HQ 2 00230 # define RPLIDAR_CONF_SCAN_COMMAND_BOOST 3 00231 # define RPLIDAR_CONF_SCAN_COMMAND_STABILITY 4 00232 # define RPLIDAR_CONF_SCAN_COMMAND_SENSITIVITY 5 00233 00234 #define RPLIDAR_CONF_ANGLE_RANGE 0x00000000 00235 #define RPLIDAR_CONF_DESIRED_ROT_FREQ 0x00000001 00236 #define RPLIDAR_CONF_SCAN_COMMAND_BITMAP 0x00000002 00237 #define RPLIDAR_CONF_MIN_ROT_FREQ 0x00000004 00238 #define RPLIDAR_CONF_MAX_ROT_FREQ 0x00000005 00239 #define RPLIDAR_CONF_MAX_DISTANCE 0x00000060 00240 00241 #define RPLIDAR_CONF_SCAN_MODE_COUNT 0x00000070 00242 #define RPLIDAR_CONF_SCAN_MODE_US_PER_SAMPLE 0x00000071 00243 #define RPLIDAR_CONF_SCAN_MODE_MAX_DISTANCE 0x00000074 00244 #define RPLIDAR_CONF_SCAN_MODE_ANS_TYPE 0x00000075 00245 #define RPLIDAR_CONF_SCAN_MODE_TYPICAL 0x0000007C 00246 #define RPLIDAR_CONF_SCAN_MODE_NAME 0x0000007F 00247 #define RPLIDAR_EXPRESS_SCAN_STABILITY_BITMAP 4 00248 #define RPLIDAR_EXPRESS_SCAN_SENSITIVITY_BITMAP 5 00249 00250 typedef struct _rplidar_response_get_lidar_conf{ 00251 uint32_t type; 00252 uint8_t payload[0]; 00253 }__attribute__((packed)) rplidar_response_get_lidar_conf_t; 00254 00255 typedef struct _rplidar_response_set_lidar_conf{ 00256 uint32_t result; 00257 }__attribute__((packed)) rplidar_response_set_lidar_conf_t; 00258 00259 00260 typedef struct _rplidar_response_device_info_t { 00261 uint8_t model; 00262 uint16_t firmware_version; 00263 uint8_t hardware_version; 00264 uint8_t serialnum[16]; 00265 } __attribute__((packed)) rplidar_response_device_info_t; 00266 00267 typedef struct _rplidar_response_device_health_t { 00268 uint8_t status; 00269 uint16_t error_code; 00270 } __attribute__((packed)) rplidar_response_device_health_t; 00271 00272 // Definition of the variable bit scale encoding mechanism 00273 #define RPLIDAR_VARBITSCALE_X2_SRC_BIT 9 00274 #define RPLIDAR_VARBITSCALE_X4_SRC_BIT 11 00275 #define RPLIDAR_VARBITSCALE_X8_SRC_BIT 12 00276 #define RPLIDAR_VARBITSCALE_X16_SRC_BIT 14 00277 00278 #define RPLIDAR_VARBITSCALE_X2_DEST_VAL 512 00279 #define RPLIDAR_VARBITSCALE_X4_DEST_VAL 1280 00280 #define RPLIDAR_VARBITSCALE_X8_DEST_VAL 1792 00281 #define RPLIDAR_VARBITSCALE_X16_DEST_VAL 3328 00282 00283 #define RPLIDAR_VARBITSCALE_GET_SRC_MAX_VAL_BY_BITS(_BITS_) \ 00284 ( (((0x1<<(_BITS_)) - RPLIDAR_VARBITSCALE_X16_DEST_VAL)<<4) + \ 00285 ((RPLIDAR_VARBITSCALE_X16_DEST_VAL - RPLIDAR_VARBITSCALE_X8_DEST_VAL)<<3) + \ 00286 ((RPLIDAR_VARBITSCALE_X8_DEST_VAL - RPLIDAR_VARBITSCALE_X4_DEST_VAL)<<2) + \ 00287 ((RPLIDAR_VARBITSCALE_X4_DEST_VAL - RPLIDAR_VARBITSCALE_X2_DEST_VAL)<<1) + \ 00288 RPLIDAR_VARBITSCALE_X2_DEST_VAL - 1)
Generated on Wed Jul 27 2022 05:22:14 by
1.7.2