SLAM+语音机器人DIY系列:(三)感知与大脑——1.ydlidar-x4激光雷达
摘要
在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话。朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人。实现的关键是让机器人能通过传感器感知周围环境,并通过机器人大脑处理并输出反馈和执行动作。本章节涉及到的传感器有激光雷达、IMU、轮式里程计、麦克风、音响、摄像头,和用于处理信息的嵌入式主板。关于传感器的ROS驱动程序开发和在机器人上的使用在后面的章节会展开,本章节重点对机器人传感器和嵌入式主板进行讲解,主要内容:
1.ydlidar-x4激光雷达
在移动机器人中,获取机器人周围障碍物和环境的轮廓形状是非常重要的。使用激光雷达正是为了实现这个目的。利用扫描得到的障碍物信息,机器人就可以利用SLAM建立地图、并进行避障和自主导航。考虑到成本,推荐大家选用低成本的2D激光雷达,这里推荐的ydlidar-x4激光雷达正是一款极低成本的2D激光雷达,作为学习性能足够用了。
1.1.硬件概述

(图1)ydlidar-x4激光雷达实物
雷达主体由激光测距模组和电机构成,雷达主体需要连接转接板,用于实现外部供电和UART转USB,如图1。

(图2)ydlidar-x4激光雷达性能参数
测距频率是指每秒钟测距的次数(即激光测距模组的采样率),测距频率默认为5KHz;扫描频率是指电机每秒钟转过的圈数,扫描频率默认为8Hz;测距范围是指落在此距离范围的障碍物才能被测量,测距范围为0.12~10m;扫描角度为0~360度,也就是能够360度全方位扫描;测距分辨率就是测距精度;角度分辨率就是两个相邻扫描点之间的夹角。ydlidar-x4激光雷达性能参数,如图2。
关于激光雷达的性能参数对SLAM建图与避障导航的影响,这里做一个简短的分析。
扫描频率:
扫描频率越高,电机转动一圈的时间约短,扫描获取1帧雷达数据的时间越短,这样可以使SLAM建图和避障导航实时性更好。简单点说就是机器人运动速度很快时,扫描到的点云数据连续性也比较好,这有利于SLAM算法建立稳定的地图,有利于避障导航算法及时发现并避开障碍物。
测距范围:
小于测距范围最小值的区域就是雷达的测量盲区,处于盲区中的障碍物无法被探测,所以,盲区当然是越小越好以保证机器人不发生碰撞;大于测距范围最大值的区域就是雷达超量程的区域,在超量程的区域的障碍物无法被探测或者可以探测但误差很大,所以,在比较开阔的环境下应该采用远距离量程的雷达。
扫描角度:
大部分雷达都是0~360度全方位扫描的,所以就没什么太大的区别了,其实就是机器人不用转动身体的情况下就能一次性扫描出四周的障碍物信息。
测距分辨率:
测距分辨率也就是测距精度,测距精度越高当然有利于SLAM建图和避障导航,但是测距精度越越高的雷达成本当然也越高,现在国产低成本的雷达普遍为厘米级(cm)的精度,差一点的雷达5cm左右的精度,稍微好一点的雷达2cm左右的精度,如果要达到毫米级(mm)的精度成本就非常高了。
角度分辨率:
角度分辨率决定了两个相邻点云之间的夹角,由于雷达是通过旋转进行扫描的,随着距离增加点云会越来越稀疏。如果角度分辨率比较低,在扫描远距离物理时只能得到非常稀疏的几个点云,这样的点云基本上没有什么用处了。
角度分辨率 = 360 /(测距频率 / 扫描频率)
从上面的角度分辨率计算公式来看,一般测距频率为常数值(由激光模组特性决定),那么通过降低扫描频率可以提升角度分辨率,但同时扫描频率降低会影响雷达的实时性,所以这是一个权衡的过程,根据实际情况做选择。
1.2.工作原理
激光雷达之所以流行,得益于它能够精确的测距。主流的激光雷达基于两种原理:一种是三角测距法,另一种是飞行时间(TOF)测距法。其实很好理解,就是利用了最基本的数学与物理知识。

(图3)三角测距原理
三角测距原理如图3,激光器发射一束激光,被物体A反射后,照射到图像传感器的A’,这样就形成了一个三角形,通过解算可以求出物体A到激光器的距离。激光束被不同距离的物体反射后,形成不同的三角形。我们不难发现随物体距离不断变远,反射激光在图像传感器上的位置变化会越来越小,也就是越来越难以分辨。这正是三角测距的一大缺点,物体距离越远,测距误差越大。

(图4)TOF测距原理
飞行时间(TOF)测距原理如图4,激光器发出激光时,计时器开始计时,接收器接收到反射回来的激光时,计时器停止计时,得到激光传播的时间后,通过光速一定这个条件,很容易计算出激光器到障碍物的距离。由于光速传播太快了,要获取精确的传播时间太难了。所以这种激光雷达自然而然成本也会高很多,但是测距精度很高。
1.3.在机器人中使用ydlidar-x4激光雷达

(图5)在机器人中使用ydlidar-x4激光雷达
ydlidar-x4激光雷达通过串口与机器人相连接,机器人中通过运行雷达ROS驱动,来实现读取串口的雷达数据和将雷达数据发布到/scan这个主题,这样机器人上的其它节点就可以通过订阅/scan主题来获取激光雷达数据了。关于雷达ROS驱动在机器人上的具体使用,将在后面的章节中具体讲解。
后记
------SLAM+语音机器人DIY系列【目录】快速导览------
第1章:Linux基础
第2章:ROS入门
第3章:感知与大脑
第4章:差分底盘设计
第5章:树莓派3开发环境搭建
第6章:SLAM建图与自主避障导航
2.google-cartographer机器人SLAM建图
第7章:语音交互与自然语言处理
第8章:高阶拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章将持续更新,敬请关注-----------------
如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

SLAM+语音机器人DIY系列:(三)感知与大脑——1.ydlidar-x4激光雷达的更多相关文章
- SLAM+语音机器人DIY系列:(三)感知与大脑——2.带自校准九轴数据融合IMU惯性传感器
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——3.轮式里程计与运动控制
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——5.机器人大脑嵌入式主板性能对比
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——6.做一个能走路和对话的机器人
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图
摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——6.编写简单的service和client
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——4.底盘ROS驱动开发
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
随机推荐
- python之算法排序模块
这是一个能够随时学习重要算法的Python模块,记录在案,方便查看 特点 易于使用 容易理解的文档 快速获取算法的源代码 随时获取时间复杂度 安装 仅需在终端中执行以下命令: pip3 install ...
- ADB环境搭建 -- For Windows 10
一.安装 ADB: ADB下载链接:http://adbshell.com/upload/adb.zip ADB官网:http://adbshell.com/ 下载好后,建议直接把文件解压 ...
- MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
一.问题描述: 当我们配置好MySQL主主同步时,是可以实现主主同步,但是重启机器后就发现无法同步了. 二.Slave两个关键进程: mysql replication 中slave机器上有两个关键的 ...
- 你真的了解字典(Dictionary)吗?
从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点. 为了便于描述,我把上面的那条线路称为线路1,下面的称为线路2. 思路 ...
- matplotlib读取csv文件
一,从本地加载csv文件 from matplotlib import pyplot as pltimport numpy as npimport csv#用来正常显示中文标签plt.rcParams ...
- jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
需求: 抽奖代码最多可以抽奖5次,而且,每次只会中“2000元理财金”或者“谢谢参与”,其它的不会抽中(哈哈,果然都是套路). 效果如下: 一.页面结构: ? 1 2 3 4 5 6 7 8 9 10 ...
- Java辅助类持续汇总~
/** * 01 * 描述:List<String>集合去除重复数据 * [时间 2019年3月5日下午3:54:09 作者 陶攀峰] */ public static List<S ...
- 常见的磁盘I/O和网络I/O优化技巧
磁盘I/O 优化 性能检测 应用程序通过访问磁盘来读取数据,而磁盘I/O 通常都是很耗时间的,所以一般我们来判断I/O是否有瓶颈的时候,就需要一些参数指标来参考. WAIT 指标 :压测应用程序,查看 ...
- brew 安装指定版本命令行工具 tmux 多版本实现
Homebrew 是 macOS 命令安装工具,其核心库里的命令行在 github homebrew-core 仓库上维护. 核心库命令大概有 5000 条左右,大部分的命令行工具只保留了最新版本的 ...
- 关于.Net mvc 项目在本地vs运行响应时间过长无法访问时,解决方法!
最近可能是刚升级了电脑使用了window10操作系统,总是遇到了一些以前没有遇到过的事情! 今早来到公司本来准备写bug的,但是当我打开vs运行的时候发现今天的电脑响应的时间明显的要比之前打开网页调试 ...