基于ROS的多功能智能小车设计

2021-01-13 12:17史星彦关志伟胡乐媛蔡一杰
装备制造技术 2020年10期
关键词:激光雷达小车框架

史星彦,关志伟,彭 涛,吴 迪,胡乐媛,蔡一杰

(天津职业技术师范大学汽车与交通学院,天津300222)

智能小车在物流、家庭服务、工业等领域广泛应用。但室内移动智能小车的普及,还存在着许多问题需要解决,如准确定位、精确构建地图、实时路径规划等。为解决上诉问题,近几十年的研究提出了许多有效的解决方案,如自适应蒙特卡罗定位算法,即时定位与地图构建,动态窗口局部路径规划算法,A*全局路径规划算法等。

2010年Willow Garage公司发布了开源机器人操作系统ROS,大大增加了移动智能小车在软件上的复用性和移植性和提高了软件的兼容性。本文基于ROS系统,介绍了一种自动导航避障兼跟随功能实现的基本方法,并在此基础上设计了一款结构简单、低成本和通用性良好的多功能室内移动智能小车。

1 小车总体框架

智能小车通常通过激光雷达和视觉等传感器扫描周围实时环境,并且实时估计自身在环境中的位置,并通过基本的建图算法构建2D的栅格地图模型[1]。在此基础上根据构建好的2D栅格地图规划出从起点到终点的最佳全局路径和行驶。在途中小车可能会碰到实时障碍物,则需要进行局部路径规划以避开障碍物。

为实现上述功能,本文设计的小车通过激光雷达和里程计等传感器来获取信息,并传给装有ROS系统的小车工控机,然后采用常用的Gmapping建图算法构建地图[2],基于自适应蒙特卡罗定位法(AMCL)定位[3]与全局和局部路径规划[4]进行小车从起点到终点的导航。并基于ROS系统的Python编程实现了智能小车对最近目标的跟随功能[5]。

小车采用小型工控机作为上位机,STM32嵌入式单片机为下位机,主要分为硬件和软件两大部分。硬件方面有小车底座、上位机、激光雷达、摄像头、和小车底层控制板STM32的选择与安装。软件方面包括编写小车底层控制板与工控机之间的基于ROS接口等相关程序,开发相关功能包,从而实现建图导航等功能,进一步编写相关Linux相关脚本和启动文件等。总体框架和控制、数据传输路线如图1所示,硬件连接如图2所示。

图1 总体基本框架

图2 硬件连接示意图

2 硬件方案设计

2.1 小车底座和上位机选择

最底层采用长方形铝合金结构作为小车底座,其目的是铝合金材料质轻且柔软,强度和耐腐蚀性各方面都比较优秀,可放置电机和转向舵机等。底座上方为多层静电防护亚克力板,可放置STM32嵌入式单片机,激光雷达和摄像头等设备。上位机采用Ubuntu16.04系统并且安装ROS系统,为保证程序处理和运算速度,为后续加入更多模块,并且考虑重量、成本、体积、性价比等因素,选用i5处理器配合4G运行内存的小型工控机来运行ROS系统。

2.2 传感器选择

本智能小车设计主要是应用于室内环境,活动范围小,因此对传感器要求不高。

(1)激光雷达

激光雷达主要采集用来构建2D栅格地图的深度信息,按激光线束分为单线和多线。可以360°全方位的采集周围距离信息。采用低成本单线激光雷达Rplidar a1为宜。该雷达为思岚公司生产,价格低廉,可靠性高,能够确保二维栅格地图构建的质量,具体技术参数见表1。

表1 Rplidar A1技术参数

(2)深度相机

采用乐视Astra Pro三合一体感深度相机,能够以图像形式探测周围环境,精度高。主要由RGB摄像头和红外线发射器等组成分别用于生成彩色图像和获取图像深度信息,因此可以模拟出立体视觉效果。深度相机不仅可以高清晰地成像,还能获得物体的深度信息。因此也可用于构建二维栅格地图。具体技术参数见表2。

表2 深度相机技术参数

2.3 下位机选择

