lidar code for ROC318

Dependencies:   BufferedSerial mbed

Committer:
BenRJG
Date:
Fri Oct 19 17:42:05 2018 +0000
Revision:
0:0791d48ee421
Imported lidar code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BenRJG 0:0791d48ee421 1 /*
BenRJG 0:0791d48ee421 2 * Copyright (c) 2014, RoboPeak
BenRJG 0:0791d48ee421 3 * All rights reserved.
BenRJG 0:0791d48ee421 4 *
BenRJG 0:0791d48ee421 5 * Redistribution and use in source and binary forms, with or without
BenRJG 0:0791d48ee421 6 * modification, are permitted provided that the following conditions are met:
BenRJG 0:0791d48ee421 7 *
BenRJG 0:0791d48ee421 8 * 1. Redistributions of source code must retain the above copyright notice,
BenRJG 0:0791d48ee421 9 * this list of conditions and the following disclaimer.
BenRJG 0:0791d48ee421 10 *
BenRJG 0:0791d48ee421 11 * 2. Redistributions in binary form must reproduce the above copyright notice,
BenRJG 0:0791d48ee421 12 * this list of conditions and the following disclaimer in the documentation
BenRJG 0:0791d48ee421 13 * and/or other materials provided with the distribution.
BenRJG 0:0791d48ee421 14 *
BenRJG 0:0791d48ee421 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
BenRJG 0:0791d48ee421 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
BenRJG 0:0791d48ee421 17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
BenRJG 0:0791d48ee421 18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
BenRJG 0:0791d48ee421 19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
BenRJG 0:0791d48ee421 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
BenRJG 0:0791d48ee421 21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
BenRJG 0:0791d48ee421 22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
BenRJG 0:0791d48ee421 23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
BenRJG 0:0791d48ee421 24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
BenRJG 0:0791d48ee421 25 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
BenRJG 0:0791d48ee421 26 *
BenRJG 0:0791d48ee421 27 */
BenRJG 0:0791d48ee421 28 /*
BenRJG 0:0791d48ee421 29 * RoboPeak LIDAR System
BenRJG 0:0791d48ee421 30 * Data Packet IO packet definition for RP-LIDAR
BenRJG 0:0791d48ee421 31 *
BenRJG 0:0791d48ee421 32 * Copyright 2009 - 2014 RoboPeak Team
BenRJG 0:0791d48ee421 33 * http://www.robopeak.com
BenRJG 0:0791d48ee421 34 *
BenRJG 0:0791d48ee421 35 */
BenRJG 0:0791d48ee421 36
BenRJG 0:0791d48ee421 37
BenRJG 0:0791d48ee421 38 #pragma once
BenRJG 0:0791d48ee421 39 #include "rptypes.h"
BenRJG 0:0791d48ee421 40 #include "rplidar_protocol.h"
BenRJG 0:0791d48ee421 41
BenRJG 0:0791d48ee421 42 // Commands
BenRJG 0:0791d48ee421 43 //-----------------------------------------
BenRJG 0:0791d48ee421 44
BenRJG 0:0791d48ee421 45 // Commands without payload and response
BenRJG 0:0791d48ee421 46 #define RPLIDAR_CMD_STOP 0x25
BenRJG 0:0791d48ee421 47 #define RPLIDAR_CMD_SCAN 0x20
BenRJG 0:0791d48ee421 48 #define RPLIDAR_CMD_FORCE_SCAN 0x21
BenRJG 0:0791d48ee421 49 #define RPLIDAR_CMD_RESET 0x40
BenRJG 0:0791d48ee421 50
BenRJG 0:0791d48ee421 51
BenRJG 0:0791d48ee421 52 // Commands without payload but have response
BenRJG 0:0791d48ee421 53 #define RPLIDAR_CMD_GET_DEVICE_INFO 0x50
BenRJG 0:0791d48ee421 54 #define RPLIDAR_CMD_GET_DEVICE_HEALTH 0x52
BenRJG 0:0791d48ee421 55
BenRJG 0:0791d48ee421 56 #if defined(_WIN32)
BenRJG 0:0791d48ee421 57 #pragma pack(1)
BenRJG 0:0791d48ee421 58 #endif
BenRJG 0:0791d48ee421 59
BenRJG 0:0791d48ee421 60
BenRJG 0:0791d48ee421 61 // Response
BenRJG 0:0791d48ee421 62 // ------------------------------------------
BenRJG 0:0791d48ee421 63 #define RPLIDAR_ANS_TYPE_MEASUREMENT 0x81
BenRJG 0:0791d48ee421 64
BenRJG 0:0791d48ee421 65 #define RPLIDAR_ANS_TYPE_DEVINFO 0x4
BenRJG 0:0791d48ee421 66 #define RPLIDAR_ANS_TYPE_DEVHEALTH 0x6
BenRJG 0:0791d48ee421 67
BenRJG 0:0791d48ee421 68
BenRJG 0:0791d48ee421 69 #define RPLIDAR_STATUS_OK 0x0
BenRJG 0:0791d48ee421 70 #define RPLIDAR_STATUS_WARNING 0x1
BenRJG 0:0791d48ee421 71 #define RPLIDAR_STATUS_ERROR 0x2
BenRJG 0:0791d48ee421 72
BenRJG 0:0791d48ee421 73 #define RPLIDAR_RESP_MEASUREMENT_SYNCBIT (0x1<<0)
BenRJG 0:0791d48ee421 74 #define RPLIDAR_RESP_MEASUREMENT_QUALITY_SHIFT 2
BenRJG 0:0791d48ee421 75 #define RPLIDAR_RESP_MEASUREMENT_CHECKBIT (0x1<<0)
BenRJG 0:0791d48ee421 76 #define RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT 1
BenRJG 0:0791d48ee421 77
BenRJG 0:0791d48ee421 78 typedef struct _rplidar_response_measurement_node_t {
BenRJG 0:0791d48ee421 79 _u8 sync_quality; // syncbit:1;syncbit_inverse:1;quality:6;
BenRJG 0:0791d48ee421 80 _u16 angle_q6_checkbit; // check_bit:1;angle_q6:15;
BenRJG 0:0791d48ee421 81 _u16 distance_q2;
BenRJG 0:0791d48ee421 82 } __attribute__((packed)) rplidar_response_measurement_node_t;
BenRJG 0:0791d48ee421 83
BenRJG 0:0791d48ee421 84 typedef struct _rplidar_response_device_info_t {
BenRJG 0:0791d48ee421 85 _u8 model;
BenRJG 0:0791d48ee421 86 _u16 firmware_version;
BenRJG 0:0791d48ee421 87 _u8 hardware_version;
BenRJG 0:0791d48ee421 88 _u8 serialnum[16];
BenRJG 0:0791d48ee421 89 } __attribute__((packed)) rplidar_response_device_info_t;
BenRJG 0:0791d48ee421 90
BenRJG 0:0791d48ee421 91 typedef struct _rplidar_response_device_health_t {
BenRJG 0:0791d48ee421 92 _u8 status;
BenRJG 0:0791d48ee421 93 _u16 error_code;
BenRJG 0:0791d48ee421 94 } __attribute__((packed)) rplidar_response_device_health_t;
BenRJG 0:0791d48ee421 95
BenRJG 0:0791d48ee421 96 #if defined(_WIN32)
BenRJG 0:0791d48ee421 97 #pragma pack()
BenRJG 0:0791d48ee421 98 #endif