14775浏览
楼主: 驴友花雕

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

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 08:30:04

本帖最后由 驴友花雕 于 2022-11-25 08:32 编辑

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

【Arduino】168种传感器系列实验(221)---360°激光雷达模块图1
https://ozeki.hu/p_5659-find-serial-devices-windows-linux.html


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 10:27:02

激光雷达YDLIDAR X4的系统设置了 3 种工作模式:空闲模式、扫描模式、停机模式:

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

工作流程

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 10:35:49

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 10:38:07

激光雷达YDLIDAR X4 的系统命令
外部系统通过发送相关的系统命令,便可设置 X4 相应的工作状态,获取相应的数据。X4的系统命令统一为 2 个字节,其中起始字节统一为 0xA5,第二个字节为命令内容。X4 对外发布的系统命令如下:

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 10:56:38

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

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

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

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

➢ 类型码:不同的系统命令,对应不同的类型码;
➢ 应答内容:不同的系统命令,反馈不同的数据内容,其数据协议也不同。
注 1:X4 的数据通信采用的是小端模式,低位在前。
注 2:应答报文中,第 6 个字节的低 6 位属于应答长度,高 2 位属于应答模式。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 11:19:13

激光雷达YDLIDAR X4 的数据协议
不同的系统命令,有着不同报文的报文内容。而不同类型码的报文中,其应答内容的数据协议也不尽相同。因此,用户需要根据相应的数据协议,来解析应答内容中的数据,如点云数据、设备信息等。

扫描命令 [A5 60]
当外部设备向 X4 发送扫描命令时,X4 会进入扫描模式,并反馈点云数据。其应答报文为:

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

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

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 11:24:28

激光雷达YDLIDAR X4 的功耗控制
X4 的对外接口中,提供了电机的相关控制接口(M_EN,M_SCTP)和功耗的控制接口(DEV_EN),用户可设置该三个控制信号来控制设备的功耗。

待机控制
为了方便用户快速使用,X4 控制信号的默认值(请参考数据手册)没有实现最低功耗,因此,当用户需要调试出最低功耗的待机状态,需要进一步对 M_EN、DEV_EN 进行如下调控:
M_EN = 0V,DEV_EN = 0V。
以此便关闭了电机的使能和测距使能,整个系统便处于最低功耗的待机状态。

速度控制
同时,用户可以根据实际需要,改变扫描频率来满足需求。通过改变 M_SCTP 管脚输入电压,或改变输入的 PWM 信号的占空比,来调控电机转速(具体控制方法,请参考数据手册)。

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 16:41:52

使用Arduino来尝试一下激光雷达的串口通信,实验参考接线示意图

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 16:44:01

本帖最后由 驴友花雕 于 2022-11-25 16:49 编辑

104-.jpg
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 17:46:51

激光雷达YDLIDAR X4底部有一个P8排插,需要配套PH2.0-P8公头排线
【Arduino】168种传感器系列实验(221)---360°激光雷达模块图2

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-25 19:42:44

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

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-26 09:03:50

下载安装激光雷达RPLIDAR 的 Arduino 驱动库

https://github.com/robopeak/rplidar_arduino
【Arduino】168种传感器系列实验(221)---360°激光雷达模块图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-26 09:51:23

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百二十一:360°旋转扫描激光雷达测距传感器 ROS机器人建图导航定位 ROS小车导航路径规划避障模块(EAI YDLIDAR X4)
  项目之一:从 RPLIDAR 获取数据的简单通用方法(您可以基于此模板自由添加您的应用程序代码)
  实验接线:
  1、将 RPLIDAR 的串行端口 (RX/TX/GND) 连接到您的 Arduino 板(引脚 0 和引脚 1)
  2、将 RPLIDAR 的电机控制引脚连接到 Arduino 板引脚 3

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百二十一:360°旋转扫描激光雷达测距传感器 ROS机器人建图导航定位 ROS小车导航路径规划避障模块(EAI YDLIDAR X4)
  4.   项目之一:从 RPLIDAR 获取数据的简单通用方法(您可以基于此模板自由添加您的应用程序代码)
  5.   实验接线:
  6.   1、将 RPLIDAR 的串行端口 (RX/TX/GND) 连接到您的 Arduino 板(引脚 0 和引脚 1)
  7.   2、将 RPLIDAR 的电机控制引脚连接到 Arduino 板引脚 3
  8. */
  9. //  RPLIDAR 驱动程序库
  10. #include <RPLidar.h>
  11. //您需要创建驱动程序实例
  12. RPLidar lidar;
  13. #define RPLIDAR_MOTOR 3 //用于控制 RPLIDAR 电机速度的 PWM 引脚
  14. //此引脚应与 RPLIDAR 的 MOTOCTRL 信号连接
  15. void setup() {
  16.   // 将 RPLIDAR 驱动程序绑定到 arduino 硬件串行
  17.   lidar.begin(Serial);
  18.   // 设置引脚模式
  19.   pinMode(RPLIDAR_MOTOR, OUTPUT);
  20. }
  21. void loop() {
  22.   if (IS_OK(lidar.waitPoint())) {
  23.     float distance = lidar.getCurrentPoint().distance; //以毫米为单位的距离值
  24.     float angle    = lidar.getCurrentPoint().angle; //以度为单位的角度值
  25.     bool  startBit = lidar.getCurrentPoint().startBit; //起始位,此点是否属于新扫描
  26.     byte  quality  = lidar.getCurrentPoint().quality; //电流测量的质量
  27.     //在这里执行数据处理...
  28.   } else {
  29.     analogWrite(RPLIDAR_MOTOR, 0); //停止 rplidar 电机
  30.     // 尝试检测RPLIDAR...
  31.     rplidar_response_device_info_t info;
  32.     if (IS_OK(lidar.getDeviceInfo(info, 100))) {
  33.       // 检测到...
  34.       lidar.startScan();
  35.       // 启动电机以最大允许速度旋转
  36.       analogWrite(RPLIDAR_MOTOR, 255);
  37.       delay(1000);
  38.     }
  39.   }
  40. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2022-11-26 09:53:32

实验场景图

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

回复

使用道具 举报

温暖的蓝色  中级技师

发表于 2023-1-29 23:21:58

能写一个esp32的例程吗?

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2023-3-6 10:49:27

温暖的蓝色 发表于 2023-1-29 23:21
能写一个esp32的例程吗?

这个激光模块有点难搞,实验一直挺困难的......
回复

使用道具 举报

12345
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail