在个人想象中机器人首先应该能自由的走来走去,而后应该能流利的与主人对话。朝着这个理想,我准备设计一个能自由行走,而且能够与人语音对话的机器人。实现的关键是让机器人能经过传感器感知周围环境,并经过机器人大脑处理并输出反馈和执行动做。本章节涉及到的传感器有激光雷达、IMU、轮式里程计、麦克风、音响、摄像头,和用于处理信息的嵌入式主板。关于传感器的ROS驱动程序开发和在机器人上的使用在后面的章节会展开,本章节重点对机器人传感器和嵌入式主板进行讲解,主要内容:html
1.ydlidar-x4激光雷达python
2.带自校准九轴数据融合IMU惯性传感器nginx
4.音响麦克风与摄像头django
5.机器人大脑嵌入式主板性能对比ubuntu
6.作一个能走路和对话的机器人centos
在移动机器人中,获取机器人周围障碍物和环境的轮廓形状是很是重要的。使用激光雷达正是为了实现这个目的。利用扫描获得的障碍物信息,机器人就能够利用SLAM创建地图、并进行避障和自主导航。考虑到成本,推荐你们选用低成本的2D激光雷达,这里推荐的ydlidar-x4激光雷达正是一款极低成本的2D激光雷达,做为学习性能足够用了。网络
(图1)ydlidar-x4激光雷达实物架构
雷达主体由激光测距模组和电机构成,雷达主体须要链接转接板,用于实现外部供电和UART转USB,如图1。ide
(图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 /(测距频率 / 扫描频率)
从上面的角度分辨率计算公式来看,通常测距频率为常数值(由激光模组特性决定),那么经过下降扫描频率能够提高角度分辨率,但同时扫描频率下降会影响雷达的实时性,因此这是一个权衡的过程,根据实际状况作选择。
激光雷达之因此流行,得益于它可以精确的测距。主流的激光雷达基于两种原理:一种是三角测距法,另外一种是飞行时间(TOF)测距法。其实很好理解,就是利用了最基本的数学与物理知识。
(图3)三角测距原理
三角测距原理如图3,激光器发射一束激光,被物体A反射后,照射到图像传感器的A’,这样就造成了一个三角形,经过解算能够求出物体A到激光器的距离。激光束被不一样距离的物体反射后,造成不一样的三角形。咱们不难发现随物体距离不断变远,反射激光在图像传感器上的位置变化会愈来愈小,也就是愈来愈难以分辨。这正是三角测距的一大缺点,物体距离越远,测距偏差越大。
(图4)TOF测距原理
飞行时间(TOF)测距原理如图4,激光器发出激光时,计时器开始计时,接收器接收到反射回来的激光时,计时器中止计时,获得激光传播的时间后,经过光速必定这个条件,很容易计算出激光器到障碍物的距离。因为光速传播太快了,要获取精确的传播时间太难了。因此这种激光雷达天然而然成本也会高不少,可是测距精度很高。
(图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技术交流群,一块儿讨论学习^_^
关于咱们:
视频教程: