移动机器人自主导航系统及上位机软件设计与实现
2022-02-16刘安东
崔 奇,夏 浩,滕 游,刘安东
(浙江工业大学 信息工程学院,杭州 310023)
0 引言
移动机器人是一种在复杂环境下工作,具有自行感知、自行规划、自我决策功能的智能机器人。随着机器人与传感器技术的高速发展,移动机器人被广泛应用于各种各样的领域,如智能仓储机器人[1]、清扫服务机器人[2]、自主水下机器人[3]等。
上述各类机器人的功能实现需要机器人具有自主导航的能力,而实现自主导航则需要SLAM与路径规划技术。文献[4]利用改进A*的路径规划算法在机器人平台进行了实验仿真,结果表明该算法可提高仓储系统的运行效率。文献[5]利用高效模板法与动态窗口法进行路径规划,可以在动态环境中有效提高清扫服务机器人的安全性和工作效率。文献[6]利用电子海图的先验知识和改进粒子群优化算法对机器人进行全局路径规划,在复杂海域航行时,可以缩短航程,提高安全性及工作效率。文献[7]利用改进RRT-Connect算法删除冗余节点来简化路径,通过添加障碍物周围的模型和定义安全距离,提高家庭服务机器人工作的安全性。
在自主导航系统中,SLAM技术[8-9]是通过激光雷达传感器,获取周围环境的信息,实现即时定位与地图构建的过程。相比于视觉传感器,激光雷达传感器不受环境光照的影响,对障碍物识别准确度与可靠性高。路径规划技术[10-11]则是在SLAM建立完整地图基础上,按照某种评价指标寻找一条从起始点到目标点的最优无碰撞安全路径。然而由于自主导航系统的定位、建图与导航等一系列操作较复杂,且移动机器人地图、数据信息和运行轨迹无法直观化,为此需要设计上位机将定位、建图与导航等功能集成到上位机操作界面,同时实时显示移动机器人地图、数据和运行轨迹。文献[12]使用目标跟踪算法提取特征点完成视觉跟踪任务,并设计了上位机软件实时绘制机器人运动轨迹。文献[13]设计了车辆勘查机器人上位机软件,通过无线网络实现机器人远程操作和车辆图像信息实时显示。
本文针对移动机器人自主导航问题,采用C++语言与图形界面设计了一款基于Qt的跨平台实时数据可视化上位机软件。该软件界面控件布局合理,可以分页显示数据与地图信息,方便高效地实现远程自主导航,具备远程通信、实时显示机器人数据信息、发布初始位置与目标位置、可视化地图和机器人运动轨迹等功能,从而达到数据与地图可视化和自主导航的效果。
1 移动机器人硬件系统与功能简介
如图1所示,本文实验设备是Turtlebot2移动机器人。该移动机器人底盘左右两边各有一个差分电机,驱动机器人前进。前后各有一个辅助轮,对机器人起到平衡的作用,保证机器人有较好的稳定性,防滑性。该机器人的主要硬件组成如下所述:
图1 TurtleBot2移动机器人实物图
1)有刷直流电机:移动机器人使用型号为RP385-ST-2060的有刷直流电机,额定电压为12 V,额定负载为5 mN·m,额定负载电流为750 mA,电枢电感为1.51 mH,有电压源和脉宽调制两种控制方法。有刷直流电机作为移动机器人的动力系统重要组成部分,控制机器人移动。
2)3轴数字陀螺仪:移动机器人使用的3轴数字陀螺仪测量范围±250度/秒,偏航轴默认设置为±20度/秒至±100度/秒的范围内校准。三轴陀螺仪可以测量6个方向数据信息,最主要的作用是测量角速度,判别物体当前运动状态。
3)角位移编码器:角位移编码器采用的是52线/转,精度为11.7 ticks/mm,能够将角位移转换成周期性的电信号,通过该电信号可以计算出机器人里程计信息。
4)激光雷达传感器:移动机器人使用由HOKUYO公司推出的URG-04LX-UG01激光雷达。测量范围240°,DC5V输入,用于机器人避障和位置识别,精度与分辨率较高,低功耗且供电方便。
2 移动机器人自主导航
本文利用移动机器人执行SLAM技术和路径规划算法,进行数据显示与地图可视化来验证上位机功能效果。首先通过SLAM技术建立真实环境地图,再利用改进RRT*算法[14-16]进行全局路径规划以及动态窗口法[17-18]进行局部路径规划。最后通过上位机界面完成一系列远程操作,实时读取机器人的线速度、角速度和当前位置信息等,可以高效、便捷地实现移动机器人自主导航功能。
改进RRT*算法将椭圆状态子集采样方法与智能样本插入相结合,可以减少采样生成的节点数和得到最优路径解所需要的迭代次数,从而优化路径长度和提高算法收敛速度。改进RRT*算法如下所示。
算法1:改进RRT*算法
1Va←{xs};Ea←Ø;Ta←(Va,Ea)
2Vb←{xg};Eb←Ø;Tb←(Vb,Eb)
3cbest←∞
4 fori←0 toNdo
5 ConnFlag←True
6xrand←Sample(xs,xg,cbest)
10 ConnFlag←False
13 ifFlagthen
14Ta←InsertNodes(xrand,xmin,Ta)
16else
17Tb←InsertNodes(xrand,xmin,Tb)
19 return {Ta,Tb}=(Va∪Vb,Ea∪Eb)
上述改进RRT*算法仅适用于基于环境已知的情况,若机器人在移动的过程中出现未知障碍物,则有可能发生碰撞。因此,需要与动态窗口法相结合,实现局部动态避障。动态窗口法[19]主要是在速度空间内采样多组角速度和线速度,在这些速度下模拟机器人下一时间间隔内的轨迹。在获取多组轨迹后,根据相应的评价指标,分别对这些轨迹进行评分,选取评分最高轨迹,再利用该轨迹所对应的速度来控制机器人运动。
在局部路径规划中,动态窗口法通过设计合适的评估函数选取最优的轨迹。确保最优轨迹规避未知障碍物后,能够回到改进RRT*算法规划的全局参考路径上,朝着目标位置快速运动,从而完成移动机器人自主导航避障任务。评估函数定义如下:
G(v,w)=
k[αhead(v,w)+βdist(v,w)+λvel(v,w)]
(1)
其中:k表示平滑系数;α、β与λ表示加权系数,head(v,w)表示机器人的方位角评价函数,dist(v,w)表示当前速度所对应轨迹与障碍物之间的最近距离,vel(v,w)表示当前轨迹速度大小的评价函数。
通过上述算法,移动机器人可实现自主导航功能,能够安全、高效地到达指定目标点。同时上位机可以获取机器人数据信息与当前话题,并在地图中实时可视化机器人的运动与轨迹状态。
3 移动机器人上位机软件设计
3.1 Qt开发环境
Qt是一款基于C++的跨平台图形用户界面应用程序开发类软件,Qt不仅支持PC和服务器平台,包括Windows、Linux、macOS等,还支持移动和嵌入式操作系统,包括iOS、Embedded Linux、Android等。跨平台意味着只需要编写一次程序,在无需改动源码情况下进行编译,就可以形成在不同平台上运行的版本。这种跨平台功能为程序开发者提供了极大的便利[20]。Qt使用独特的信号与槽机制进行对象间通信替代传统的回调函数机制进行对象间信息传递,降低了Qt对象之间的耦合度,确保参数传递的准确性与唯一性。Qt有着丰富而又全面的C++图形库,基础的封装模块主要有Core模块、OpenGL模块、SQL模块、XML模块、Network模块与Test模块等,这些封装模块都支持多线程操作,极大地提高了Qt软件开发大规模复杂工程项目的能力[21]。
Qt Creator是由Nokia公司推出的一款新的轻量级集成开发环境,功能强大,操作界面简洁,配置环境简单,利用Qt应用程序框架可以快速方便的完成开发任务。Qt Creator包括项目生成向导、高级C++程序语言代码编辑器、浏览文件以及图形化的GDB调试前端等功能。本文上位机软件的设计是基于Qt5.9.9版本下开发的,由于该版本较高,能够满足项目开发的需要。其操作界面如图2所示。
3.2 上位机软件设计过程
本文基于QMianWindow作为主窗口类设计的上位机。主窗口包括主菜单栏、工具栏和状态栏,操作方便、可扩展性好。在主窗口中加入QWidget类,QWidget是所有用户界面对象的基类,可以在其中加入各种界面组件,如QLabel、QPushButton、QLineEdit等,这些界面组件的具体功能都是通过QWidget类得以实现。同时,使用了QTabWidget组件进行分页处理,实现不同功能界面的切换,上位机软件的主界面如图3所示。
图2 Qt Creator操作界面示意图 图3 上位机软件主界面
图4 上位机工作流程图
该上位机软件主要由2个主界面组成:主从机的登录通信模块以及机器人当前话题列表和运动信息显示界面、可视化界面以及机器人启动设置和控制模块显示界面。上位机工作流程如图5所示,利用全局规划与局部规划算法完成自主导航功能。上位机软件所实现的主要功能如下:
1)建立主从机之间的通信:将两台电脑连接在相同的局域网下,通过上位机分别获取主从机的IP地址以及URL地址,再通过SSH协议让从机登录主机并且控制主机,从而完成登录通信过程。
2)获取机器人当前话题列表及运动信息:当运行Launch文件时,会产生许多ROS话题。为了方便查阅相关话题,在上位机界面中进行实时显示。此外,订阅速度与里程计话题,可以读取当前机器人的线速度、角速度以及当前位置信息。
3)界面可视化及图层信息获取与发布位置信息:创建一个librviz界面类,利用RenderPanel对象向ui界面中添加显示界面,并且可以实现界面放大、缩小和平移操作。通过createDisplay函数在界面中添加图层,如栅格图层、地图图层、雷达图层等。通过可视化图层信息,可以实时观察机器人自主导航过程中的运动状态与轨迹。此外,可以利用上位机发布机器人的初始位置与目标位置,通过rviz控制对象获取ToolManager工具对象,通过工具对象选取导航初始位置与目标位置。可视化机器人导航界面如图5所示。
4)启动设置与实现机器人控制:为了让机器人自主导航操作更加方便、简洁,在QGroupBox组件中加入启动机器人、激光雷达等按钮。此外,在启动激光雷达建图后,通过控制按钮对周围环境进行建图,不需要利用键盘对机器人控制。保存好地图后,就可以利用路径规划算法对机器人进行定点导航。
4 实验验证与分析
本文所采用的实验设备为第1节中所提及的Turtlebot2移动机器人,该机器人搭载了一台主机和Hokuyo激光雷达。另外一台从机运行上位机软件,远程操作移动机器人。具体实验步骤如下:
1)机器人硬件系统与主机通过USB接口进行串口通信,从机的上位机软件系统获取主机与本机的IP地址及URL地址,进一步与主机建立通信并且获得主机的控制权。同时,不需要在终端进行输入指令,就可以查看当前机器人的话题列表信息,并且可以实时获取当前机器人运行的线速度、角速度以及当前位置信息,如图6所示。
图5 可视化机器人导航界面 图6 登录通信界面以及机器人信息
2)根据如图7所示的实验环境,通过点击上位机界面中激光雷达建图按钮,利用激光雷达和gmapping包对真实环境建图。通过界面中的控制按钮移动机器人,完成建图任务。建立完整的地图如图8所示。
图7 真实环境
图8 建立地图
3)首先通过上位机初始位置按钮在地图中为移动机器人选择初始位置,再通过目标位置按钮选择导航的全局目标点。此时,利用改进RRT*算法规划出一条全局最优路径,并在地图中实时记录机器人的运行轨迹,如图9所示。
图9 机器人自主导航
4)若移动机器人在运动过程中出现未知障碍物,如图10所示,灰色箱子是地图中添加的未知障碍物。移动机器人可以根据当前位置信息,结合激光雷达检测到未知障碍物,利用动态窗口法进行局部路径规划,在规避未知障碍物后重新回到全局参考路径上,如图11所示。
图10 添加未知障碍物 图11 动态窗口法局部避障
5)判断机器人是否到达全局目标点。如果机器人到达指定目标点,则完成自主导航任务。否则,如果未到达目标点,则返回步骤4)继续运动。
实验过程中,移动机器人的实验参数设置如下:最大线速度为0.5 m/s,最大角速度为1 rad/s,障碍物的膨胀半径0.3 m,机器人半径为0.2 m,传感器上传信息频率为5.0 Hz,地图更新频率设置为0.5 Hz。图9中栅格地图的分辨率为20 cm×20 cm,设坐标原点为左下角弧形顶点,水平方向为x轴,竖直方向为y轴,起始位置设为(1.6 m,3.2 m),目标位置设为(1.5 m,12 m),机器人实际所走的路线如图中的线所示,最终到达目标点,与期望目标点误差0.12 m。由于地图定位不准确,里程计计算出的机器人当前位置存在偏差和机器人与地面会存在打滑的可能性,导致了机器人实际到达目标点与期望的目标点存在误差,但误差不超过0.2 m,可以满足实际需求与应用。
5 结束语
本文在跨平台的Qt开发框架下,以C++面向对象编程语言,设计和开发了一款界面简洁且功能齐全的机器人自主导航系统的上位机软件。首先介绍了上位机软件涉及的改进RRT*算法与动态窗口法,并且详细阐述了上位机软件工作流程、实现功能以及使用的组件。通过上位机与机器人之间建立通信,远程控制机器人实现建图与导航功能,并且上位机界面实时可视化机器人地图、速度、里程计以及轨迹等信息。最后,通过真实环境进行实验,在线实时显示机器人各状态信息和可视化地图等,验证了改进RRT*算法与动态窗口法的可行性与实用性、上位机软件功能的实时性与有效性。