谭 浩,阳 清,李江婷,张嘉麟
(湖南理工学院 机械工程学院,岳阳 414006)
随着计算机技术不断向智能化发展,嵌入式设备也更多应用在生活和工作领域中,基于无线通信的嵌入式自主导航系统的研究需求显得尤为迫切。ROS 全称为Robot Operating System,是一款优秀的机器人操作系统[1],ROS 平台以节点的思维方式对各个模块进行开发,能够简化操作流程,提高开发效率。运用ROS 移动机器人在生产生活中进行开发能够降低人力成本,提高生产的科技化和自动化,尤其是超市、商场等场所都需要一个可自主移动的视频遥控监控系统,也就需要视频监控与机器人技术的智能结合。
本文研究的智能小车,基于ROS 平台采用了上位机+下位机的控制模式,在全局路径和局部路径分别采用D*算法和动态窗口算法,利用GPS 和激光雷达等模块进行路径规划设计研究,可以在构建地图的基础上实现自主导航和避障。同时,本设计采用了基于物联网的远程遥控模块,实现手机端,PC 端数据共享,可以远程进行人机交互,从而替代人工执行相应的任务,提高科技化水平,降低人工成本。
此控制系统在软件上采用“Ubuntu+ROS”的控制方式,在模式上采用“上位机+下位机”的控制模式。Ubuntu 是一种完全基于Linux 的操作系统,在此平台上可以享有很多开源的资源,对于技术的学习和开发有显著作用,也能够胜任常规的文字处理和系统编程,ROS 是机器人编程的系统框架,如图1所示,在这个框架上可以把很多零散的部件结合起来,进行模块节点之间的通信。在“Ubuntu+ROS”平台上,机器人的决策、计算、控制算法可以更好地组织和运行。监控平台选择集成化的视频监控设备,这是一款基于萤石云平台无线监控器,在手机或者电脑上登录APP 就能实时进行监控[2]。
图1 巡逻车平台架构图Fig.1 Patrol vehicle platform architecture diagram
上位机硬件部分:树莓派运动控制器,激光雷达,摄像头。
下位机硬件部分:STM32 系列运动控制器,WiFi模块,带编码器的直流电机,超声波,陀螺仪,里程计。
本设计的硬件结构框架如图2 所示。上位机由树莓派系列开发板作为整套系统的数据处理中心,负责接收激光雷达的数据和STM32 反馈的数据,通过Ubuntu 系统实现ROS 的实时通讯,下位机由STM32 系列开发板作为核心控制中心,负责与上位机通信,进行数据传输,实现对陀螺仪,超声波,电机,里程计传感器等模块的数据收集与处理[3],同时通过WiFi 模块将巡逻车感知的各项数据上传到电脑或手机,在手机PC 端上也能实时监控周围环境,当需要人为介入控制时,可以通过手机APP 和电脑PC 端远程控制。
图2 硬件结构框架图Fig.2 Hardware architecture diagram
树莓派作为整个系统的大脑,需要连接激光雷达和下位机的各个模块。如图3 所示,数据采集处理模块将采集的数据,传递到SLAM 模块进行SLAM建图,SLAM 建图依赖于ROS 平台的Gmapping 功能包,在Gmapping 功能包中能对巡逻车进行定位和建图[4],在对各个模块的数据融合建图后,通过自动导航模块中Navigatin 下发到各个控制节点,对下位机下达指令进行自主导航。
图3 导航模块简图Fig.3 Navigation module diagram
Gmapping 功能包主要包括订阅智能机器人的深度数据、IMU 数据和里程计数据等,如果需要进行对一些重要数据的选择,还可以生成一个基于概率的二维栅格图,而Gmapping 功能主要基于Fast-Slam,FastSlam 是把Slam 分解成机器人定位和建图的过程,其中FastSlam 的最主要特点为粒子滤波[5]。粒子滤波是一个非参数滤波,因为粒子也就是数据,通过对这些数据的近似或后验分布,粒子数据数量越多,状态中的一个部分就被数据填充的越密集[5]。在FastSlam 里,粒子滤波是对机器人的路径进行计算,为每一个粒子规划地图。本设计采用“激光雷达+Gmapping”方式,其主要优点在于计算数据量小、精度高、环境影响因素小。
Navigation 功能主要包括运用ROS 机器人的传感器数据、里程计信息数据和Gmapping 地图数据的反馈进行自主导航。Navigation 导航分为全局规划和局部规划两部分,分别由Navigation 的全局规划器进行全局规划的最短路径设定和局部规划器进行局部最优路径的设定,全局规划的路线模式选择为拓扑路线,靠节点与节点之间的连接关系进行路径规划(通过D* 算法进行路径的规划),局部规划的路线模式建立栅格地图进行局部路径设定,从而实现机器人的局部避障[6]。其中全局规划将生成的全局地图分段发送给局部规划器,局部规划器在收到全局规划器的数据后结合自己的局部规划算法,转化成控制指令控制小车向预设的目标点运动。
STM32F103 有丰富的外设接口,强大的运行算法,支持多种通讯方式,能够及时接收和处理各个模块传递的数据。例如,如图4 所示为MPU6050模块原理图,其内部融合了三轴陀螺仪,三轴加速度计和1 个数字运动器,可使用J2 CON2 口连接到STM32F103 控制芯片,以SPI 通讯方式传输数据,下位机在得到数据后上传到上位机,在上位机进行数据融合算法,如图5 所示。
Serial 库是ROS 自带的进行串口通讯的库,在本设计中主要应用于上位机ROS 设备与下位机单片机的通讯。Serial 是一种标准的通讯协议,主要进行ROS 设备与非ROS 设备的通讯,它为非ROS 设备提供了ROS 节点和话题服务的发布/订阅功能,让非ROS 设备适用于ROS 的节点通讯的模式[7],在系统中无需在上位机编程就能够轻松进行上位机与下位机的通讯和数据交互,提高了系统数据传输和通讯效率,同时降低了开发难度。
结合实际情况研究,当巡逻车出现故障或者路线错误时就需要人为介入纠正,所以结合物联网的研究增加了远程遥控模块。如图6 所示,远程遥控的WiFi 模块直接与下位机进行串口通信,STM32反馈的各模块数据可以通过WiFi 模块上传到阿里云物联网平台,在该平台通过订阅话题(Topic),用手机或者PC 端订阅对应的话题(Topic)后就可以实时观测到各模块数据,同时可以用APP 或PC 端订阅Topic 发布指令,主机PC 或手机移动端向机器人远程下发机器人导航的目标位置坐标[x,y,θ],其中x 与y 分别为机器人在环境地图中的横坐标与纵坐标[8],θ 为机器人到达至目标位置时的姿态角。当机器人到达目标位置后,上位机以话题消息的形式与下位机进行通讯,下位机通过电机工作驱动从而远程控制巡逻车。
图6 下位机框架Fig.6 Lower computer framework
自主导航的实现一般分为3 个部分:①环境地图的建立,在ROS 系统中可运行Gmapping 节点得到;②路径规划的设定,运行Move_base 可以实现;③底盘控制,运行My_robot 节点实现控制。
实现自主导航的具体步骤如下所述:ROS 机器人通过SSH 命令连接到PC(在Ubuntu 上与开发版连接需要添加桥接模式),在Ubuntu 上第一次新建终端,导航到建立好的地图文件“~/ros_ws/src/th/maps”,查看地图文件,新建第二个终端,运行导航节点“roslaunch robot mickx4_amcl.launch”,终端出现启动信息,新建第三个终端,运行move_base 节点,然后打开Rviz 可视化界面,在Rviz 的左侧订阅话题导入相应的数据(图7(a)),此时ROS 机器人自主导航所需的数据已经全部导入。点击“2D new goal”,在地图上选择目标点,Rviz 界面会出现红色箭头和绿色箭头,其中红色箭头表示全局规划的目标点和姿态位姿信息,绿色箭头表示局部规划的工作路径(图7(b))。局部规划器主要是避障、优化速度等功能的实现,确保生成局部最优路径[9]。在实验过程中,一旦选定了目标点,Move_base 中的全局规划器会自动生成一条最优路径。
图7 Rviz 可视化实验结果Fig.7 Rviz visualization experimental results
本设计在封闭和开放的环境下进行实验论证,结果表明该设计能够很好地进行自主导航,在人机交互的控制模式下该设计能积极响应远程指令,在指令结束后也可按照原定路径自主行进,具有良好的自主导航性能,对移动机器人适应未知复杂环境作业有着重要参考价值,提高了巡逻的智能化发展水平,节省了人力资源,降低了人工成本。在系统设计方面,开发人员还需要提高机器人的智能化水平,提高巡检效率,在周围环境发生异常时能够及时感应,并向控制中心发出警报。