基于Android平台的送餐机器人远程控制设计

2021-12-24 10:00管文龙杜泽强田会方吴迎峰
数字制造科学 2021年4期
关键词:电子标签阿里远程

管文龙,杜泽强,田会方,吴迎峰

(1.武汉理工大学 机电工程学院,湖北 武汉 430070;2.西安向阳航天材料股份有限公司,陕西 西安 710065)

服务机器人是一种半自动或者全自动工作的机器人,提供有益于人类健康的服务[1-2]。服务机器人在医疗、家政、餐饮、客服、物流等行业有一定的应用[3]。服务机器人在餐饮行业的应用为这个行业带来了智能服务的新机遇,送餐机器人的发展推动餐饮服务智能化的进步。因此设计了一款远程控制送餐机器人,代替餐厅服务员送餐给住酒店客人。该系统研究利用安卓手机APP发送控制指令,采用阿里云物联网平台转发数据给STM32单片机,进而实现对送餐机器人的远程控制。

1 远程控制方案

送餐机器人远程控制系统是由上位机软件系统、下位机硬件系统和阿里云物联网平台3部分组成。送餐机器人下位机硬件系统是以STM32F103ZET6处理器为核心部件,并挂载多个模块组成。本研究使用安卓手机APP发送控制信号,经过阿里云物联网平台转发数据给STM32单片机,进而实现对送餐机器人的远程控制,系统硬件结构框图如图1所示。所设计的系统功能包括送餐机器人的动力部分、定位功能、循迹和避障功能、视频查看功能、无线通信以及送餐状态检测功能。

图1 系统硬件框图

1.1 送餐机器人的动力设计

在送餐机器人中,电机最常用的是步进电机和直流电机。直流电机有良好的调速性能,控制比较简单,但精度很低。由于本方案对定位精度有要求,因此选择步进电机作为送餐机器人的驱动力。送餐机器人采用四轮机构,为了满足送餐机器人全方位角转向,将在送餐机器人上安装4个麦克纳姆轮,4个轮子一次安装A、B型麦克纳姆轮,安装方式如图2所示,每个轮子使用独立的驱动方式。

图2 A、B型轮分布图

设定机器人负重和自重最大质量为100 kg,选择57BYGH82-401A步进电机,该步进电机能输出最大的转矩为2.1 N·m,当送餐机器人轮子直径为8 cm时,该步进电机能带动100 kg以上的负载,由于转矩比较大,即使遇到一些小障碍也能正常行驶,能够满足送餐机器人的动力要求。根据步进电机的参数,驱动模块选用ATK-2MD4850,其是一款高性能细分型2相混合式步进电机驱动器,此驱动器能够使得电机转矩波动小,低速运行平稳以及极小振动和噪音;高速时输出力矩较大,定位精度比较高[4]。

STM32单片机使用高级定时器在输出引脚产生PWM(pluse width modulation),通过改变定时器预装载值和输出比较值来改变步进电机的转速。步进电机的端口驱动初始化程序如下:

void Driver_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

//使能端口时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0| GPIO_Pin_2;

//设置输出模式

GPIO_InitStructure.GPIO_Mode=GPIO_Mode _Out_PP;

//配置端口速度

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC, &GPIO_InitStructure);

GPIO_SetBits(GPIOC,GPIO_Pin_0);

GPIO_ResetBits(GPIOC,GPIO_Pin_2); }

1.2 送餐机器人的定位功能

室内移动机器人定位是移动机器人设计的关键技术,由于室内环境,GPS(global positioning system)定位无法正常运行[5]。关于自主移动机器人的室内定位方法有很多种,而对于固定位置、固定路线的移动机器人,常常选择基于信标的定位方法,基于信标的定位系统依赖于一系列环境中已知特征的信标,并需要在移动机器人上安装传感器对信标进行观测[6]。在信标定位中,基于RF(radio frequency)定位(无线传感器网络定位)有WLAN,ZigBee,Bluetooth,UWB(ultra wide band)以及无线RFID(radio frequency identification),选用RFID用于酒店定位,RFID[7]是由阅读器、电子标签以及保存电子标签的数据库组成,RFID定位原理是阅读器发出射频信号,当电子标签处在射频信号内,电子标签内的线圈就会产生感应电流,然后电子标签获得能量后,发送储存在芯片内的信息,阅读器读取信息并解码。

设定每个酒店房间分配两个电子标签,记录房间信息,当送餐机器人携带阅读器经过房间,当阅读器接收到第一个电子标签信息后,送餐机器人开始减速,当接收到第二个电子标签信息后送餐机器人停止移动,送餐机器人房间定位原理如图3所示。

