基于Kinect移动机器人导航设计与实现
2018-10-27许志强翟漪璇韩金鑫颜义鹏成怡
许志强 翟漪璇 韩金鑫 颜义鹏 成怡
【摘 要】本文基于Kinect深度摄像头,结合2D SLAM算法设计出了一套精确的轮式移动机器人导航系统。该系统主要包括底盘驱动、数据采集、PC三大部分。通过机器人自身携带的Kinect深度摄像头对室内环境扫描,利用Gmapping算法构建出环境地图,在已构建出的栅格地图基础上,结合A*算法和动态窗口法,实现机器人的自主定位与导航。
【关键词】移动机器人;嵌入式控制;A*算法;自主导航
中图分类号: TP242 文献标识码: A 文章編号: 2095-2457(2018)16-0200-002
DOI:10.19694/j.cnki.issn2095-2457.2018.16.092
【Abstract】Based on Kinect depth camera and 2D SLAM algorithm,an accurate wheeled mobile robot navigation system is designed.The system mainly includes three parts:chassis drive,data acquisition and PC.Through the Kinect depth camera carried by the robot to scan the indoor environment,the environment map is constructed by Gmapping algorithm.On the basis of the constructed grid map,the autonomous positioning and navigation of the robot are realized with the combination of A* algorithm and dynamic window method.
【Key words】Mobile robot;Embedded control;A*algorithm;Autonomous navigation
0 引言
目前,国内外多集中在利用激光传感器和里程计等载体实现在未知环境中移动机器人的自主导航,而随着机器视觉技术的快速发展,利用机器视觉传感器实现载体重建环境地图成为可能。由于智能载体的导航技术受到特殊任务的限制,GPS等有源导航方式已经不能满足当前的自主导航任务。而基于SLAM算法的导航是根据载体及环境特征的相对位置实现推位的一种导航方式,是无源导航,对外不接收和发送信号,能够保证完成任务的隐避性。因此,本文就室内环境下移动机器人的自主导航问题进行研究,从而设计出了一套完善的移动机器人自主导航系统。
1 系统组成
本文设计的自主导航系统主要由底盘驱动,Kinect深度摄像头,PC三大部分组成。机器人底盘安装两个DC12V并且带有霍尔编码器的直流电机,底盘上的Arduino控制板利用采集到的直流电机上的霍尔编码器信号,计算出机器人底盘里程计信息。Kinect深度摄像头采集障碍物到摄像头的距离数据。PC利用得到的距离数据,通过Gmapping算法,计算得到室内环境的栅格地图。系统组成框图如图1所示,搭建机器人平台如图2所示。
下位机硬件主要由两部分组成:机器人底盘和Kinect深度摄像头。机器人底盘基于差速驱动控制,由两个12v DC电机、控制板Arduino UNO、电机驱动板L298P。上位机是个人电脑。上下位机通过串口进行通讯,将上位机计算所得脉冲数据传递给下位机,将下位机编码器测的里程计数据发送给上位机,实现数据间的交互,从而达到控制机器人导航避障的目的。
控制板Arduino UNO搭载高性能的8位AVR ATmega 328p处理器,该处理器外设特点:6个通道的PWM、可编程串行USART、8个10位ADC、两个具有独立预分频器和比较器的8位定时器/计数器,I2C通信、具有独立片内振荡器的可编程看门狗定时器等。完全能够满足小型机器人特点的要求。Arduino UNO控制板采集底盘两路电机的里程数据,控制电路通过PWM信号输出来控制直流电机转速。L298P用于直流电机的驱动。
Kinect深度摄像头是微软研制开发,应用于体感游戏的一个配件。它具有动作捕捉、语音识别、影像识别、采集场景纹理和深度图像等功能,是一种可以获取场景深度的设备。本设计中主要利用Kinect采集深度信息的功能,实时获取环境信息并加以利用。Kinect采集的深度信息精度是毫米级别,能够满足栅格地图的精度要求。
2 软件部分设计
本文设计的移动机器人导航系统是基于ROS 平台,在利用Kinect提取出点云数据,依据Gmapping算法构建出环境地图,然后在已构建环境地图的基础上,通过A*算法实现机器人的自主定位和导航。
Gmapping是一种高效的Rao-Blackwellized粒子滤波器,用于根据激光距离数据得出栅格地图,是一个比较完善的地图构建开源包,使用激光和里程计的数据来生成二维地图。在采样的过程中将机器人最新的观测信息作为参考,使用更加接近目标后验概率分布的提议,降低了机器人位姿估计的误差,在粒子更新过程中,以当前有效粒子数量和粒子的多样性为条件进行重采样操作,提高了地图创建的精确性和稳定性。
A*算法是一种具有启发式特征的全局路径规划算法,该算法具有较强的灵活性,能够适应于不同的规划场景。A*算法主要特点是同时考虑当前节点与初始节点和目标节点的接近程度,采用启发式评价函数(1)计算该节点的距离代价。
f(n)=g(n)+h(n)(1)
其中,f(n)表示当前节点与初始节点和目标节点之间的代价评估函数;g(n)表示在环境状态空间中,当前节点与初始点之间的真实代价;h(n)表示从当前节点n移动到目标点路径的代价估计值。移动机器人的A*算法实现流程如下:
1)根據地图信息新建OPEN表和CLOSE表,将初始节点S添加至OPEN表,地图中障碍节点添加入CLOSE表中;
2)判断OPEN表是否为空表,若否,将OPEN表中第一个节点n移至CLOSE表;若是空表,则返回(1);
3)判断节点n是否为目标节点,若n是目标节点,则生成最优路径;若n不是目标节点,则计算n的所有后继节点的f值,并进行节点扩展;具体过程为若该后继节点不在OPEN和CLOSE表中,则加入OPEN表并标记该节点到节点n的指针;若该后继节点在OPEN表中,且新f值小于原f值,则更新其f值并修改该节点的指针指向节点n;若该后继节点在CLOSE表中,且新f值小于原f值,则将其从CLOSE表移回OPEN表,更新其f值并修改该节点的指针指向节点n。
4)按f值升序重排OPEN表,并返回(2)。
4 实验结果及分析
将搭建好的移动机器人平台放置室内环境任意一点,并把该点作为构建室内地图的起始点,在移动机器人运动停止后运行保存地图节点,把构建好的室内环境栅格地图保存为图3所示的图片。从图3可以看出,构建好的栅格地图完整的显示了室内环境轮廓。该地图是一张位图,主要是用来表示栅格被占据的状况,其中白色像素点代表未被占据的网格即可行区域。黑色像素点代表障碍物,灰色像素点代表的是“未知”区域。
将移动机器人放置在图4所示的起点位置,其中黄色箭头表示移动机器人的位姿状态,在RVIZ可视化界面上设置好终点位置,移动机器人就会按照A*算法和动态窗口法在避开障碍物的同时规划出可行路径即图中黄线所示,实现从起点到终点的自主定位与导航。
5 结束语
对设计的基于Kinect移动机器人导航系统架构进行现实场景的实验,结果表明本文设计的导航系统能够精确地实现移动机器人的自主定位与导航,在规划可行路径时采用动态窗口法实时监控,解决了导航的精度和稳定性问题,能够满足移动机器人在复杂环境下的自主导航。
【参考文献】
[1]卞云松.基于Arduino 单片机的避障小车机器人[J].自动化技术与应用,2014,33(1).
[2]纪欣然.基于Arduino开发环境的智能寻光小车设计[J].现代电子技术,2012,35(15).
[3]郑潇峰.基于ROS的移动机器人室内激光导航研究[D].重庆邮电大学,2017.
[4]邹谦.基于图优化SLAM的移动机器人导航方法研究[D].哈尔滨工业大学,2017.
[5]刘晓帆,赵彬.基于ROS的移动机器人平台系统设计[J].《微型机与应用》,2017,36(11).
[6]Madjid Hank,Moussa Haddad.A hybrid approach for autonomous navigation of mobile robots in partially-known environments[J]. Robotics and Autonomous Systems,2016,86.
[7]Shaowu Yang,Sebastian A.Scherer,Xiaodong Yi,Andreas Zell. Multi-camera visual SLAM for autonomous navigation of micro aerial vehicles[J].Robotics and Autonomous Systems,2017,93.