基于激光雷达的室内AGV导航研究技术研究【毕业论文,源码和其他资料私信即可】


前言

本文为本人的本科毕业论文,希望可以给即将毕业的学弟学妹提供思路。如果需要更多关于本论文的资料(包括论文和代码)可私信给我就可以。


一、绪论

1.研究的背景及意义

SLAM(Simultaneous Localization and Mapping )意为“同时定位与地图构建”,是指搭载特定传感器的运动载体,在没有环境先验信息的情况下,在主体运动过程中建立环境地理模型,同时预估自己的运动轨迹。如果运动主体搭载的传感器是相机,那么最终的成果即为“视觉SLAM”。
在计算机视觉建立初期,人们都期望计算机能够达到人类的视觉感受能力,即通过分析摄取图像,认知物体,自主活动,这种仿真效果是无数的研究人员日夜为之奋斗的目标。但要让计算机像人脑一样准确地理解成像内容,是一件极其不容易的事,需要极大的技术支持。研究人员为此奋斗了数年,终于在近年取得了飞速的进展:通过人工智能与机器学习模仿技术,使得计算机渐渐地能够识别物体、文字与声音。在SLAM领域发展了近三十年后,相机也能逐步实现自身定位,发送精确坐标,即使与人类所见到的实物存在不小的差异,但已为SLAM实时定位系统奠定了良好的基础,实现三维立体定位指日可待。
互联网经济的迅速崛起,是促使SLAM技术研究发展的重要原因之一,人工智能的发展不仅是经济市场的需求,也是时代发展的方向。越来越多科研的投入,使得SLAM技术成为机器人与计算机视觉研究的热点。自21世纪以来,以视觉传感器为中心的视觉SLAM,从理论到实践都经历了显著的突破和转变,其成果也慢慢的运用到市场中。
以激光雷达为基础的室内AGV导航系统核心技术为SLAM算法,其技术含量高,开发难度大,涉及面广。但在本文中,系统的关键技术可分为激光雷达RPLIDAR和AGV小车两个部分。其中激光雷达部分包括导航技术、路径规划与发布速度控制;AGV小车部分则包括负责订阅发布速度与控制方向。随着技术的不断成熟,AGV应用领域随之不断扩展,根据应用场景可分为普通室内应用类型、低温环境应用类型和室外应用类型;导航方式也由最早的电磁导航发展到磁带导航,到激光导航,再到现在的视觉导航。
导航作为本系统的核心技术部分,是AGV导航的重要标志之一。传统的导航方式以电磁导航和磁带导航为代表,使用物理路径,环境表示简单,无自动地图创建技术,定位时只需通过传感器检测车体与物理路径之间的偏差即可。随着激光传感器、图像视觉传感器技术的逐步应用,因其定位精度高,无需对地面进行改造,路径柔性高的优点,使激光雷达的AGV导航技术得以广泛研究与应用。经对比可发现,与传统的导航方式相比,激光雷达不仅涉及面广、技术复杂,对比传统导航,激光导航不存在物理路径与车体之间的检测偏差。首先,在激光导航中,AGV通过激光雷达实时采集环境数据,通过将环境数据的处理结果与事先建立的环境地图进行对比获得自身在地图中的位姿估计,这种位姿估计即定位比传统导航方式中的直接偏差计算要复杂得多。其次,由于激光导航中使用的地图具有明显的测度信息,需要进行精确绘制,所以其建的地图环境精度会对AGV小车的精度造成影响。最后,激光导航不仅需要通过激光雷达获取大量环境数据,还需要从这些数据中提取高层次信息,形成对环境的高层次理解,即为环境感知技术。要想实现环境感知,地图的创建与定位是不可缺少的前提。
综上所述,激光导航在理论上可为运动主体实现较高的定位精度、较高的路径柔性和较高的智能性,这也符合了当前AGV导航技术的发展趋势。

2.室内定位的技术