STM32是一种应用广泛嵌入式处理器,是一款属于ARM公司的Cortex-M内核的32位微控制器,本文具体采用高性能STM32F407芯片作为底层控制驱动板,如图3所示为小车下位机控制板,具有4路直流电机和电机驱动4路AB相编码器接口1路USB串口接口3路TTL串口接口1路超时传感器接口1路遥控器手柄接口1路9自由度IMU。通过编写与上位机接口程序,接收来自上位机的控制命令。

图3 小车下位机控制板

3 软件系统设计

3.1 ROS总体框架

ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议等。ROS架构可以分成三层操作系统层、中间层和应用层。从系统实现的角度看,ROS也可以分为计算图、文件系统、和开源社区三个层次[6-7]。

从计算图来看小车的软件系统以节点为单位独立运行,并且通过端对端的拓扑结构进行连接,根据节点之间的通信关系设计通信模式。节点为一些执行运算任务的进程,可以称之为软件模块。

文件系统是在ROS中用来管理和组织源代码,不同功能的文件被放置在不同的文件夹下,是开发者基于ROS进行相关功能软件设计开发的重点部分,相关功能包算法源代码就是存放在文件系统中。

3.2 文件系统

工作空间和功能包括:工作空间是存放源代码、脚本语言、等文件的文件夹。功能包是完成一项具体功能的代码,脚本,配置文件,编译规则等信息的集合。在ROS框架下修改节点之间通信接口程序,即可使用相关功能包模块。如果使用个人编写的功能包来实现特定的二次开发功能,则需要对功能包进行编译和执行。除功能包开发之外,开发者可在ROS中编写相关Launch文件快速运行多个节点,并且自动配置参数以达到操作简便的目的[8]。

在本小车软件系统中,所有的节点、相关配置以及启动文件均在功能包中实现。下文对小车在ROS框架中的软件模块做具体介绍。

3.3 小车软件模块

根据小车所要实现的功能,在ROS下主要搭建了以下几个重要软件模块节点。

(1)建图节点:用来提供智能小车建图的算法,在ROS开源社区中有多种SLAM算法功能包,如Gmapping、Hector等算法,可在此基础上进行二次开发或直接使用,其中基于Rbpf粒子滤波的开源SLAM算法Gmapping[9]是其中最为常用和成熟的地图构建算法,其框架如图4所示。

图4 Gmapping总体框架

Gmapping功能包构成了小车的建图节点,用来订阅小车采集到的深度信息、IMU信息和里程计信息,在ROS中完成一些必要参数的配置,即可用该功能包构建出一张基于概率的二维栅格地图。相比Hector建图算法对激光雷达频率要求更低、鲁棒性更高,地图构建精度高,构建小场景地图所需要的计算量较小。因此非常适合室内移动智能小车的地图构建。

(2)导航功能包节点:该节点主要为智能小车提供路径规划和小车定位两个算法,在ROS中主要由Move_base功能包和AMCL功能包来完成,前者用来实现智能小车的路径规划。后者用来实现二维地图中的智能小车的定位,该定位一种概率定位[10],以2D方式对小车定位,它实现了自适应(或者KLD-采样)蒙特卡洛定位法,使用粒子滤波跟踪智能小车在已知地图中的位姿,最后由Move_base功能包发布速度控制话题给智能小车驱动节点来控制小车移动。如图5所示为小车导航框架。

图5 小车导航框架

全局路径规划:全局路径规划是根据给定的目标位置和全局地图进行总体路径的规划。在导航中,使用Dijkstra或A*算法进行全局路径的规划,计算出小车到目标位置的最优路线,作为小车的全局路线。

本地实时规划:又称为局部路径规划,往往由于动态障碍物的出现,智能小车无法严格按照全局路线行驶,否则会碰到障碍物。使用动态窗口算法(DWA)搜索躲避动态障碍物的多条路经,根据是否会撞击障碍物,和所需要的时间的长短作为评价标准选取最优路径,同时计算行驶周期内的线速度和角速度,在ROS中以Geometry_msgs/Twist类型发布速度话题控制命令传给小车驱动节点,该节点订阅该话题信息,并且解析命令中的线速度、角速度完成小车相应的运动,避免与动态出现的障碍物发生碰撞。

