张晓华,张文魁,2
(1.中北大学仪器与电子学院,山西太原 030006; 2.上海大学微电子学院,上海 201899)
研发新型的智能购物车对于提升超市的服务水平有着非常重要的意义。随着互联网技术的发展,近年来国内外关于智能购物车的研究越来越多,在不同的研究方向上取得了成果。2006年澳大利亚研究人员研发了一款智能购物车,这款购物车上安装了一块触摸屏幕,用户可以操作商品定位系统轻易定位自己想要的商品[1-2]。2011年韩国SK Telecom推出了使用Wi-Fi无线连接技术的智能购物车,该购物车的独特操作方式在于消费者需要通过自己的手机下载与卖场对应合作的App,通过App可以了解商场的基本信息及卖场的相关活动咨询,系统也可以帮助顾客快速地定位自己想要购买商品的位置,节省了顾客的购物时间。2018年新世界集团旗下的E-mart委托中国上海硅步机器人联合西班牙robotnik公司共同研发生产出了自主购物机器人“eli”,并在韩国的相关超市亮相,“eli”智能购物车可以跟随顾客行走,帮助顾客挑选商品,购物结束后顾客可以通过信用卡或移动支付直接付款[3]。
中国对智能超市购物车的研究相对于国外起步较晚,2009年张喆[4]提出了一款基于单片机的智能购物车,能够实现商品的快速定位、对所选商品自助结算、方便查询超市卖场内的广告咨询和促销打折等优惠信息。2018年永辉超市在其重庆总店推出自行研发的智能跟随购物车,该购物车可以实现跟随功能、避障功能,并且其可以通过人脸识别技术来辨别超市会员的性别、年龄,并能在顾客的语音指令下带领顾客到达所需购买商品的位置。
目前,国内外研发的智能购物车主要在自助结账、自动跟随、自主导购等方面实现突破,各产品所侧重实现的功能不同,存在较多局限,智能购物车在识别稳定性、目标准确性、自助便捷性等方面仍需完善。为此,本文拟设计一款集车载自助结账、智能跟随、云端大数据库自主导航于一体的智能购物车。依托超宽带室内定位技术开发的自动跟随功能可以有效减少顾客的购物压力;依托射频识别技术(RFID)开展车载自助结账系统设计,可以极大地提升货物识别稳定性,并实现手机便捷支付功能;依托云端数据库搭建的导航系统可以快速准确地找到商品位置。
在跟随方案的设计中,购物车需要实时掌握顾客相对于购物车的位置,只有这样才能对车子的状态作出实时控制。本次设计通过建立参考坐标系后再确定被跟踪目标方位的方式来进行方位解算。第一,先将2块超宽带(UWB)基站[5]安置于购物车的前方,并设定2个基站之间的距离为L;第二,以基站1和基站2所在直线为x轴,基站1和基站2的中点o为原点,建立直角坐标系;第三,令标签到基站1之间的距离为d1,标签到基站2之间的距离为d2,令顾客的坐标为(x,y)[6]。标签位置坐标图如图1所示。
图1 标签位置坐标图Fig.1 Coordinate orientation of label position
根据图1可以得到以下方程组:
(1)
(2)
联立可以求得:
(3)
(4)
根据上述推算可以得出以下结论:当d1>d2时,且x>L/2时,顾客在右前方;当d1
在确定了顾客的相对位置之后,便可以对车的状态进行控制。当顾客在车子正前方时,且当y>100 cm时,单片机控制购物车左右两电机同时转动,购物车向前走动;当顾客在车子正前方时,且当y<100 cm时,单片机不会发出指令,购物车不会向前走动;当顾客位于购物车右前方时,单片机控制购物车左电机转动,右电机不转,购物车实现右转;当顾客位于购物车左前方时,单片机控制购物车右电机转动,左电机不转,购物车实现左转[7]。
整个过程中,单片机会保持极高的刷新率,这样会保证车子流畅的跟随顾客行走。除此之外,在购物车的多个方位上还安装了光电模块,用于检测购物车周围的障碍物,并且设定避障功能的优先级高于跟随功能,可避免购物车出现撞击事故。
在上述设计都完成后,需要将ESP32单片机与购物车主控制板STM32通过串口连接,以便实现手机端操控的目的。当顾客想要购物车以跟随模式运行时,只需要在手机的网页上点击相关按键,服务器将接收到的指令使用Wi-Fi通过MQTT协议发送到ESP32单片机,再通过串口通信协议将指令传递给购物车跟随系统的主控芯片STM32,通过设置信号的优先级,使手机控制信号的优先级调为最高,从而实现手机端对车状态的控制。自动跟随控制模块如图2所示。
图2 自动跟随控制模块Fig.2 Automatic following control module
对于新的高频RFID设备,首先需要使用读写器读出每个标签的信息,然后再进行写操作,写进预先设定的数值,并在数据库当中做相应的记录,最终将标签贴附于相应的商品之上。标签数据读取及写入的步骤如下[8-9]。
1)根据商家提供的信息安装指定的驱动,安装成功后使用USB数据线将读写设备与电脑相连接,当电脑设备管理器的端口窗下出现相应的名称,代表驱动安装成功,如图3所示。
图3 高频RFID商品识别过程Fig.3 Goods identification process of ultra-high RFID
2)打开商家配备的软件,根据要求设定相应的参数,比如波特率115 200等等,打开串口后,出现一切正常的识别图。
3)在软件操作界面上点击识别按钮,当RFID标签出现在读写器附近时,界面上会实时出现标签信息,白色代表正常识别,红色代表不在天线识别的范围内。
4)在软件操作界面找到相对应的写标签按钮,对数据进行写入数据操作。设置好合适的长度,然后按要求写入数据,一次性只可以有一张标签出现在超高频RFID读写器天线的附近。
5)当数据写入成功之后,界面的下方会提示写数据成功,这样表示写数据操作完成[10-11]。写数据操作如图3 d)所示。
系统工作流程如图4所示。
图4 系统工作流程图Fig.4 Working flow chart of the system
主控ESP32需要不停地通过串口向RFID读写模块发送读写指令。其中读写指令需要从商家配带的说明书中获取,根据这次所购买的RFID读写器说明书了解到关于高频RFID的指令格式,首先向其发送模式指令: 0XBB,0X00,0X12,0X00,0X01,0X01,0X14,0X7E,使其处在特定工作模式下,接着发送读取指令:0XBB,0X00,0X22,0X00,0X00,0X22,0X7E,让RFID处于读取的工作模式下。当RFID读写器读到购物车内的标签信息后,会通过串口将信息发送给主控ESP32,ESP32根据接收到的读取结果实时解析,解析时,根据商家规定的数据长度为4×6=24 bit,需要对发送过来的数据每24 bit进行划分,划分之后的每一单元都代表一个标签的信息。为了保证识别的准确性,每次写代码规定高频RFID发送采集到的商品信息为5次时,ESP32通过MQTT协议使用Wi-Fi向Apache服务器发送1次[12-13]。根据说明书中记录的24个字符所代表的不同含义可以了解到第18位为最后一位,第18个字符往后的字符都为验证字符。在这里数组中只记录每个字符串的第16,17,18位,在每识别的5次数组中,只记录上次没有的标签信息,如果最新识别的数组已有记录,则不会将其添加到数组中。通过以上的解析过程及上传的方式,可以保证购物车内的商品信息会及时并且准确地发往云端服务器。
整个支付系统主要分为3部分,即发送设备、处理设备和显示设备[14]。发送端由RFID读写器、RFID标签组成;处理设备由ESP32组成;显示设备由自主创建的网页组成。整个设计以ESP32为主控,在商品上粘贴RFID贴纸标签,通过超高频RFID读取器读取购物车内所有商品的RFID信息,并使用MQTT[15]协议将读取器读到的RFID标签信息发送到云端服务器,云端服务器将读取到的RFID标签信息与数据库中的商品信息相匹配,获得购物车内已有的商品信息后将其写入该购物车的数据库中,用户可以通过手机查看购物车内的商品信息。
在开始使用购物车后,当张贴有超高频RFID标签的商品放入到购物车筐内时,安装于购物车底部的超高频RFID读写器将会对车筐中的所有商品进行统一识别,并且保持不断更新的状态,车筐中的商品一旦有变化,读卡器便会感应出它的变化,超高频RFID读写器读取商品上的RFID标签信息,并且通过串口将信息发送给ESP32,之后ESP32使用MQTT协议通过Wi-Fi上传到云端服务器,服务器会将ESP32发送来的信息与存储在数据库里的商品名称匹配,并将匹配的结果显示在网页上。购物结束后顾客通过手机调转支付宝支付即可。
为了让顾客能够准确快速地找到目标商品的位置,针对每一个超市建立了相应的数据库,数据库里存储超市内每一件商品的位置坐标,供顾客查找。顾客只需在手机上扫码登录超市平台网站,进入搜索栏目输入需要购买的商品名称,网页会将事先存储在数据库里的商品位置信息显示出来,供顾客浏览使用。
云端系统通过搭建Apache网页服务器、MQTT服务器、mysql数据库来实现信息的展示、传达以及存储。购物车与云端系统的交互方面使用ESP32芯片,运行freertos系统,使用Wi-Fi接入互联网,通过目前主流的物联网协议MQTT与服务器后端进行通信(其可容纳百万台设备的接入)。服务器后端将获取的数据存入mysql数据库,用户可以通过网页获取相关的内容,图5为商品的数据库搜索结果。
图5 商品的数据库搜索结果Fig.5 Search results of goods database
硬件电路的测试主要通过串口完成,主要测试硬件电路部分是否可以正常的发送指令。先将编写的程序烧录进ESP32当中,保证ESP32可以正常工作;之后将排针焊接在超高频RFID读写器上,这样可以引出每个与之对应的引脚;再根据写程序时所用到的串口引脚,将其通过导线与ESP32相连接,其中主控ESP32上对应的RXD引脚连接在超高频RFID上的TXD引脚,ESP32上的TXD引脚连接在超高频RFID上的RXD引脚上。除此之外,为了达到只使用1个电源的目的,应将超高频RFID的电源接口与地接口分别连接在ESP32上的电源接口与地接口。连接好之后,给ESP32接入5 V电压,此时ESP32与超高频RFID的指示灯均亮了,代表2个模块都能正常供电。正常供电后,使用串口调试助手检测超高频RFID是否能正常发送数据给ESP32,首先根据要求先在电脑上安装CH340驱动,这样才可以识别到插在电脑上的串口接口,接着使用1根USB数据线将ESP32连接在电脑上,打开串口调试助手,看串口调试助手能否接收到正常的标签个数及标签信息,其连接好之后的硬件部分功能测试如图6所示。
图6 硬件部分功能测试Fig.6 Part function testing of hardware system
串口调试助手所返回来的信息代表ESP32可以正常接收超高频RFID读写器所发送过来的信息,并且可以对标签的信息进行正确的解析。
验证完硬件部分之后就需要对整个系统进行验证,首先根据要求需要先设定指定的个人热点网络,供ESP32连接使用,当手机上显示有设备连接时,表示ESP32已经接网成功,可以对整个系统进行测试。将1个粘贴有RFID贴纸标签的商品置于超高频RFID读写器的天线附近,然后查看手机网页是否有相应的商品名称及价格,其单个商品测试图如图7所示。
图7 单个商品的功能测试Fig.7 Function testing of single goods
结果表示单个商品信息可以正常上传,逐渐增加商品的个数,看网页是否同时显示多个,并且验证网页是否可以正常计算所有商品的价格总和,其测试结果如图8所示,结果表示当商品个数为多个时,系统仍然可以上传所有商品的信息,并且在网页可以正常计价。测试完以上过程之后,将贴有贴纸标签的商品从超高频RFID天线旁拿走,看网页上是否还会显示该商品的名称,以及总价中是否有减去所拿走商品的价格,通过以上过程可以检测整个系统的更新速率,测试结果显示更新速率较快,满足实际需求。
图8 多个商品的功能测试Fig.8 Function testing of multiple goods
针对现有超市中存在的排队等待结账难、手推购物车不方便、寻找目标商品难等问题展开了分析研究,提出了一种基于物联网的智能购物车方案并完成了实物设计,所设计的实物可以有效地解决目前超市中存在的困难,为未来智能化超市的建设提供了良好的基础。
本文在自助收银系统的搭建上,主要依托物联网技术展开设计,使用超高频RFID为主要模块,辅以手机网页及云端数据库完成车载自助结账系统的设计,所完成的功能识别稳定性强、灵敏度高、支付方便,可满足现有超市的实际性需求。在自动跟随系统方面,主要使用UWB模块为感应模块,辅以手机网页形成手机端可控的跟随系统,对于顾客来说可以有更多的选择性,实现的跟随功能效果更加流畅、准确度更高。最后,在商品定位方面,主要依托云端数据库搭建导航系统,可以帮助顾客快速、准确地寻找到目标商品,更加适合现有超市的需要,可以极大地节省顾客的购物时间。
集多套智能系统于一体的智能购物车为未来智能超市的建设提供了良好的基础。然而,本研究也存在许多待解决的问题,例如,购物车的自动归位等。未来团队将会在购物车自动归位方面开展研究。