常见的室内定位技术包括蓝牙、红外线、RFID、WiFi、ZigBee、UWB技术、激光雷达等,具体为:
(1)蓝牙定位技术。蓝牙定位技术通过测量信号强度进行定位,是一种短距离和低功耗的无线传输技术。 通过在室内安装适当的蓝牙局域网接入点,将网络配置为基于多用户的网络连接模式,并确保蓝牙局域网接入点始终是微微网(piconet)。 主设备(微微网)可以获取用户的位置信息。
(2)红外线定位技术。为典型的红外室内定位系统(Activebadges),通过将电子标记附加到待测物体上,该标记通过固定在室内红外接收器上的红外发射器周期性地发送待测量对象的唯一ID,然后接收器将数据发送到有线网络数据库中,这种定位技术会消耗大量电力,且经常被室内墙壁或物体阻挡,效用较低。
(3)RFID技术。其实现起来非常方便,系统受环境影响较小,可以对电子标签信息进行编辑和改写,使其更加灵活。射频识别技术使用射频进行非接触式双向通信以交换数据以用于识别和定位目的。这项技术的作用范围很小,通常最高可达几十米。 优点主要有可在几毫秒内获得厘米级的定位精度信息,传输距离大,成本低。
在这里插入图片描述
(4)WiFi技术。无线局域网(WLAN)是一个全新的信息采集平台,可以在广泛的应用领域实现复杂的大规模定位,监测和跟踪任务。网络节点的定位是大多数应用的基础和先决条件。目前,更流行的Wi-Fi定位是一种定位解决方案,已经成为无线LAN系列IEEE802.11b的无线LAN标准。无线局域网中的AP接入点或无线网卡可以轻松测量无线信号的强度,可以用来通过匹配信号强度来定位信号。
(5)ZigBee技术。ZigBee(IEEE 802.15.4)是一种新兴的短距离,低速率无线网络技术,介于射频识别和蓝牙之间,也可用于室内定位。 主要针对无线个人局域网(PAN),应用中的网络系统具有近距离,低功耗,低成本等特点,能够满足室内定位系统的要求和条件。
(6)超宽带(UWB)技术。超宽带技术是近年来与传统通信技术有很大差异的一种新兴的新型通信无线技术。 它不需要在传统通信系统中使用载波,而是通过发送和接收极窄脉冲(以纳秒或微秒)发送和接收数据,因此具有3.1至10.6 GHz的带宽。目前,包括美国,日本和加拿大在内的国家都在研究这项技术,并且在无线室内定位方面具有良好的前景。
(7)激光雷达定位技术。激光雷达(Laser Detection and Ranging,LADAR)是传统雷达技术与现代激光技术相结合的产物。激光雷达测距,具有探测距离远,测量精度高,角度分辨率高等特点。激光测距主要有连续波测距和脉冲测距两种方法。连续波测距一般针对合作目标,采用性能良好的反射器,激光器连续输出固定频率的光束,通过调频法或相位法进行测距。脉冲测距也称为飞行时间测距(Time of Flight,TOF),即通过测量从发射激光脉冲到接收反射光的时间间隔,根据光的行程和飞行时间的关系计算距离。脉冲测距方法应用于反射条件变化很大的非合作目标。根据测量目标维数的不同,激光雷达可以分为一维、二维和三维激光雷达三种。一维激光雷达通常称为激光测距仪,只在单一方向上测距。二维激光雷达和三维激光雷达又分别称为二维激光扫描仪和三维激光扫描仪,两者都是激光测距仪借助扫描系统改变激光探测方向获得二维和三维的点云数据,从而实现多维扫描。目前,AGV采用的激光雷达多位基于脉冲测距的二维激光雷达。
在这里插入图片描述

3.研究内容

基于激光雷达的AGV导航技术的最终目的是实现AGV的精准定位,定位的前提为创造一幅可被AGV系统理解的环境地图,因为这一环境地图可由系统自身通过运用自动地图创建技术进行创建,所以环境地图创建技术和定位技术均属于AGV导航技术范畴。
本项目以室内结构化环境应用为背景,通过rplidarA2激光雷达进行环境感知;使用谷歌最新开源的Cartographer进行地图的创建与定位;运用ROS机器人操作系统作为AGV小车的控制系统,从而设计出定位精度更高、更智能的AGV小车。
RPLIDAR A2 激光雷达具有每秒高达 8000 次的高速激光测距采样能力,可以实现在二维平面的 8 米半径范围内进行 360 度全方位的激光测距扫描,并产生所在空间的平面点云地图信息。这些云地图信息可用于地图测绘、机器人定位导航、物体/环境建模等实际应用中。
谷歌cartographer是一个可实现实时同步定位的地图系统(SLAM),可提供ROS系统支持2D 和 3D SLAM(simultaneous localization and mapping)库,由于其具有更高精度的保证,在2016年8月份起,绝大多数科研人员都都开始使用它做室内定位系统的开发研究。
本项目使用的SLAM算法,是通过实时定位与地图构建,配合激光RPLIDAR进行构图,同时实现精确的导航定位。在使用MFC框架实现了地图构建的软件部分的时候,机器人学中SLAM在空间坐标系的转换以及实现了小车运动轨迹。
本组的研究计划可分为以下四部分:
一、以环境感知、地图创建和定位三个方面对激光雷达引导机器人自主导航系统进行研究。
二、预计使用两周时间,通过运行安装在AGV小车上的rplidar A2激光雷达进行环境感知,并在ROS系统中获取激光雷达扫描数据。
三、预计使用1个月时间,利用利用谷歌最新开源的Cartographer进行地图的创建与定位,规划处最优路径。
四、预计使用1个月时间,把ROS机器人操作系统移植到树莓派,将其作为AGV小车的控制系统,设计出定位精度更高更智能的AGV小车。

