冯毅烽 ,钟小华 ,郑梓琪 ,麦钧俊 ,张春莹
(广东白云学院机电工程学院,广东 广州 510450)
目前市面上的智能送餐系统一般使用超宽带(Ultra Wide Band, UWB)技术的室内无线定位系统,或者使用激光雷达配合ROS 机器人操作系统[1]。UWB 通信技术的精度较高,但不能很好地规划出最短路线实现自动避障;而使用激光雷达配合ROS 机器人操作系统[2]的适用性较强、效率较高,但不能自动标记用户的位置,只能实现简单的建图,无法满足美食城多商家共用送餐机器人的需求。因此,本文基于美食城这一环境复杂、顾客位置不定、服务需求量大、商家多的特定环境,设计开发了基于ROS 与UWB的美食城送餐机器人系统[3]。
送餐机器人的主要结构由触摸屏、餐牌回收收纳盒、上下双层送餐托盘、激光雷达、机器人本体及对应的核心控制板和上位机等一系列软硬件组成。机器人通过两组麦克纳姆轮实现送餐机器人的全向移动,通过激光雷达配合UWB 实现餐品的投送和回收。机器人的主要结构示意图如图1所示。
图1 送餐机器人整体结构设计
送餐机器人控制系统的硬件组成主要包括上位机远程控制台(PC)、2 组UWB 基站、激光雷达、中继机树莓派微型电脑、下位机核心控制板STM32、电源供电模块等,具体如图2所示。
图2 送餐机器人硬件结构图
上位机远程控制台(PC)使用Ubuntu 18.04 系统与QT,可实现机器人的运动监控,显示机器人任务列表信息,与中继机使用无线网络通信。
中继机树莓派微型电脑搭载Ubuntu 18.04 系统与ROS 操作系统[4],可实现简单运算并接收激光雷达的数据,将点餐任务信息通过Wi-Fi 无线网络通信发送给上位机PC,将数据通过uart 串口先发送至下位机STM32,控制两组电机实现全向运动。
下位机核心控制板STM32 通过SPI 协议与电机驱动C620 通信,并发送相对应的PWM 信号脉宽值,通过CAN 总线控制电机转向和变速,使送餐机器人按照控制要求运动。UWB 机器人标签通过无线载波通信和UWB 模块进行通信,并且将接收到的位置信息通过串口发送给核心控制板STM32,再通过串口发送位置数据给中继机树莓派,使送餐机器人能准确定位。
送餐机器人软件系统包括远程控制台软件设计、UWB 室内定位程序、人机交互程序、机器人建图与导航程序。UWB 室内定位程序负责对机器人在ROS地图上进行定位;人机交互程序负责帮助用户查看点餐信息,方便商家和用户确认送餐信息;机器人建图与导航程序负责在ROS 建立二维地图以及根据UWB定位标签进行导航。
远程控制台作为送餐机器人的服务端,能够实现机器人的运动监控,显示机器人任务列表信息以及存储客户端用户点餐信息;商家电脑的点餐软件设计由商家客户端和用户客户端组成。
通过QT 软件进行UI 界面设计,用户客户端界面如图3 所示,QT 开发语言基于C/C++,能大大降低汇编的难度,使用的函数难度较低,指令的可读性也比较强[5]。用户可以根据自己的爱好进行点餐,同时商家需要选择该订单的餐牌号并把对应的餐牌交给顾客。送餐任务数量由订单内的餐品数量和订单数决定,进入任务状态后,机器人会通过基站位置定位送餐地点,准确快速地完成送餐,并进入下一个订单任务。
图3 用户客户端设计界面
室内定位采用TOA 算法计算两个设备之间的距离,TOA 测距方法属于双向测距技术,其原理是用信号在两个异步收发器间传输的时间乘以传输的速度,计算出两个异步收发器之间的距离[6]。单边双向测距的流程为数据信号从发送端发出并记录时间T1,接收端接收到数据信号记录时间T2,接收端发送应答信号记录时间T3,发送端接收到应答信号记录时间T4。发送端发送与接收的时间差为T4 减去T1,接收端发送与接收的时间差为T3 减去T2。发送端与接收端的距离为发送端发送与接收的时间差减去接收端发送与接收的时间差然后乘以传播速度。
本文采用的是双边双向测距技术。假设有A、B两个设备,双边双向测距技术就是在以A 设备作为发送端、B 设备作为接收端进行一次单边双向测距后,再以A 设备作为发送端发送一次数据给B 设备。很明显,双边双向测距技术会比单边双向测距技术花费的时间更长,但是其精度会比单边双向测距更高。
本设计把UWB 模块分为标签和基站,其中,用来建立坐标轴的基站有3 个,用来作为坐标点的标签有2 个,如图4 所示。通过基站0(0,y0)、基站1(x1,0)、基站2(x2,0)建立笛卡尔直角坐标系,在直角坐标系中,机器人坐标为(x3,y3),用户坐标为(x4,y4),再通过TOA 算法得到机器人和用户的实际坐标数据:
图4 UWB室内定位模块摆放位置图
基站就是双边双向测距中的接收端,所以如果UWB 模块被划分为基站就会执行循环等待标签数据,在接收到消息后判断数据是否正常,判断数据正常后会把数据存进数组里并读取时间节点;接着设置最终消息接收的预期延迟和超时,把要发送的数据写入DW1000,配置发送帧控制寄存器,设置发送方式并发送信息回应标签;再次循环等待标签数据,判断数据是否正常,把数据存进数组里,读取时间节点。标签发送的数据里面会包含时间节点信息,配合基站自身读取的时间节点,通过上述的TOF 双边双向测距原理计算出基站与标签的距离。每个基站计算完距离后又会通过DW1000 把距离数据发送给标签,标签再汇总与3 个基站之间的距离并发送给基站0,基站0 会通过加权三角形质心定位算法得到标签在室内地图坐标系下的坐标,并通过串口发送出去[1]。
标签就是双边双向测距中的发送端。所有的标签会由一个主标签管理,每个标签要想进行测距就必须先向主标签发送申请,主标签进行申请排序并逐个通过申请[7]。这样做原因是,每个标签都会与基站TOF 算法测距,如果某个标签与基站0 双边双向测距进行到一半,另外一个标签又发送数据给基站0,就会导致整个UWB 室内定位系统发生混乱。在每个标签通过申请后会先设置接收事后延误和超时,把当前时间节点写入要发送数据的数组中,把要发送的数据写入DW1000,配置发送帧控制寄存器,设置发送方式并发送数据给基站,循环等待基站数据。接收到基站数据后,再一次按相同的流程发送数据给基站[2]。
机器人人机交互界面在中继机树莓派触摸屏上显示,使用QT 开发语言进行设计,如图5 所示。其中,数字1~4 代表1~4 号餐格。当有送餐任务时,数字后就会显示对应餐品。使用人机交互模块可以研究系统与用户之间的交互关系,提高系统的可用性和用户友好性。
图5 人机交互界面
使 用ROS 中所提供的AMCL 与Move base 功能包来实现定位和路径规划功能。首先,控制机器人在牛场环境中运动,使用Cartographer 算法建立牛场环境地图,作为全局代价地图。其次,机器人根据主机PC 或手机App 下发目标点,使用Dijkstra 算法进行全局路径规划,计算机器人到目标位置的最佳路线,并将其作为机器人的全局路线。最后,在机器人实际作业时,为了避免机器人与可能出现的动态障碍物发生碰撞,根据激光雷达实时数据引入本地代价地图,由local planner 模块通过Dynamic Windows Approaches算法计算躲避的多条轨迹,对于每条模拟的运动轨迹分别计算轨迹上是否存在障碍物以及与障碍物距离的分值CostsObstacle、轨迹上点与局部参考路径最近距离的分值CostsPath、轨迹上点与局部参考路径终点最近距离的分值CostsGoal[8],综合评分计算公式为:
式中,α、β、Γ表示各评分标准的权重值。
其权重值取决于机器人所侧重的性能,通过试验,α、β、Γ的取值分别为0.07、0.35 和3。全局地图模型如图6 所示,地图最下角的框表示机器人的初始位置,最左边的框表示3 个商家的位置,3 个圆点表示3 个UWB 基站的位置,中间两个大框表示餐桌和椅子的位置。
图6 全局地图模型
通过R p l i d a t A l 激光雷达收集环境数据,Gmapping 算法处理收集到的环境数据,通过ROS 机器人操作系统构建出SLAM 地图,UWB 模块对机器人进行定位然后在地图上显示坐标,ROS 机器人操作系统会根据UWB 模块定位好点的坐标,再结合实际的环境数据计算出最短距离,然后快速地移动并实时更新数据,调整机器人的行动状态[9-10]。
本文设计了一个基于ROS 与UWB 的送餐机器人系统[11-13],分别从硬件系统总框架和系统的控制软件设计两个部分进行了介绍。投入试验后,发现该系统有如下优点:1)能获取顾客的位置,并识别障碍物,解决了美食城环境复杂、顾客位置不定的问题。2)能计算出每次送餐距离最近的顾客位置,使机器人送餐有很高的效率。3)一台机器人可供多位商家使用,并且有多个放餐位,具有较高的经济效益。4)有辅助回收餐具的功能。综上,该系统符合美食城的环境,并且效率较高,可创造较高的经济效益,具有良好的应用前景。