图3 房间定位原理图

1.3 循迹和避障功能

送餐机器人给房间送餐,每个房间的位置是固定的,因此送餐机器人的送餐路线也是不变的,送餐机器人可以采用红外循迹的方法移动。红外循迹是通过辨别黑色和白色来进行移动[8],在预定规划好的黑色线路上进行移动。红外循迹的原理为:在红外对管模块中有红外发射管和红外接收管,红外发射管向地面发射红外线,接收管接收反射回来的红外线。由于红外线发射出来的红外光,当遇到黑色时不反射红外光,此时在红外对管模块中,输出引脚会输出低电平;同理,遇到白色,会输出高电平。送餐机器人需要两对红外对管模块,根据输出的高低电平改变车轮的转向,从而实现送餐机器人的循迹功能。

送餐机器人在行驶的过程中,不可避免地会遇到人或其他障碍物,在设计送餐机器人时,需要避障功能,这里选择红外避障。此次设计的送餐机器人的避障过程是当传感器检测到障碍物时,机器人停止前进,等待前方没有障碍物时,继续前进,送餐机器人避障流程如图4所示。

图4 避障流程图

1.4 通信功能

送餐机器人要实现远程控制,需要将STM32单片机对接阿里云物联网平台。ESP8266作为WIFI通信模块,ESP8266在STA的工作模式下,实现ESP8266通过接收路由器的信号,从而能够连接互联网。使用MQTT(message queuing telementry transport)通信协议,实现STM32单片机与阿里云进行数据传输,安卓手机APP也同时接入阿里云,实现了APP远程控制送餐机器人。ESP8266连接阿里云物联网平台的程序如下,程序函数返回值的含义如表1所示。

表1 函数返回值

//连接阿里云物联网平台

char WiFi_Connect_IoTServer(void)

{

//复位ESP8266

if(WiFi_Reset(50))

return 1;

//使用AT指令,设置STA模式

if(WiFi_SendCmd("AT+CWMODE=1",50))

return 2;

if(wifi_mode==0){

//设置自动连接网络

if(WiFi_SendCmd("AT+CWAUTOCONN=1",50))

return3; // 连接路由器

if(WiFi_JoinAP(30)), return 4; }

//连接服务器

if(WiFi_Connect_Server(100)) return 5;

return 0; }

1.5 视频查看功能

市面上大多数移动机器人不能自主移动,而是在机器人前面安装IP网络摄像头模块,摄像头将前方路况画面回传控制面板上,根据路况来手动控制机器人的移动。而笔者使用IP网络摄像头模块的作用是:当送餐机器人长时间没有移动或长时间没有完成送餐,可以通过安卓手机APP,开启IP网络摄像头功能,查看送餐机器人周围的情况,及时排查送餐机器人长时间停留的原因;当遇到机器人无法判断继续前进的状况时,也可以根据IP网络摄像头回传的画面,在APP上手动控制送餐机器人的移动,完成送餐任务。

1.6 送餐状态检测功能

本设计中送餐状态信息能够及时在APP中的控制界面中显示,便于酒店工作人员查看,因此需要设计一种方案,确认送餐机器人到达了指定客房位置,客人是否已经出来取餐,需要将送餐完成情况回传到远程控制界面上。目前市面上一些送餐机器人都缺少检测部分,一般都是酒店工作人员过一段时间拨打客房服务电话,询问客人餐饮是否已经送达。另一种常见的做法是送餐机器人到达送餐房间后,客人取餐后,客人在送餐机器人按下确认按键,但是这种需要客人积极配合,如果客人取餐完成后忘记按确认,酒店工作人员不能及时在控制界面上收到回传信息,还是需要酒店工作人员打电话确认,这两种常见的方案,不仅会因为打电话询问打扰了客人,而且增加了酒店工作人员的工作量。

笔者设计了一种检测送餐状态方案,该方案是根据检测放餐饮位置的重量变化来检测客人是否取餐完成。在放餐饮位置下安装一个称重传感器,通过称重传感器不断计算出重量,当重量由高变低时,表示客人取餐完成,将完成信息通过阿里云物联网平台回传到APP远程控制界面上。检测送餐完成状态流程如图5所示。

图5 检测送餐完成状态流程图

使用应变式称重传感器和A/D转换器芯片HX711,应变式称重传感器的模拟输出电压信号给HX711转换芯片,HX711将模拟信号转换成数字信号,得出餐饮的重量变化量。笔者使用STM32F1单片机作为主控制器,对A/D转换器进行测量数据的采集,实现实时测量。测量出的数据再与设定值进行比较,如果测量数值大于设定值,表示送餐未完成,置位餐饮未取出标志位HX711_Flag;当测量数值小于设定值,复位餐饮未取出标志位HX711_Flag,表示送餐完成,回传送餐完成信息。送餐状态检测硬件程序如下:

/检测送餐完成程序

void Get_Weight(void)

{

HX711_m = HX711_Read();//读出采样值

//计算出实际重量

HX711_m = HX711_m/GapValue;

//重量大于300,则表示餐饮没有取出来

if(HX711_m > 300)

{

HX711_Flag=1;

Completion_Flag=0;

}

else

{

HX711_Flag=0;

delay_ms(1000);

}

//重量小于300,表示送餐完成

if(HX711_m <=300&&HX711_Flag!=1)

{

HX711_Flag=0;

Completion_Flag=1;

}

}

2 送餐机器人下位机软件设计

送餐机器人主控芯片为STM32F103ZET6,在使用各个模块时,首先要初始化每一个模块。下位机与阿里云建立连接时,需要ESP8266无线通信模块,ESP8266完成初始化后,使用AT指令,设置ESP8266工作在STA模式下,连接路由器,ESP8266开始与阿里云平台建立TCP(transmission control protocal)连接,建立成功后,根据MQTT通信协议和阿里云平台提供的STM32_MCU控制端三元组信息,发送连接报文。与阿里云平台建立连接后,发送订阅报文,订阅设备的Topic,用于接收APP控制端的控制信号,下位机控制流程如图6所示。

图6 下位机程序控制流程图

3 阿里云物联网平台

送餐机器人要实现远程控制,需要将送餐机器人接入阿里云平台上。首先,用户要登录阿里云,在物联网平台上创建产品,在产品下,添加设备,这次需要添加两个设备,分别是Android_APP控制端和STM32_MCU控制端,添加完成后,会生成唯一产品和设备,获得设备三元组[9]:ProductKey(产品密钥)、DeveiceName(设备名称)、DeviceSecret(设备密钥)。设备的三元组是上位机、下位机与阿里云建立MQTT报文通信协议标识符。为了区分APP向下发送消息,需要在设备管理栏下的产品中自定义功能类型,确保功能按钮的唯一性[10],部分功能定义如表2所示。

表2 功能定义

4 送餐机器人APP控制端UI界面设计

所设计的送餐机器人远程控制端使用Android Studio开发环境开发安卓APP。本系统设计的远程控制界面是由登录界面、注册界面、MQTT协议、多线程管理、送餐房间号管理、远程监控界面、手动操作界面组成,远程控制界面APP系统流程如图7所示。

图7 远程控制界面APP系统流程图

使用Android Studio开发远程控制界面APP的核心技术是建立Socket,数据的发送或接收,需要使用到Android系统中的Handler消息传递机制[11],Android系统调用Handler消息传递机制时,需要开启Message,Message Queue以及Looper[12]。Handler的任务是负责处理Message,在本系统中需要处理MQTT连接阿里云物联网平台的消息,包括MQTT连接阿里云成功、失败反馈消息以及阿里云收到单片机回传消息。

APP与单片机使用的通信协议是MQTT,APP连接上阿里云物联网平台,APP通过按钮的点击事件,将控制信息以JSON的ALINK协议格式上传到阿里云,然后通过阿里云以同样的数据格式下发给STM32MCU,STM32MCU执行相应命令。

在安卓手机上安装已设计完成的APP,打开APP,酒店工作人员需要先登录,登录成功后,才能有使用权限。

酒店工作人员登录成功,可以根据实际情况选择送餐房间,确定房间以后,APP界面跳转到远程控制界面上,远程控制界面如图8所示。

图8 远程控制界面

当送餐状态长时间处于未完成时,工作人员可以在远程控制界面上,按下手动按钮,进入手动操作界面。工作人员可根据摄像头拍摄情况进行手动调整完成送餐任务。

5 结论

送餐机器人使用STM32F103ZET6单片机作为核心控制器,使用ESP8266无线通信模块,根据MQTT通信协议,将单片机的数据上传到阿里云物联网平台。在Android Studio开发环境下,使用Java编程语言,开发远程控制界面APP,使用手机可以远程控制和监控送餐机器人。该机器人可以应用到酒店、医院及特殊隔离房间等场合,可以减轻工作人员的工作强度,减少运营成本。

猜你喜欢
电子标签阿里远程
RFID电子标签在全钢子午线轮胎中的应用
智能供应链物联网电子标签通信系统
远程求助
远程工作狂综合征
云上阿里
辰辰带你游阿里
图书馆不同领域的电子标签敏感信息智能过滤系统设计
远程诈骗
拳王阿里因何被人铭记
阿里是个好榜样