【Arduino】168种传感器系列实验(221)---360°激光雷达模块

2022-11-145.2万
AI 快速预览详细 收起
本文介绍了360°旋转扫描激光雷达测距传感器在ROS机器人中的应用。通过详细的实验步骤,包括资料代码、仿真编程和图形编程,帮助读者掌握该传感器的使用方法。最终效果是实现精准的建图导航和避障功能。
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十一:360°旋转扫描激光雷达测距传感器 ROS机器人建图导航定位 ROS小车导航路径规划避障模块

【Arduino】168种传感器系列实验(221)---360°激光雷达模块图2

【Arduino】168种传感器系列实验(221)---360°激光雷达模块图1

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(98)
温暖的蓝色
温暖的蓝色
能写一个esp32的例程吗?
驴友花雕
驴友花雕
作者
回复温暖的蓝色
这个激光模块有点难搞,实验一直挺困难的......
驴友花雕
驴友花雕
作者
实验场景图

驴友花雕
驴友花雕
作者
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十一:360°旋转扫描激光雷达测距传感器 ROS机器人建图导航定位 ROS小车导航路径规划避障模块(EAI YDLIDAR X4)
项目之一:从 RPLIDAR 获取数据的简单通用方法(您可以基于此模板自由添加您的应用程序代码)
实验接线:
1、将 RPLIDAR 的串行端口 (RX/TX/GND) 连接到您的 Arduino 板(引脚 0 和引脚 1)
2、将 RPLIDAR 的电机控制引脚连接到 Arduino 板引脚 3
[code]/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百二十一:360°旋转扫描激光雷达测距传感器 ROS机器人建图导航定位 ROS小车导航路径规划避障模块(EAI YDLIDAR X4)
项目之一:从 RPLIDAR 获取数据的简单通用方法(您可以基于此模板自由添加您的应用程序代码)
实验接线:
1、将 RPLIDAR 的串行端口 (RX/TX/GND) 连接到您的 Arduino 板(引脚 0 和引脚 1)
2、将 RPLIDAR 的电机控制引脚连接到 Arduino 板引脚 3
*/
// RPLIDAR 驱动程序库
#include
//您需要创建驱动程序实例
RPLidar lidar;
#define RPLIDAR_MOTOR 3 //用于控制 RPLIDAR 电机速度的 PWM 引脚
//此引脚应与 RPLIDAR 的 MOTOCTRL 信号连接
void setup() {
// 将 RPLIDAR 驱动程序绑定到 arduino 硬件串行
lidar.begin(Serial);
// 设置引脚模式
pinMode(RPLIDAR_MOTOR, OUTPUT);
}
void loop() {
if (IS_OK(lidar.waitPoint())) {
float distance = lidar.getCurrentPoint().distance; //以毫米为单位的距离值
float angle = lidar.getCurrentPoint().angle; //以度为单位的角度值
bool startBit = lidar.getCurrentPoint().startBit; //起始位,此点是否属于新扫描
byte quality = lidar.getCurrentPoint().quality; //电流测量的质量
//在这里执行数据处理...
} else {
analogWrite(RPLIDAR_MOTOR, 0); //停止 rplidar 电机
// 尝试检测RPLIDAR...
rplidar_response_device_info_t info;
if (IS_OK(lidar.getDeviceInfo(info, 100))) {
// 检测到...
lidar.startScan();
// 启动电机以最大允许速度旋转
analogWrite(RPLIDAR_MOTOR, 255);
delay(1000);
}
}
}[/code]
驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font=Tahoma, "]下载安装激光雷达RPLIDAR 的 Arduino 驱动库[/font][/backcolor]
[font=Tahoma, "]https://github.com/robopeak/rplidar_arduino[/font]
[font=Tahoma, "]

[/font]
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
激光雷达YDLIDAR X4底部有一个P8排插,需要配套PH2.0-P8公头排线


驴友花雕
驴友花雕
作者
评论内容
驴友花雕
驴友花雕
作者
使用Arduino来尝试一下激光雷达的串口通信,实验参考接线示意图

驴友花雕
驴友花雕
作者
激光雷达YDLIDAR X4 的功耗控制
X4 的对外接口中,提供了电机的相关控制接口(M_EN,M_SCTP)和功耗的控制接口(DEV_EN),用户可设置该三个控制信号来控制设备的功耗。
待机控制
为了方便用户快速使用,X4 控制信号的默认值(请参考数据手册)没有实现最低功耗,因此,当用户需要调试出最低功耗的待机状态,需要进一步对 M_EN、DEV_EN 进行如下调控:
M_EN = 0V,DEV_EN = 0V。
以此便关闭了电机的使能和测距使能,整个系统便处于最低功耗的待机状态。
速度控制
同时,用户可以根据实际需要,改变扫描频率来满足需求。通过改变 M_SCTP 管脚输入电压,或改变输入的 PWM 信号的占空比,来调控电机转速(具体控制方法,请参考数据手册)。

驴友花雕
驴友花雕
作者
[font=微软雅黑]激光雷达YDLIDAR X4 的[/font]数据协议
不同的系统命令,有着不同报文的报文内容。而不同类型码的报文中,其应答内容的数据协议也不尽相同。因此,用户需要根据相应的数据协议,来解析应答内容中的数据,如点云数据、设备信息等。
扫描命令 [A5 60]
当外部设备向 X4 发送扫描命令时,X4 会进入扫描模式,并反馈点云数据。其应答报文为:

其中第 6 个字节高 2 为 01,因此应答模式取值为 0x1,为持续应答,忽略应答长度,类型码为 0x81;应答内容为系统扫描的点云数据,其按照以下数据结构,以 16 进制向串口发送至外部设备。扫描命令应答内容数据结构描述:

驴友花雕
驴友花雕
作者
[backcolor=rgb(255, 255, 255)][font=Tahoma, "]激光雷达YDLIDAR X4 的[/font][/backcolor]系统报文
系统报文时系统根据接收的系统命令反馈的应答报文,不同的系统命令,系统报文的应答模式和应答内容也不一样,其中应答模式有三种:无应答、单次应答、持续应答。
无应答表示系统不反馈任何报文;单次应答表示系统的报文长度是有限的,应答一次即结束;持续应答表示系统的报文长度是无限长的,需要持续发送数据,如进入扫描模式时。
单次应答和持续应答的报文采用同一个数据协议,其协议内容为:起始标志、应答长度、应答模式、类型码和应答内容,通过串口 16 进制输出。

➢ 起始标志:X4 的报文标志统一为 0xA55A;
➢ 应答长度:应答长度表示的是应答内容的长度,但当应答模式为持续应答时,长度应为无限大,因此该值失效;
➢ 应答模式:该位只有 2bits,表示本次报文是单次应答或持续应答,其取值和对应的模式如下:

➢ 类型码:不同的系统命令,对应不同的类型码;
➢ 应答内容:不同的系统命令,反馈不同的数据内容,其数据协议也不同。
注 1:X4 的数据通信采用的是小端模式,低位在前。
注 2:应答报文中,第 6 个字节的低 6 位属于应答长度,高 2 位属于应答模式。
驴友花雕
驴友花雕
作者
激光雷达YDLIDAR X4 的系统命令
外部系统通过发送相关的系统命令,便可设置 X4 相应的工作状态,获取相应的数据。X4的系统命令统一为 2 个字节,其中起始字节统一为 0xA5,第二个字节为命令内容。X4 对外发布的系统命令如下:

驴友花雕
驴友花雕
作者
激光雷达YDLIDAR X4 系统通信机制
X4 是通过串口来和外部设备进行命令和数据的交互。当外部设备发送一个系统命令至X4,X4 解析系统命令,会返回相应的应答报文,并根据命令内容,来切换相应的工作状态,外部系统根据报文内容,解析报文,便可获取应答数据。

驴友花雕
驴友花雕
作者
激光雷达YDLIDAR X4的系统设置了 3 种工作模式:空闲模式、扫描模式、停机模式:
➢ 空闲模式:X4 上电时,默认为空闲模式,空闲模式时,X4 的测距单元不工作,激光器不亮。
➢ 扫描模式:当 X4 进入扫描模式时,测距单元点亮激光器,开始工作,不断得对外部环境进行激光采样,并经过后台处理后实时输出。
➢ 停机模式:当 X4 运行有错时,如开启扫描时,激光器不亮,电机不转等状况,X4 会自动关闭测距单元,并反馈错误代码。
工作流程

驴友花雕
驴友花雕
作者
实验中,卡在这里,多次尝试均打不开这个链接,只好暂时放一放了

https://ozeki.hu/p_5659-find-serial-devices-windows-linux.html
驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者

驴友花雕
驴友花雕
作者
后来查到需要使用 Ozeki 10 自动连接到串行设备
您将看到如何使用 Ozeki 10 自动连接到任何 COM 端口。默认情况下此功能是关闭的,因此您需要将其打开才能将您的设备与 Ozeki 10 一起使用。程序不能同时使用同一个 USB 端口,因此如果您想将 Ozeki 设备代码上传到微控制器,您应该关闭自动连接。在计算中,串行端口是一种串行通信接口,通过它一次一位地传入或传出信息。COM口是串口接口的俗称。当连接到 Ozeki 10 时,RS-232 串行端口外围设备被识别为 COM 端口。这些外围设备可以插入计算机的任何 USB 端口。

驴友花雕
驴友花雕
作者
打开设置,里面有七个选项,还不知道需要设置哪个