0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用ESP32连通RPLidar激光雷达?

jf_Ufm3lVrj 来源:凌顺实验室 2023-03-07 10:47 次阅读

实验效果

凌顺实验室(lingshunlab.com)本次分享如何用ESP32连通RPLidar激光雷达(RPLidar A1 A1M8),并且通过串口输出全部角度和输出指定角度的距离两种方式,观察测量的前方障碍物的距离。

本次实验,使用ESP32,RPLidar A1 连接ESP32的串口2(Serial2),数据在串口(Serial)中输出,这样就可以方便观察数据变化。

元件说明

最大测量范围(m) 最大测量频率(Hz) 360°扫描测距 适用场景 适用电压 俯仰角度
12 8000 支持 室内 5V

RPLIDAR A1采用激光三角测距技术,配合自主研发的高速的视觉采集处理机构, 可进行每秒8000次以上的测距动作。

RPLIDAR A1 的测距核心顺时针旋转,可实现对周围环境的360度全方位扫描测距检测, 从而获得周围环境的轮廓图。

全面改进了内部光学和算法系统, 采样频率高达8000次/秒,让机器人能更快速、精确的建图。

传统的非固态激光雷达多采用滑环传输能量和数据信息,但由于存在机械磨损,其连续工作时仅有数千小时寿命。综合无线供电和光通信技术,独创性的设计了光磁融合技术彻底解决了因物理接触磨损导致电气连接失效、激光雷达寿命短的问题

可通过电机PWM信号控制雷达扫描频率

注意:型号为A1M8

引脚说明

732981fe-bc6e-11ed-bfe3-dac502259ad0.png

引脚 说明
TX RPLIDAR 测距核心串口输出
RX RPLIDAR 测距核心串口输入
VCC_5V RPLIDAR 测距核心供电
GND RPLIDAR 测距核心地线
GND_MOTO RPLIDAR 扫描电机地线
CTRL_MOTO RPLIDAR 扫描电机使能/PWM 控制信号(高电平有效)
5V_MOTO RPLIDAR 扫描电机供电

BOM表

名称 数量
ESP32 x1
RPLidar A1 360 激光扫描测距雷达 x1
面包板 x1
跳线(杜邦线) 若干

接线方式

735374c8-bc6e-11ed-bfe3-dac502259ad0.png

ESP32 引脚 <-> RPLidar A1 引脚
16 <-> TX
17 <-> RX
5V <-> VCC_5V
GND <-> GND
GND <-> GND_MOTO
14 <-> CTRL_MOTO
5V <-> 5V_MOTO

程序提点

首先,需要安装RoboPeak开发的RPlidar的Arduino库,由于在Arduino IDE的库管理中没有,所以需要手动安装。

解压后,把「RPLidarDriver」文件夹,放在Arduino IDE 的安装目录下的「libraries」文件夹中,就可以使用RPLiadar的库,如果提示找不到,请重新检查是否安装正确。

然后就可以开始编程

加载刚安装的RPLidar库

// 加载RPLidar库
#include 

创建实例:

// 创建一个名为lidar的雷达驱动实例 
RPLidar lidar;

定义控制电机的PWM引脚:

#define RPLIDAR_MOTOR 3

绑定指定串口:

lidar.begin(Serial1);

设置控制电机的引脚为输出模式

pinMode(RPLIDAR_MOTOR, OUTPUT);

这里ESP32和Arduino 不一样,ESP32的PWM控制需要多几行代码进行定义和使用,在这次示例中,简化了这个电机的控制速度,为HIGH,LOW控制。需要ESP32 PWM控制的,可以查看相关例子,然后自己进行修改。

使用以下判断可以返回lidar是否正常工作的值