4.研究环境

本系统使用到的硬件和软件环境如下:
(1)激光雷达部分——采用slametc团队设计的rplidarA2。
(2)AGV小车部分——采用以亚克力板为底座的小车,配备Arduino板,树莓派。
(3)小车的运动系统——由安装在Ubuntu14.04 LTS中的ROS系统,在后期通过移植嵌入到树莓派中,结合使用伺服电机,来产生运动轨迹。
(4)地图构建——通过vs2010集成开发环境中的MFC框架来实现绘制。
(5)主要运用到的软件——indigo(Ubuntu14.04下ROS系统的版本)、rplidarA2激光雷达的驱动、turtlebot移动机器人平台、cartographer构建地图包、navigation导航包等。
(6)vs2010集成开发环境,使用MFC框架实现地图构建。

5.视觉SLAM框图

视觉SLAM框图主要一下由传感器数据,前端视觉里程计,后端非线性优化以及建图组成,如下图1-1所示:
在这里插入图片描述
整个视觉SLAM包括以下几个步骤:
1、传感器信息的获取。在视觉SLAM中主要为相机图像信息的读取和处理,如果在机器人上的画就是还有转盘、惯性传感器等信息的读取和同步。
2、视觉里程起。视觉里程计的任务是估计相邻图像间相机的运动,以及局部地图的样子
3、后端优化。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到一个全局一致的轨迹和地图。
4、回环检测。回环检测判断机器人是否到达过先前的位置,如果检测到回环,他会把信息提供给后端非线性优化进行处理
5、建图。他是根据估计的轨迹,建立与任务要求对应的地图。

6.本章小结

本章首先提出了室内定位的主要研究方向,其次介绍了激光导航在现代市场环境中良好的发展前景,然后简明地介绍了当前热门的室内定位技术的概念,并与传统的定位方式进行对比。虽然本团队的相关数据的准确性有待考证,数据的精准性还需多次试验计算,最终仍无法得到精确的数值,但本文在基于激光雷达的室内AGV导航技术研究领域具备一定的参考价值。第一章节还简单介绍了本组成员研究工作的流程、整个研究所需时间、以及本系统使用到的硬件和软件环境。在下一章节笔者将详述研究过程中的具体工作。

二、机器人的机械设计

1.机器人的设计需求

设计机器人,首先确定设计需求,下面为机器人必须满足的硬件要求:
机器人必须能够运送物体
机器人的最大允许载重为5kg
机器人行走速度在0.25~1m/s之间
机器人离地面间隙必须大于3cm
机器人必须能运行工作两个小时以上
机器人必须能够避开障碍物
机器人的高度在30cm~50cm
机器人要低成本的
要明确机器人的有效载荷,移动速度,离地间隙。

2.机器人的转动装置

移动机器人的导航有一个性价比高的最优解决方案——使用差分传动系统,这种差分驱动的机器人外形上看,由两个安装在同轴上的轮子组成,分别由两个独立的电机控制,以确保机器人的重心分布和稳定性。
另外,差分系统的机械零件部件主要包括电机、轮轴、机器人底盘。

2.1.电机和轮子的选择

