基于Android的家居机器人的设计与实现

2018-01-22 01:48程昭勋黎炜桁冯译萱陈紫杨张月霞
电脑与电信 2017年11期
关键词:视频流端口界面

程昭勋 黎炜桁 吴 萌 冯译萱 陈紫杨 张月霞

(北京信息科技大学信息与通信工程学院,北京 100101)

1 引言

随着移动通信技术的迅猛发展,智能手机也在人们的生活中逐渐普及。与此同时,人们对机器人等高科技产品的控制器要求也越来越高。传统的机器人控制器,比如遥控器,其大小以及兼容性问题的存在导致其无法满足人们对机器人控制的需求。目前,Android智能手机已经成为人们最常用的通讯工具,如果能利用Android手机解决对机器人的远程控制问题,将大大提高机器人控制的便利性并拓展其应用范围[1-4]。

目前,人们主要通过与机器人配套的遥控器来控制机器人,一些国外文献所设计的机器人控制软件中增加了视频采集与传输[5]、机械臂控制[5]与模式切换[6]等功能。以上研究提出的实用性很高,都有现实意义。在国内,移动终端上也有一些控制机器人的APP软件,如Robot Control、RoboSpace、黑盒机器人等。这类机器人种类繁多且功能强大。但国外软件的一些功能与接口被删减,数据更新不及时,并且这类APP代码较为冗长,无法进行二次开发,不便于软件的改进。而国内的软件用户操作形式比较单一,在对机器人的操控多为手动模式,APP中没有提供给用户更多的选择。基于以上情况,本文做出了一些改进。

本文提出了基于物联网的家居搬运机器人的全新理念并设计了基于Android的手机APP。该APP包括视频传输、运动控制、模式切换、机械臂控制和参数设置等功能。经过软件测试,软件可以实现对机器人进行控制,并且拥有易于使用、能够对于特定需求进行二次开发等优势,具有较大的应用潜力。

2 系统总体设计

该Android APP由包括视频传输模块,运动控制模块,模式切换模块,机械臂控制模块,参数设置模块组成。如图1所示。

图1 功能框图

进入开始界面后,先对各项参数进行初始化,如视频控制IP,视频控制端口,并可以对机器人以及云台的初始位置进行设定。

而后进入视频采集及动作控制界面,此界面中包含模式切换选项,提供巡线寻迹,超声波、红外避障,跟随主人功能。用户做出指令,若需采集视频则进入视频采集模块,并对采集好的视频进行解析,显示在视频播放器中,同时用户可以对机器人进行动作控制。若用户不需采集视频则可以直接对机器人进行动作控制。系统流程图,如图2所示。

使用java语言在eclipse编译平台上对Android APP进行开发、测试。

图2 软件流程图

3 软件设计

3.1 视频功能

在APP对家居搬运机器人传输视频的控制模块中,代码分别存放在以下三个不同文件中,即MyMainFrm.java、MyVideo.java和MySurface View.java。下面针对三个不同文件进行详细说明。

MyMainFrm.java是主页面,用户在其中设置视频控制地址以及控制端口。

MyVideo.java文件是用来显示视频的,是一个可见的界面文件。

MySurfaceView.java文件中的代码可以用来解析从wifi模块传回的视频,是一个播放器窗口。MySurfaceView.java文件嵌入到MyVideo.java文件之中,共同完成APP中对机器人传回视频的播放与控制功能,并在主页面MyMainFrm.java中显示。

具体地,在MyMainFrm.java中用变量videoUrl,control-Url和port获取wifi机器人的控制界面中用户在文本框中输入的视频地址,控制地址以及端口。并利用insert将刚刚获取的数据作为新定义的intent的参数。wifi智能机器人中运行着一个视频推流服务器mjpg-streamer,当点击开始按钮,在MyVideo.java中启动了线程,执行HTTPURL.connection请求指令,wifi模块就会开始采集usb摄像头采集到的视频,并通过HTTP端口号为8080反馈回Android控制端。

视频的解码部分,用read记录传回视频流的长度并按位解码。首先找到视频流,返回的视频流的开头为Content-Length,用它作为判定条件按位解析找到视频流。视频格式为mjpeg,此格式一帧以0xFF 0xD8开头,以0xFF 0xD9结尾,程序找到视频的包头和包尾并将之间的数据转换成JPEG格式,也就是一帧的图像。通过线程的循环不断地获取就能成为视频流。

接着decodestream函数进行解码产生bitmap bmp一帧的数据。最后进行显示,用函数调整长宽高,将一帧的数据放进canvas画布上并用unlockCanvasAndPost解锁画布并显示出来[7]。

最终,不停地通过while循环获取视频流,一帧一帧的视频流叠加在一起,对于人眼来说就是一个完整的视频。

3.2 运动控制功能

机器人的运动控制功能部分主要在MyVideo.java文件中。在这之前,先从MyMainFrm.java中获取到机器人的控制端口与IP地址,通过button_go的按钮跳转到MyVideo.java文件,通过文件中的代码对机器人进行前、后、左、右、停的运动控制。初始化中,在初始化定义的全局变量socket中设置机器人的IP和wifi这两个端口,将此变量作为命令传输的载体。接着利用MyVideo.java文件中定义的socketwriter输出流函数发出指令。最后,利用OnClickListener函数进行单击监听,即在APP中按下按钮后转到相应代码进行响应。

下面以前进为例:当用户按下前进按钮,socketWriter向机器人发出标准通信协议,用控制命令(byte)0xff,(byte)0x00,(by te)0x01,(byte)0x00,(byte)0xff}使机器人前进,执行完毕后用 socketWriter.flush()函数清除缓存[9,10]。

考虑到通信可能存在异常情况无法正常使用,使用try和catch语句捕获并处理异常[8]。

3.3 模式切换功能

机器人内置了“巡线遁迹”、“超声波避障”、“红外避障”、“跟随主人”、“手动模式”等功能的切换菜单,其中“巡线遁迹”、“超声波避障”、“红外避障”、“跟随主人”模式为自动模式,用户在APP端发送指令后机器人端利用AR9331WIFI模块接收指令,并调用各个传感器与舵机联动执行。手动模式则可以切换至用户自行控制。

针对可能遇见的较为复杂的环境,在设计此功能时,将其设计为手动模式优先级最高,因此在自动模式下,用户无需等待机器人的所有动作全部完成,即可切换至手动模式。提高了机器人控制时的稳定性,也可避免用户在对机器人添加更多传感器,对各个自动功能进行二次开发时测试造成的麻烦。

3.4 机械臂控制功能

机械臂控制功能与运动控制功能类似,wifi机器人中运行着ComToNet程序,它的目的在于把网口传过来的数据发送给串口。由于程序默认开放的端口为2001,故控制端默认端口也为2001。

与运动控制相同,利用socket作为载体,用socketwrite来发送数据。而与运动控制不同的就是传输协议,如表1所示。

表1 传输协议代码

3.5 参数设置功能

对于视频传输的关键参数、视频地址、控制地址以及端口的设置部分,利用EditText窗口,由用户自行输入,而其他常量在constant.java中设置。

对于数据的输入利用图形化控件进行控制,如按钮和滚动条等。而为了使其与软件进行关联,利用监听函数,使程序在用户改变了控件参数后机器人能够响应[11]。

4 软件测试

根据wifi智能机器人小车系统总体设计方案,利用Android平台具体实现了各个模块的功能。

4.1 主界面测试

进入APP后可以成功进入主界面,各控件能够正常显示,如图3所示,并有软件更新提示。

图3 APP主页面

4.2 视频采集显示以及动作控制测试

进入主页面后点击开始按钮,顺利进入视频采集显示以及动作控制界面,并能够使用摇杆对机器人的运动进行控制,360度有效,并能够同时使用图形化控件对机器人机械臂进行控制,如图4所示。

图4 视频采集及运动控制界面

4.3 模式切换界面测试

在视频采集界面中进行模式切换,即可对机器人的控制模式进行切换,巡线寻迹功能,超声波、红外避障功能,跟随主人功能以及手动控制功能均可实现,且精度较高,如图5所示。

图5 模式切换界面

4.4 参数设置测试

进入主界面后,点击设置按钮可对机器人的初始参数进行设置,如关键参数视频控制IP,视频控制端口,并可以对机器人初始位置以及云台坐标进行设定,如图6所示。

图6 初值设置界面

5 总结

本文实现了基于Android开发的应用程序,整个系统专门用于对物联网的家居搬运机器人进行控制。该家居搬运机器人通过单片机连接各个模块,结合物联网及手机APP对其进行控制。最终达到了预期设定的目标。经过软件测试,该APP可以对机器人进行控制,且易于使用,能够对于特定需求进行二次开发,具有较大的应用潜力。

[1]Fiawoo S Y,Sowah R A.Design and development of an Android application to process and display summarised corporate data[C]// IEEE,International Conference on Adaptive Science & Technology. IEEE,2012:86-91.

[2] Slavin R,Wang X,Hosseini M B,et al.Toward a framework for detecting privacy policy violations in android application code[J]. British Journal of Educational Technology,2016(03):25-36.

[3] Aligombe A,Ahmed I,Richard Iii G G,et al.AspectDroid:Android App Analysis System[J].Hepatology,2016(04):145-147.

[4] Moran K,Linaresvasquez M,Bernalcardenas C,et al.Automatically Discovering,Reporting and Reproducing Android Application Crashes[C]// IEEE.

[5] International Conference on Software Testing,Verification and Validation.IEEE,2016:33-44.

[6] Oster J,Behar J,Colloca R,et al.Open source Java-based ECG analysis software and Android app for Atrial Fibrillation screening[C]//IEEE International Conference on Software Testing,Verification and Validation.IEEE,2014(12):731-734.

[7] Roy S,Deloach J,Li Y,et al. Experimental Study with Realworld Data for Android App Security Analysis using Machine Learning[C]//Computer Security Applications Conference.2015:81-90.

[8]邓知辉.基于A n d r o i d控制平台的家居机器人设计与实现[J].信息通信,2015(10):64-65.

[9]刘凤臣,姚赟峰,刘黎明,等.高速搬运机器人产业应用及发展[J].轻工机械,2012(02):108-112.

[10]汤莉莉,王金勇,黄伟.物联网智能机器人设计[J].现代电子技术,2017(08):73-76.

猜你喜欢
视频流端口界面
边缘实时视频流分析系统配置动态调整算法研究
一种端口故障的解决方案
基于视频流传输中的拥塞控制研究
国企党委前置研究的“四个界面”
交换机生成树安全
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
端口阻塞与优先级
铁路货场智能大门集装箱全景图像采集方法研究
电子显微打开材料界面世界之门
美国视频流市场首现饱和征兆