(3)跟随功能包节点:使用Python语言实现,由于Python语言是一种解释型语言,不需要编译,在ROS框架下编写好后直接在Linux终端执行即可,使用方便。该节点提供一种简单的跟随算法,跟随距离智能小车最近的物体,跟随前确保被跟随物体离智能小车最近,再运行功能包。智能小车通过激光雷达扫描到最近的物体,根据设定的距离,同样以Geometry_msgs/Twist类型发布速度话题控制命令传给小车驱动节点,完成小车的相应运动。如图6为小车雷达跟随框架。

图6 雷达跟随简单框架

(4)智能小车驱动节点:该节点主要用于小车控制板与工控机(上位机)之间的通讯,如订阅导航避障节点发布速度控制话题消息,进一步驱动电机让小车移动。

(6)激光雷达节点:ROS在Sensor_msgs包中定义了专用数据类型LaserScan,该类型用来存储了单线激光雷达所扫描的消息,激光雷达以ROS中话题的通信形式发布出去,供其他节点订阅,如建图节点和导航节点。

4 实验结果

基于以上设计构建如图7所示的智能小车进行实验。

图7 智能小车

4.1 地图构建实验

选定在一般普通室内环境实验,其地面平整,有相关凸起物可以被激光雷达扫描到。

开启小车电源后,启动相关功能包节点,通过键盘控制小车移动,小车在移动的过程通过激光雷达来实时扫描周围环境,并且进行自身定位,并通过Gmapping算法构建2D增量式地图。并将及时构建好的地图数据通过无线网传输到个人终端上显示。图8为开始构建地图阶段,图中箭头指示分别为激光雷达扫描线和障碍物轮廓线,图9为构建完毕后的效果图,因为定位精度等原因,地图构建过程中时常有激光雷达扫描线和障碍物轮廓线不完全重合的情况,总体上和实际环境相差不大。

图8 构建地图开始阶段

图9 构建完毕的地图

4.2 自主导航实验

2D地图构建好后,可以在地图上进行任意两点之间的导航功能。将小车放在设定好的起点后,指定一个终点,小车进行全局路径规划,并沿着全局规划路径向指定位置移动,在移动的过程中,如遇到临时障碍物,局部代价地图则修正路线使小车沿着局部规划路径安全避开障碍。实验效果如图10所示,表明小车能够很好地进行路径规划并避开动态障碍物,最终到达目标点。

图10 小车导航功能

4.3 雷达跟随实验

将实验环境改为平整附着系数良好的路面。启动相关功能包节点实现小车对最近距离物体的跟随功能。如图11所示为雷达跟随效果图,图中后方小车跟随前方小车移动而移动。并且保持一定的距离。结果表明小车具有良好的跟随功能,因为小车只能跟随最近距离物体,在抗干扰上面还有待改进。

图11 雷达跟随

5 结束语

本文运用新一代机器人操作系统ROS来开发智能移动小车,设计了一种简单的基于ROS的智能小车自主建图导航和雷达跟随的方法。实验表明该方法能够清晰地构建2D栅格地图和完成导航功能,及平整路面上的最近目标的跟随功能。实现了一种低成本、高性能的室内移动智能小车定位与导航简单设计方案。可用于ROS框架和移动小车的基础实验等。

使用ROS开发移动智能小车具有很高的开放性和扩展性,能进行跨平台开发,可用该系统开发机械臂等;系统集合多种功能完善功能包,使得只需在ROS框架下编写相关程序和调整相关参数等,就能快速开发出具有相应功能的智能小车,提高了开发效率和减少了软件开发的复杂性。

猜你喜欢
激光雷达小车框架
手持激光雷达应用解决方案
有机框架材料的后合成交换
框架
法雷奥第二代SCALA?激光雷达
大车拉小车
自制小车来比赛
基于激光雷达通信的地面特征识别技术
刘老师想开小车
基于激光雷达的多旋翼无人机室内定位与避障研究
两轮自平衡小车的设计与实现