选择电机时,应着重注意电机的参数设置,其中重点参数为转速和扭矩,实际操作中可通过给定需求来设置电机的具体运行参数。
确定电机的转速:
假定机器人行走的速度为0.5m/s,假设轮子的半径为10cm,底盘离地面的高度为3cm,能够算出电机的转速:
转速 =(60速度)/(3.14轮子的直径)
代入:
转速 = (600.5)/(3.140.1) = 30/0.314 = 95.54 r/min
当机器人行走速度为0.3m/s且轮子半径为10cm,计算出来的转速为95.54RPM,因此考虑设定100RPM为标准值。
确定电机的扭矩:
首先明确:
1、轮子个数为3个,包括一个万向轮,两个电机对应的轮子;
2、假设摩擦系数为0.6,轮子半径为5cm
3、机器人的总量W = 机器人的重量+负载,假设为15kg
4、重量分布在3个轮子上,可以写成:1N1+2N2 = W=150N,其中N1是分布轮脚的重量,N2为每个电机驱动的轮子的重量。
5、假设机器人处于静止状态,由于需要克服摩檫力作用,我们可以认为开始移动的时候的扭矩最大。
在机器人移动之前,可以认为扭矩和摩擦力都为0。满足这个前提后,可以得到最大的扭矩:μ * N * r – T = 0,其中,μ为摩擦系数,N为每个轮子上的平均重量,r为轮子的半径,T为扭矩。同时N = W/2(假设机器人的重量平均分布在3个轮子上,可以得到:
0.6 * (150/2)*0.05-T = 0
所以,最大扭矩为T = 2.25N●m
综合上面的设计,得到了下列电机参数值:
电机转速为100RPM
电机扭矩2.25N●m
轮子直径为10cm

2.2.设计机器人底盘

计算出机器人的电机和轮子的参数之后,即可开始设计机器人的底盘。这是机器人主体最为重要的一部份,底盘需要满足机器人具备载物能力,且能承受5kg的有效负载,低成本的需求,不仅如此,机器人还需具有能放置电子器件(如传感器,电脑等)的足够空间。
按照AGV小车模型的基本载物要求,我们先使用3D模型设计机器人的基本轮廓,这里主要使用Blender制作三维仿真模型。
Blender可以使用python脚本语言进行机器人的3D建模,同时它有一个内置的python解析器和脚本编辑器,用于代码的编写。Blender的python API接口能够完成绝大部分的功能,给python提供了一个bpy模块,可以通过bpy模块对3D建模进行修改,并且在设计完3D模型之后可以输出形成STL(立体平板印刷)格式的3D文件用于后续模型的3D打印等操作。
使用python进行建模,操作步骤为:
1.导入bpy模块,功能函数为: import bpy;
2.绘制底座,功能函数为:Draw_Base_Plate();
3.绘制机器人底座上的轮子,功能函数为:Draw_Motors_Wheels();
4.经过3D建模的效果图如下图2-1所示:
在这里插入图片描述

三、机器人的数学模型

1.机器人数学模型

作为机器人核心的部分之一的转向系统,其主要功能为帮助机器人在地图环境中运动。在研究过程中,我们使用差动驱动模型来降低机器人的复杂成本,并缩减尺寸以满足现在“精且小”的应用需求。
差动式驱动的机器人运动主体为可运行的同轴两轮,每个轮子分别由单独的电机控制。差动式驱动系统或转向系统是一个非完整系统,这就意味着当其姿态改变时会对主体的运动产生一定的约束。
运用6个自由度来表示一个移动的机器人或运载小车姿态(x,y,z,横滚,偏航,俯仰),当差动式驱动的机器人在x-y平面上移动时,他的平面姿态主要由x,y和θ来表示,其中θ表示机器人顶部的前进方向与x轴形成的夹角,如图3-1所示:
在这里插入图片描述
如果机器人在t时刻的位置为(x,y,θ),在经过δt之后的位置(时间为t+δt)为(x’,y’, θ’),其位姿态由控制参数V-left和V-right来确定。

2.正向运动学

在这里插入图片描述
从上图可知,在机器人不产生侧滑和地面平坦无起伏的情况下,车轮完整地运动转完一圈,相当于走了2πr的距离,其中r为轮子的半径。当机器人侧倾时,须绕着左右轮同轴延长线上的一个点进行选择,即为图3-3的ICC点,这个点被称为瞬时曲率中心。
由上图示,机器人运动学方程推导的核心是机器人的角速度ω,当每个轮子绕ICC点旋转时,轮子的速度为:v=2πr/ T,其中T为轮子绕ICC点旋转一周所花费的时间,角速度ω是由2πr计算得出,单位为弧度/s。因此可得到最终的方程:ω =2π/T。得到公式1
在这里插入图片描述
在取得角速度和速度基本的关系后,我们可以继续研究差动式驱动系统的详细模型,如图3-4所示:
在这里插入图片描述
将之前的公式方程同时应用在两个轮子上时,公式原理的计算过程较为复杂,但计算结果理论上是相同的,如下方程示:
在这里插入图片描述
其中R是从ICC点到两轮之间中点的距离,l为两个轮子之间的距离,由上述公式2和公式3,我们可以得到和R计算方式, 结合可得下述公式:
在这里插入图片描述
公式4和公式5可用于解决运动主体的正向运动学问题:假设机器人以角速度运动了δt秒,那么机器人的朝向或者角度为
在这里插入图片描述
且根据以及R的值及ICC旋转中心的点的坐标,通过三角函数可得:
在这里插入图片描述
综上所述,移动过后的机器人绕ICC旋转度后的图型如下:
在这里插入图片描述
假设起点机器人起点位置为(x,y),那么新的机器人的坐标为(x’,y’)可以由二维旋转矩阵计算得到,以角速度绕着ICC转了秒之后,在时刻的位置点可以由公式8计算获得:
在这里插入图片描述
由此可知,在给定之后,新的坐标(x’,y’,)结合公式6和公式8计算得到。
在机器人的运行过程中,关于轮子的精度测量存在一个重要问题,即轮子的转速不能通过直接测量得出,需要通过轮速编码器这种传感器测量得到数据。从轮速编码器获得的数据实际上为机器人的里程计数值。将此类传感器安装在轮轴上后,每当轮子进行运行时,传感器就会依运行动作,按顺序记录一个二进制信号,再将这些二进制信号输入至计数器,从而得到转速数据;
就是从t时刻到时刻所走过的距离:,由此我们可计算得出v:
在这里插入图片描述
将上述公式9、公式3和公式4进行整合,可得到R和:
在这里插入图片描述
这里的nr和nl代表右、左轮的编码器计数的结果,Vr和Vl分别为右、左轮的运动速度。当机器人从(x,y,),经过了时间之后,左右轮子的总步数分别是nl和nr,因此新的位姿点坐标为(x’,y’,):
在这里插入图片描述
综上所述,正向运动学的最终计算公式为公式12,其中公式13、公式14与公式15为计算中间变量值的具体公式。

3.逆向运动学

在差动式驱动机器人的运动学问题上,因为不能通过简单设定轮子的速度,让机器人移动到任意指定的位姿,这问题一直没有被解决,在非完整机器人的约束控制问题上,逆向运动学中如果给定一个差动序列(V-left,V-right),就可以采用以写方法来解决移动的约束性问题,在正向运动学公式推理中,将公式12带入公式15,就可以解决以写运动控制状态的特殊情况:
如果V-right== V-left => nrnl => R∞,0 => :意味着机器人是直线移动的,不变
如果V-right == -V-left =>nr
-nl =>R=0,且 (x’,y’,’) ==(x,y,) =>:意味着机器人绕ICC旋转,可以取任意值
结合上述操作,并结合采用以下算法就可达成让机器人从初始位姿移动到任意目标位姿的目标:
1、调整机器人的朝向,直到机器人朝向与初始位置到目标位置的连线方向一致,V-right=-V-left= V-rot
2、沿着当前方向直行,直至目标位置,V-right = V-left=V-ahead
3、调整机器人的朝向,直至与目标方向一致,V-right = -V-left= V-rot
其中V-rot和V-ahead可以任意取值。

四、电机编码器控制原理

PID是准确地固定电机转动的圈数和距离的最佳选择,它的速度闭环控制能够很好地解决电机转圈的问题。但由于AGV小车的最终形态是差动式驱动机器人,因此电机的精准度会极大地影响小车在室内的位置和小车基于基准坐标的距离和角度,接下来来探究一下PID的作用。
PID调节出现于上世纪30年代,所谓的PID,就是对偏差进行比例、积分和微分的控制。PID由三个单元组成,分别是比例单元§,积分单元(I),微分单元(D)。在工程和一些项目的实践中,一般P是必须的,所以随着社会的发展以及一些项目的需求,衍生出了很多PID控制器,如PD控制,PI控制,PID控制等等。
在微处理器中,因为控制器是通过软件实现其控制算法,所以必须对模拟调节器进行离散化处理,这样他就只需要根据采样时刻的偏差值进行计算控制,因此,我们需要使用离散的差分方程代替连续的微分方程。
假定采样的时间很短(10ms),这里的采样时间取决于ROS的信号控制,可以做一下处理:
使用一介查分代替一介微分
使用累加代替积分
由于AGV小车主要是控制位置的方向距离,因此,本导航小车使用的是位置闭环控制,位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例,积分,微分进行控制,使偏差趋向于零的过程。

1.理论分析

根据位置式离散PID公式:
在这里插入图片描述

2.控制原理图

如图4-1为位置PID控制原理图,从图中可以看出,本系统是使用闭环的PID控制的。为了使用和代码编写的方便,位置PID控制器使用软件实现控制的过程,代码里面的函数根据此图原理写成。
在这里插入图片描述

3.Arduino代码实现

基于AGV小车使用的方便,选择使用arduino来进行控制小车的前行,因此使用arduino来实现,其中output就是PWM的值。如图4-2所示:
在这里插入图片描述
入口参数代表一个结构体指针,每个结构指针代表一个电机的对象,其中主要的代码就是output,这个是输出给点击的一个参数,里面的公式符合PID的位置离散公式:,同时用有一个最大值处理,防止计算出来的PID超过允许的范围。这个PID调整在整个车的工程中是在5ms进行一次,这个有ROS系统通过通信来进行处理,由ROS来决定。

五、RPLIDAR系统的实现

1.Rplidar简介原理

Rplidar二维激光扫描传感器是由RoboPeak开发的新一代二维的激光雷达传感器,因此命名为RPLIDAR。他的测距原理是三角测距技术。
本次的研究课题采用A2代激光雷达,RPLIDAR A2采用的激光三角测距技术,配合RPVISION 2.0高速测距引擎,可达到每秒8000次的测距扫描。在传统的算法配合下,可以出色地解决不同环境下的实时定位与地图构建,为小车的成功定位提供了一个强有力的条件。如图5-1:
图5-1 激光雷达A2原理图
在激光测距的过程中,RPLIDAR A2会发射通过滤波调制的红外激光信号,激光点信号在打到目标点之后会产生反弹,最终被RPLIDAR A2接收。经过视觉采集系统时,内部的DSP处理器会进行实时解算,然后计算得出目标物体的距离数据且从串口输出。
在这里插入图片描述

2.通讯接口

RPLIDAR A2的串口,采用TX 和RX 与单片机进行通信,波特率固定在115200,获取或者修改配置都需要通过指令来进行操作。

2.1.请求命令总览

RPLIDAR内部支持的请求指令,是出厂前就已书写完毕的,包括发送和请求数据格式都有明确的规定,下表为RPLIDAR激光A2的请求命令预览图:
在这里插入图片描述

2.2请求指令的分布解析

RPLIDAR会自定义一个请求报文的格式,以A5十六进制开头,再根据不同的工作需求来设计和操作激光:
1、停止扫描(STOP)命令。这是停止激光转动并停止激光数据采集的操作,从表5-2中可以看出,STOP的值为0x25,因此报文的开头格式为A5 25,在外部发送此命令就可以停止扫描,进入激光空闲状态。另外,假设激光为得到运动指令执行STOP命令时,激光将忽略此动作。注意,在STOP命令中,并不会给上位机一个回应。根据多次实验所得经验可知,执行了此函数后,应当有1ms的延时操作,以保持激光根据设定流程正常运行。
2、软重启(RESET)命令。这是重启RPLIDAR的指令,在这个过程并不会断开上位机与激光的连接,而是重启激光的动作,让激光恢复至原始开机时,刚连通电源的初始状态。该指令一般使用于激光RPLIDAR运行错误或工作模式状态不正常时,这一控制指令存在,增强了激光的使用效率。报文格式为:A5 40,考虑到这是一个执行重启的过程,因此需要考虑延时时间,范围在3ms以上。同样,此指令无应答。
3、SCAN指令,是整个RPLIDAR运行的核心部分之一,在数据采集步骤中是首要也是最为重要的一步。通过发送指令A5 20,RPLIDAR A2激光头会做出旋转动作,同时由一头的发射头射出红外光线,再由另一头接收红外光线,做出多次应答,收集数据一般只在进入故障模式或外部系统要求停止时才会停止。如图5-2可知,接收报的文格式要求也是极为严谨的:
在这里插入图片描述
据上图所示,S = 1 代表RPLIDAR旋转的新的一圈;Quality为激光的采样点的质量,即为激光的置信度;C代表校验位,为代表报文起始字节的判断;剩下的15位为保存的RPLIDAR夹角;distance为保存激光的有效距离,因此RPLIDAR得到的是一个极坐标的数据。
4、其他的指令只需要根据需求进行设定即可,使用SCAN指令得到最有用的效果为重中之重。

2.RPLIDAR 代码实现

在操作过程中,编写了一个底层RPLIDAR的封装以及外部项目软件调用。主要步骤为:采用VS2010集成开发换件;运用C语言进行封装。目录结构如图5-3所示:
在这里插入图片描述
根据经验总结,要想完美操作RPLIDAR,主要还是需要靠通讯传输需求指令,以得到最佳结果。
在项目Rplidar_driver工程中,这是对激光的底层封装,定义了一些常用的发送指令,如图5-4:
在这里插入图片描述
通过此函数,向底层发送_sendCommand()函数,如图5-5所示:
在这里插入图片描述
在上位机接收数据的同时,调用_cancheScanData()等待返回结果,如图5-6所示:
在这里插入图片描述
在此过程中,编译得到rplidar_driver.Lib静态库,为激光定位建图打下基础,并提高了开发速度。

六.AGV小车建图系统

激光雷达配备安装在AGV小车的顶部,目的为检测目标与自主导航。移动式机器人导航的两大难点为地图构建与定位。本组成员使用SLAM算法的主要原因为:该算法是构建位置环境地图的移动式机器人中常用技术,它还可以实现通过跟踪当前位置信息来实时更新地图信息,使地图更为完善。
激光雷达构建出的地图不仅可以用于AGV小车的路径规划和导航,也可以通过地图来获取环境的具体信息。激光雷达将周边的障碍物生成数据轮廓,AGV小车据此信息判断周围环境的情况。实现定位则是根据创建的地图,预估AGV小车姿态的过程。

1.MFC简介

本课题在实际操作时采用MFC框架进行画图,该框架被诸多科研人员沿用,虽然更接近底层,但学习成本较高。虽然MFC开发难度大,越来越多的研究人员倾向于使用QT,但本组认为此次课题研究由理论底层为基实现创新,所以使用发展较为成熟的MFC更切合这次的课题。

2.构图软件流程图

从程序开始运行时,首先手动连接AGV,并判断AGV是否连接成功。如果连接不成功,则返回上一层重新连接小车;连接成功则开始连接RPOS系统(RPOS系统为AGV小车的控制系统)。
进入RPOS之后,程序会进入分支流程。则开始使用线程,具体流程为:
1.使用第一个线程获取RPLIDAR A2对象,对象通过串口发送指令,接收激光的激光点数据,并且实时解析数据,并将解析后的数据发送给第二个线程用以构图。
2.在第二个线程中,将线程1的数据绘制在MFC画布中,并且根据激光的置信度的侧重点,过滤无用的激光数据。除了构图,还可以控制进行中的小车的运动。
3. 系统将目标点传给ROS,ROS负责解析,系统得到对应路径规划,以及相应的速度,通过正向运动学以及旋转矩阵得到对应的脉冲值,通过PID调制,让小车准确到达目标点。另外,此软件还具备保存地图和上传地图的功能。
流程图如图6-1所示:
在这里插入图片描述

3.RPLIDAR 数据的采集

在上一节中,详解了封装RPLIDAR A2的底层库内容,在使用封装的rplidar_device.lib静态库时,需要根据实际需求将激光点过滤,结果如下图所示:
在这里插入图片描述
在激光点过滤过程中,本人使用了自己封装的lib库,快速采集了激光打点的位置,并将数据显示在画布中。打点数据为构图奠定了基础,地图也需要通过这些激光点绘制得出,主要的算法以及相应的指令在第五章RPLIDAR部分有详述。

4.软件的开发与使用

关于软件功能方面,如图6-3为软件的菜单栏,本软件采用的是MFC单文档框架。从程序资源视图中的菜单栏可以看到,本软件操作简单明了,计算机程序逻辑清晰,如图6-3所示:
在这里插入图片描述
软件在开发过程中,需要使其与小车连接在同一个局域网中,通过wifi建立实现实时通信的基础。因此在软件启动时会创建一台车的对象pf,通过extern关键字把小车对象pf发射出去,使得对象能够在软件中被全局调用,降低多个类之间指针对象的传递,提高代码的耦合性。软件连接AGV小车时会自主判断是否连接成功,若失败则需检查网络信号是否处于连接状态。
当连接AGV小车成功之后,系统将自动开始构图,如图6-4所示:
在这里插入图片描述
要绘制出上图,首先需要获得激光数据,通过rplidar_driver中的_cacheScanData()函数得到,如下图6-5所示,是激光点的极坐标以及(x,y,θ):
在这里插入图片描述
RPLIDAR激光旋转一周时得到的标准数据只有距离和角度(弧度),数据往往处于有效和无效的状态间。而利用激光打点构图,使用的是有效数据。但无效的数据虽然不可使用,但可以提示小车,可探索未知领域。
图6-4中的黑点是使用激光的有效数据构图获得,构图采用了MFC单文档框架,使用画布的方式,画布上的像素点是由激光打点模拟而成。画图主要是运用像素的操作原理,将地图虚拟成相机拍下的bmp图片,对bmp图片进行操作,计算黑点,寻找小车原点。小车的位置点即为激光点位置,两者的位置可以由科研人员自主定义。
模拟地图就此生成,但是单从我们得到的激光数据可以看出,数据存在置信度,这是画图精准性的影响因素之一。因此在画图的过程中,一开始就可假设激光的可信度为100%。假设图6-4中显示的黑点为100%,根据激光的可信度,相应的调整灰度值,使其在纯黑色0的状态下在根据可信度实时更新。除此之外,激光的可信度通常不可能是100%,通过黑点的叠加成像,就可逐渐确定障碍物的位置。构图过程中在采用了多组激光点同步预测的结果,黑点代表障碍物时,障碍物为激光点。由此构建出室内地图。
通过采用全局放大的方法,地图还具备放大缩小的功能。可以使室内的环境更加逼,障碍物更加明显。为提高用户的体验,本研究小组还添加了实时坐标更新、界面像素与坐标像素的转化等功能。
在使用软件构建地图时,要实时操控小车的运行,只需要在界面上点击,就可以实现点到点的运动(也支持多点运动),将多点累计,即可让小车实现自主运行。
还可通过键盘的上下左右键来控制AGV小车,实现操控小车运行的便捷操作。
以上功能,均使用MFC内部的消息处理机制。此类消息处理机制,具有便捷性高,扩展能力强的特点。
另外在图6-3右中,系统还有地图的保存,地图的清除,和地图的上传功能。它能将当前的地图进行本地储存,将地图数据保存,在下次开机运行时上传地图,帮助小车快速定位。
在地图的保存功能中,主要需要解决格式问题。仅保存一张地图,系统无法识别,因此保存地图时使用bmp格式,只需把像素点保存下来即可;如果保存格式为png,则需要进行格式转化:通过GDIPlus提供的一些方法来遍历像素点。关键代码如图6-6示:
在这里插入图片描述
将对应的值分别保存为画布的形式,即可保存为png格式。
全软件算法比较难的就是如下图6-7所示中控制箭头的方向:
在这里插入图片描述
上图中箭头表示小车的正方向,但MFC中没有现成的算法实现箭头的旋转,因此参考slam的旋转向量得到旋转矩阵,实现箭头的旋转。

七.软件的发布

1.软件打包

软件完成之后,使用免费的软件打包软件Inno SetupComplier,使用Inno Setup Script 向导,如图7-1所示:
在这里插入图片描述

以此点击下一步,把软件的可执行文件选择进去,如图7-2所示,图中选择MySlamMap.exe,下框选择所有的依赖运行库:
在这里插入图片描述
在打包的过程中,会出现如下图7-3所示:
在这里插入图片描述
打包完会得到安装程序如图7-4所示:
在这里插入图片描述

2.软件安装

软件的发布就是一个可执行程序双击进行安装,如图7-5所示的EXE执行程序:
双击之后一直点击下一步即可,如图7-6所示:
在这里插入图片描述

图7-6 安装过程
安装完之后的目录如图7-7下:
在这里插入图片描述

图7-7 软件目录
本软件已经部分商业化,没有加密狗,是不可以正常使用的,会出现程序异常退出,如图7-8所示:
在这里插入图片描述

图7-8 软件异常结果
这样就大大提高了软件的加密度,也是软件发布的一个过程之一。

八.总结与展望

本组成员此次的课题是围绕基于激光雷达的室内定位技术中关于定位与导航两个研究热点进行展开的。目前移动机器人在消费级市场上占比例越来越大,因此能够解决导航的精准问题成为了非常重要的关注行话题。
在第一章中介绍现在室内定位的关注度以及实现室内定位的几种较为常用的、新兴的技术;介绍了本文主要的研究内容,以及整个软硬件的实验环境。同时讲述了SLAM的发展以及SLAM的应用。
本文关于AGV小车构图方面,RPLIDAR A2获取激光点的数据,各路算法得到根据激光点得到的地图,提高了定位的精确度。通过正向运动求解,获得了速度,和对应的脉冲值、坐标点以及小车轮子的关系,提高了定位的精确性。
本人在进行室内定位技术的研究时,对SLAM 的一些数学知识以及算法的不熟,所以在有些方面难免存在错误。本文中还有许多可以修改与完善的地方,李群李代数等一些数学知识更难懂,以后还可以通过滤波处理将构建的地图能够更加的接近真实,以此提高准确性。
室内定位作为一项关注度越来越高的技术,未来的发展潜力和市场前景是很广阔的,希望能够在这一方面进行更加深入的学习与研究。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的广东仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值