IS_OK(lidar.waitPoint()

返回当前距离值,以毫米(mm)为单位

float distance = lidar.getCurrentPoint().distance;

返回当前角度度数

float angle    = lidar.getCurrentPoint().angle;

返回该点是否属于一个新的扫描点

bool  startBit = lidar.getCurrentPoint().startBit;

返回当前测量的质量

byte  quality  = lidar.getCurrentPoint().quality;

ESP32编译RPLidar库时出现的错误

选择使用ESP32开发板程序时,在编译过程中,可能会出现如下错误:

In member function 'bool RPLidar::begin(HardwareSerial&)'

warning: no return statement in function returning non-void [-Wreturn-type]

7386c198-bc6e-11ed-bfe3-dac502259ad0.png

大概意思是RPLidar::begin()这个函数定义了是bool的返回值,但在函数里面却没有返回值。

为什么在使用Arduino 系列开发板没有提示,而在ESP系列开发板会有提示?凌顺实验室(lingshunlab.com)大概认为是,语法要求ESP系列是比较严谨一些。

这时,我们要修改一下RPLidar库的两个文件,分别是RPlidar.hdivRPlidar.cpp,把RPLidar::begin()函数的定义bool>RPlidar.cpp,把RPLidar::begin()函数的定义bool>RPlidar.cpp,把RPLidar::begin()函数的定义bool 改成 void ,定义为无返回值即可,以下图片是修改参考:

73a2640c-bc6e-11ed-bfe3-dac502259ad0.png

73c089e6-bc6e-11ed-bfe3-dac502259ad0.png

再次编译,错误提示消失。

程序代码

以下是完整的代码,是在RPlidar的例程simple_connect为基础,进行修改的。

// lingshunlab.com
// https://lingshunlab.com/book/arduino/esp32-use-rplidar-a1

// This sketch code is based on the RPLIDAR driver library provided by RoboPeak
// include library // 加载库
#include 

// 创建一个名为lidar的雷达驱动实例 
RPLidar lidar;

#define RPLIDAR_MOTOR 14  // 用于控制 RPLIDAR 电机速度。因为ESP32的PWM设置较复杂,
                          // 现在只是简单使用HIGH,LOW进行控制
                          // 该引脚应与RPLIDAR的MOTOCTRL信号相连。

// welcome to lingshunlab.com
void setup() {
  Serial.begin(115200);
  // bind the RPLIDAR driver to the arduino hardware serial
  // 将RPLIDAR驱动与ESP32 的 Serial2 硬件串口绑定。
  Serial2.begin(115200, SERIAL_8N1, 16, 17);
  while(lidar.begin(Serial2));
  // set pin modes
  // 设置引脚模式
  pinMode(RPLIDAR_MOTOR, OUTPUT);
  delay(1000);
  // 启动雷达转动
  digitalWrite(RPLIDAR_MOTOR, HIGH);
}

void loop() {
  if (IS_OK(lidar.waitPoint())) {
    float distance = lidar.getCurrentPoint().distance; //distance value in mm unit
                                                        //距离值以毫米为单位
    float angle    = lidar.getCurrentPoint().angle;   //anglue value in degree
                                                      //度数的角度值
    bool  startBit = lidar.getCurrentPoint().startBit;  //whether this point is belong to a new scan
                                                        //该点是否属于一个新的扫描点

    byte  quality  = lidar.getCurrentPoint().quality;   //quality of the current measurement
                                                        //当前测量的质量

    //在这里进行数据处理...
    // - 1 -
    // perform data processing here...
    // Output all data in the serial port  
    //在串口中输出所有数据

    //    for(int i = 0;i < 6 - String(angle).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.print(String(angle));
    //    Serial.print(" | ");
    //    for(int i = 0;i < 8 - String(distance).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.print(distance);
    //    Serial.print(" | ");
    //    Serial.print(startBit);
    //    Serial.print(" | ");
    //    for(int i = 0;i < 2 - String(quality).length(); i++){
    //      Serial.print(" ");
    //    }
    //    Serial.println(quality);

    // - 2 - 
    // Output the specified angle data
    // 输出指定角度
    if(angle > 0 and angle < 100 ){
      Serial.print(angle);
      Serial.print(" | ");
      Serial.println(distance);
    }
  } else {
    digitalWrite(RPLIDAR_MOTOR, LOW); //stop the rplidar motor
                                   //停止rplidar马达

    // try to detect RPLIDAR...
    // 尝试检测RPLIDAR... 
    rplidar_response_device_info_t info;
    if (IS_OK(lidar.getDeviceInfo(info, 100))) {
       // detected...
       // 检测到
       lidar.startScan();

       // start motor rotating at max allowed speed
       // 启动电机以最大允许速度旋转
       digitalWrite(RPLIDAR_MOTOR, HIGH);
       delay(1000);
    }
  }
}

上传完成后,可以看到指定角度输出的数据。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 激光雷达
    +关注

    关注

    968

    文章

    3964

    浏览量

    189800
  • 无线供电
    +关注

    关注

    14

    文章

    97

    浏览量

    51037
  • RPLIDAR
    +关注

    关注

    0

    文章

    7

    浏览量

    7747
  • ESP32
    +关注

    关注

    18

    文章

    968

    浏览量

    17194

原文标题:ESP32 使用RPLidar激光雷达测距(RPLidar A1 A1M8)

文章出处:【微信号:凌顺实验室,微信公众号:凌顺实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    激光雷达分类以及应用

    激光雷达实际上是一种工作在光学波段(特殊波段)的雷达,它的优点非常明显:1、具有极高的分辨率:激光雷达工作于光学波段,频率比微波高2~3个数量级以上,因此,与微波雷达相比,
    发表于 09-19 15:51

    常见激光雷达种类

    单线激光雷达特点:结构简单、扫描速度快、分辨率高、可靠性高、成本低。单线激光雷达实际上就是一个高同频激光脉冲扫描仪,加上一个一维旋转扫描。单线激光雷达虽然原理简单但是可以有效、高频的测
    发表于 09-25 11:30

    消费级激光雷达的起航

    自动导航车(Automatic Guided Vehicle,即AGV)领域的固态激光雷达CE30。对比传统的机械式激光雷达激光雷达是通过机械转轴的高速旋转来完成四周环境的扫描。固态激光雷达
    发表于 12-07 14:47

    固态设计激光雷达

    ``一年一度的国际消费类电子产品展览会(CES)已经完满收官,短短的几天时间里,我们见识了Intel无人飞机灯光秀、百度无人车、移动行李箱等众多“黑科技”。而北醒不仅展示了性能卓越的固态激光雷达,在
    发表于 01-25 09:41

    一文详解激光雷达核心指标,实用性和可靠性第一

    测距激光雷达的噩梦。但从实用性角度看,一款标称10米以上的激光雷达,必须至少能在6米距离以上有效得进行检测。但是RPLIDAR A2M6即使在10米距离下,仍旧可以对其进行有效检测。RPLID
    发表于 02-02 14:06

    激光雷达的核心重要指标到底是什么?

    激光雷达的噩梦。但从实用性角度看,一款标称10米以上的激光雷达,必须至少能在6米距离以上有效得进行检测。但是RPLIDAR A2M6即使在10米距离下,仍旧可以对其进行有效检测。RPLIDAR
    发表于 02-07 13:40

    激光雷达除了可以激光测距外,还可以怎么应用?

    在很多人印象中激光雷达还是那个通过旋转完成激光测距帮助机器人完成定位、建图辅助后续导航的激光传感器RPLIDAR定位建图 但其实,除了可以应用在机器人定位建图、自主导航、障碍物检测与规
    发表于 05-11 15:33

    机器人和激光雷达都不可或缺

    控制,延长产品淘汰周期。思岚的RPLIDAR 系列雷达采用电磁融合技术,这种非物理接触的无线供电和无线数据传输技术,解决了因物理接触机械磨损导致电气连接失效、激光雷达寿命短的问题,能让雷达
    发表于 02-15 15:12

    TOF激光雷达

    TOF 方案激光雷达激光雷达新一代技术方案,本产品解决了如市场三角测试法等产品组装问题难,价格成本高等问题,目前提供面阵及单光子技术,基于COM产品。集成了SPAD,TDC,DSP,RAM
    发表于 06-07 00:03

    RPLIDAR A2 360°激光雷达,能不能输出数据到arduino上?

    大神出来聊聊: RPLIDAR A2 360°激光雷达,能不能输出数据到arduino上?或者说arduino能跟得上吗?
    发表于 08-14 08:02

    激光雷达

    想了解行业国内做固态激光雷达的厂家,激光雷达里面是怎么样的啊
    发表于 01-17 15:29

    FMCW激光雷达与dTOF激光雷达的区别在哪?

    FMCW激光雷达与dTOF激光雷达的区别在哪?
    发表于 07-23 13:22

    当“思岚”激光雷达邂逅盲人拐杖

    的具体姿势视觉传感器:结合激光雷达,做SLAM建图图源:Science Robotics其中,相信大家对这款激光雷达很眼熟,就是思岚科技的 RPLIDAR A1。A1的应用,可以用来帮助盲人探测周围物体
    发表于 11-12 14:12

    怎样去使用激光雷达RPLIDAR A1呢

    激光雷达RPLIDAR A1使用教程一.雷达硬件连接1.A1雷达包含组件RPLIDAR A1开发套装包含了如下组件:oRPLIDAR A1模
    发表于 01-05 07:25

    思岚科技RPLIDAR系列激光雷达

    对于激光雷达传感器在机器人、无人驾驶等领域的应用相信大家并不陌生,但除了这两大领域,激光雷达传感器还可被广泛应用于其他领域。以思岚科技的RPLIDAR系列激光雷达来说,虽说目前的大部分
    发表于 10-14 14:15 2064次阅读