孙振邦,贾剑平,刘继忠,华 晶,郑恩涛
(南昌大学 机器人与焊接自动化重点实验室,江西 南昌 330031)
基于智能手机的服务机器人监护控制系统设计
孙振邦,贾剑平,刘继忠,华 晶,郑恩涛
(南昌大学 机器人与焊接自动化重点实验室,江西 南昌 330031)
以高龄老年人和瘫痪病人为主的病患,其生活自理能力的下降与丧失,造成了这类群体的长期日常护理问题变得日益突出。为缓解这一问题的严峻形势,研发一种立足于家庭和大众化的医疗护理系统符合当前社会需求。在自主研发的多功能服务机器人的基础上,依托智能手机平台,开发了移动监护系统。介绍了服务机器人的机电系统以及控制主板的硬件设计。详细论述了串口通信和利用Java媒体框架实现的视频交互。通过网络地址转换,系统具备随时随地对家庭中患者进行远程监控,远程护理的功能。实验结果证明,系统运行可靠,具有较高的实用性。
日常护理;服务机器人;远程监控;远程护理
老年人口数量的迅猛增长已经给当前的医疗资源和系统带来了可预见的严峻挑战。传统的医疗护理资源对于瘫痪或者生活难自理的患者而言,其供需矛盾是很突出的。当前社会人口红利正逐步下降,人工成本不断提升。资源分配不均衡与庞大市场需求的压力已迫切地要求传统护理手段的变革。本文从远程医疗的发展趋势着手,开发了基于Android系统的手机软件和Windows操作系统的服务器程序,结合多功能服务机器人,为病患实现远程护理提供了一种实用可行的方案。该系统能够应用于家庭,可提高护理质量,使护理工作变得简便易行,同时减轻患者因瘫痪和固定卧姿造成身体机能下降引起的如褥疮和肌肉萎缩等病症,可在一定程度上缓解老龄化带来的社会医疗问题。
远程移动监护系统由三个部分构成:服务机器人控制主板,这个部分可接收服务器发送的控制指令控制床体;服务器端作为服务机器人的本地监护控制端,服务程序采用Java编写,承担对病患的监控与床体控制指令的发送;远程移动监护端即用户的手机端,依靠WiFi或者3G网络,可实现移动端访问服务器端,达到实时监控和远程护理的目的[1]。系统架构如图1所示。家庭成员在各自手机上,都可以对家中患者实现护理。该系统可大大节约护理成本,降低护理人员的劳动强度,可满足家庭护理的需求。
图1 系统架构示意图
1.1 服务机器人机电系统
服务机器人主体部分是多功能护理床。多功能护理床采用4个直线电机驱动。各电机的行程安装位置依据床体设计的大小尺寸以及完成升降背、曲平腿、左右翻身和座便器升降的位置姿态来确定。各个控制动作之间,有严格的约束关系:即升降背和曲平腿时,翻身电机要回复平衡位置,床体要横向水平。翻身动作执行时,降背与平腿要先到达极限位置,床体要纵向水平。逻辑控制中需要将这些约束条件加入控制程序,才能使护理床实现预定的动作响应。电机驱动器采用JCB35E,供电电源为220 V/AC,机电系统结构示意如图2所示。
图2 机电系统结构示意图
1.2 控制主板硬件
服务机器人控制主板是远程控制多功能护理床的连接模块。它采用STC89C52单片机作为微控制器,工作电压为+5 V,直流电源供电,通过RS-232接口接收上位机服务器端的指令。微控制器判断接收的指令后运行相应的控制逻辑,控制继电器输出相应的动作信号。控制主板实物如图3所示。
图3 控制主板
2.1 软件内容
软件设计内容包括服务器程序和手机应用,开发平台为Eclipse。服务器程序和客户端程序都采用同一种开发语言,可大大提高系统的兼容性和开发效率。服务器端负责接收客户端的访问与请求。软件系统采用多线程编程,主要完成以下几个功能:串口通信、视频采集与发送、自动护理功能和网络地址转换等。
2.2 串口通信模块
在Java SE开发平台中,并没有串口编程的相关API。因此在Java应用程序中,需要使用SUN公司提供的Java串口通信包,控制RS-232接口[2]。
2.2.1 在javax.comm包中,几个重要的类
javax.comm.CommPort:CommPort是一个描述由底层系统支持的通信端口的抽象类。它包括一个对各种通信端口的通用的高层I/O控制方法。SerialPort 和ParallelPort都是它的子类,分别是串口控制类和并口控制类。
javax.comm.SerialPort:该类是描述串口的底层接口,可以直接对串口进行读写以及设置等工作。
javax.comm.CommPortIdentifier:该类是串口控制的核心类,用于对串口的管理。它包括的方法有:确定是否有可用的通信端口;决定端口的所有权;判断端口所有权的优先级;管理端口所有权状态改变引起的事件。
服务器程序采用多线程来管理不同的任务。程序初始化后,在主线程中开辟自定义的SerialOpen线程,使其在服务程序运行时打开串口,并获取I/O流。
2.2.2 串口参数配置
串口通信包中封装的API函数有如getPortIdentifiers()、getPortType()、open()和setSerialPortParams()等函数,就可实现对端口的检测、端口类型识别、串口打开和参数设置的功能。该线程还继承了SerialPortEventListener接口,在串口接收到数据时,可自动响应serialEvent()函数,执行数据处理。设置波特率值为19 200,数据位8位,停止位1位,无校验位,具体设置方法是:
/*获取端口列表*/
Enumeration portList=CommPortIdentifier.getPortIdentifiers();
/*获取端口ID*/
CommPortIdentifier portId=(CommPortIdentifier)portList.nextElement();
/*打开串口*/
if(portId.getPortType()==CommPortIdentifier.PORT_SERIAL)
{
SerialPort serialPort=(SerialPort)portId.open("SRComm",2000);
}
/*串口参数设置*/
serialPort.setSerialPortParams(19200,SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
2.3 视频采集与控制
视频监控功能能够使家属更加清楚地了解患者的状态,同时为远程床体控制提供了安全保障。采用的是Java媒体框架[3-4],它是Java的一个类包。
服务器端在接收到客户端的视频请求之后,需要开启摄像头设备。javax.media包中的CaptureDeviceManager类的getDevice( )方法可获取VFW视频设备。Manger类的createRealizedPlayer( )方法可获得本地端播放器player对象,用于显示本地监控视频。通过实例化的player对象可获得FrameGrabbingControl类对象。该对象的grabFrame( )方法可实现对当前视频的截取。实现主要代码如下:
1)打开摄像头并获取视频组件代码:
String vfw_str = "vfw:Microsoft WDM Image Capture (Win32):0";
//获取视频设备
CaptureDeviceInfo
captureDeviceInfo=CaptureDeviceManager.getDevice(vfw_str );
//获取MediaLocator对象
MediaLocator mediaLocator=captureDeviceInfo.getLocator();
//根据MediaLocator获取播放器
Player player=Manager.createRealizedPlayer(mediaLocator);
player.start();
//获得视频组件
Component comp=player.getVisualComponent();
2)帧图像抓取代码:
//获取画面抓取控件
FrameGrabbingControl fgc=( FrameGrabbingControl)player.getControl("javax.media.
Control.FrameGrabbingControl");
//获取图像缓存并生成图像对象
Buffer buffer=fgc.grabFrame();
BufferToImage btoi=new BufferToImage((VideoFormat)buffer.getFormat());
Image img=btoi.createImage(buffer);
客户端的消息处理线程,会从服务器的消息对象中解析出帧图像。由于客户端显示是在主线程(UI线程)中进行的[5]。为了解决Android线程间通信问题,采用了Handler消息传递机制。其原理是在主线程中重写handleMessage( )方法处理消息,当有消息传来时,该方法会从MessgeQueue中获取消息并自动回调。而在子线程中只需要负责将要处理的消息,发送到与之关联的MessageQueue中即可。
与此同时,需要将手机端的视频图像传送到服务器,进行视频交互。在视频连接成功之后,手机端会调用前置摄像头将预览图像显示在SurfaceView组件上[6],主要代码是:
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(Callback);
然后摄像头在预览回调函数camera.setPreviewCallback( )中实现接口PreviewCallback并进行捕捉图像,并将帧图像消息传输至服务器端处理。主程序流程图如图4所示。
a 客户端流程
b 服务器流程图 4 客户端与服务器程序流程图
在点击手机的遥控选项时,会跳转到窗体控制按钮页卡如图5,包括抬背、曲腿、翻身等按钮。在点击按钮后,程序将会产生控制消息并发送,并自动返回监控界面,保证对控制动作的实时监视。手机传输的帧图像和控制消息都被封装在同一类型的自定义消息对象中。根据内容的不同,通过setMessageID(String ID)方法给消息对象设置不同的属性ID。使用Java序列化机制,消息类需要实现Serializable接口。将封装好的消息对象通过ObjectOutputStream发送出去。服务器在接收数据时,通过反序列化,得到消息对象并进行消息类型判别,执行图像处理或是串口操作。
a 遥控 b 自动护理图5 遥控与自动护理(截图)
2.4 自动护理功能
为了使患者能够得到最有效的护理,该系统还设置了自动护理功能。对于瘫痪患者,由于长时间卧病在床而无力变换体位,会导致运动机能的进一步丧失和引起褥疮。传统护理手段需要监护人员长时间的守护。普通病床也不方便协助患者的姿态变换。该系统可方便家属在远程端依据患者情况,设置相应的自动护理模式。
在该界面中,每个护理动作都可以自行设定时间和开启。在设定完成之后,点击自动护理按钮,应用程序调用startService( )启动服务。Service不需用户界面可在后台长期运行。在服务中会保持网络连接的通畅,依据设定的时间,定时向服务器发送控制消息,实现软件的自动护理功能。普通的Service不是一条新的线程,如果处理耗时的任务,会阻塞主线程产生ANR异常。因此该服务继承了IntentService,会单独创建worker线程,并将定时操作在onHandleIntent( )方法中运行。为了保证护理可靠性,在每次自动护理动作的同时,都会在客户端实现提醒功能。当点击停止自动护理时,则会关闭此服务。
2.5 远程访问与控制实现
系统采用C/S结构,实现网络访问。Internet依靠TCP/IP协议,可以使任意两台计算机实现互联。TCP协议是一种“可靠的”,面向连接的传输机制,保证数据的无损和有序送达[7]。服务器/客户端模式在局域网中容易实现。在局域网中可以固定服务器的IP地址。客户端直接访问该IP就可实现通信连接。在本系统中,服务器位于家庭环境中的内网,无法获取固定的公网IP地址。智能手机在不同的网络环境下,其IP地址也是会随时改变的。因此,无法采用局域网访问方式。
网络访问采用内网代理服务器。在内网代理的服务器中,实现端口映射的功能[7]。将家庭内网主机即服务器的5221端口申请一个域名:15*********.xicp.net,外网访问端口号为:4***8。内网代理服务器会将本地服务器动态的IP地址及端口号映射到该固定的域名上。客户端在每次登陆时如图6,就可直接访问该域名以及外网端口号,就可解析至非固定IP的服务器上,实现访问功能。本系统采用Socket机制,Android中进行Socket编程与Java程序中一致[8]。服务器端程序在初始化后,就持续监听5221端口:Socket Server_sock=new ServerSocket(5221);。客户端在点击连接之后,执行的访问代码是:Socket Client_sock =new Socket("15*********.xicp.net",4***8);当服务套接字创建成功时,客户端和服务器端就可以实现双向通信。
图6 登录信息界面(截图)
服务器端程序开启运行之后,手机客户端在无线网络环境下登录成功,即可实现对服务器端的访问。通过反复测试,系统的视频交互流畅,延时性很低。护理操作功能稳定,能够实现对病患的各种护理。自动护理服务后台运行可靠,能够保证按照监护人的设定,实现无人自动护理,如图7所示。
本文从远程医疗的社会需求与智能家居的发展趋势出发,借助多功能服务机器人的平台,提出了利用智能手机实现远程监护患者的新型实用监护系统。通过视频监控、远程控制、自动护理等功能,摆脱了传统护理的局限性,使家属和医护人员能够更加方便的照料患者。随着智能设备的普及以及无线网络的发展,远程医疗及家庭护理将会迎来广阔的市场前景。
a 服务器端效果图
b 客户端效果图图7 系统运行效果(截图)
[1] 贾振堂,吕海莲,韩艳芳.手机视频监控系统及其性能[J].电视技术,2007,31(11):81-83.
[2] 吴金锋,刘伟平,黄红斌.Java串口通信数据采控系统的设计与实现[J]. 微计算机信息,2010(10):65-66.
[3] 赵莹,陆颖瑜,张永林. 基于Java的视频监控系统中报警录像功能的实现[J]. 计算机工程与设计,2008,29(17):4574-4577.
[4] 阎秀英,周亚建,胡正名.基于Java的网络实时远程监控系统设计[J]. 计算机工程,2009,35(5):74-75.
[5] BARTLOMIEJ B,DARIUSZ M,BOZENA M M. Remote video verification and video surveillance on android-based mobile devices[C]//Proc. 3rd International Conference on Man-Machine Interactions (ICMMI).Brenna,Poland:Springer,2014:547-557.
[6] 张雅楠,杨璐,郑丽敏. 基于Android手机的远程视频监控系统的设计与开发[J]. 计算机应用,2013,33(S1):283-286.
[7] 张建伟. 网络地址转换技术与网络安全[J].计算机应用研究,2001(2):123-125.
[8] 王家林. Android4.0网络编程详解[M].北京:电子工业出版社,2012.
【本文献信息】王宝珠,刘振,郭志涛.基于Android智能的健康监测系统设计与实现[J].电视技术,2015,39(24).
Design of Smart Phone-Based Monitoring and Control System for Service Robot
SUN Zhenbang,JIA Jianping,LIU Jizhong,HUA Jing,ZHENG Entao
(KeyLaboratoryonRobotandWeldingAutomation,NanchangUniversity,Nanchang330031,China)
The patients who mainly consist of elderly and paralyzed people lose their self-care ability gradually and completely. This lead to the problem of long-term daily care for the groups becoming worse. In order to alleviate the serious situation of this issue, develop the medical care system based on family and popularization that can meet the demand of current society. On the basis of self-developed multifunctional service robot, develop the system of mobile monitor and control relaying on smart phone platform. Introduce the electromechanical system of service robot and hardware design of control board. Then serial communication and video interaction by Java Media Framework are described in detail. Through network address translation, system can realize remote monitoring and remote nursing the patient in home anytime from everywhere. Test results show that the system is reliable, and has high practicability.
daily care;service robot;remote monitoring;remote nursing
国家自然科学基金项目(61273282);江西省高等学校科技落地计划项目(KJLD13002)
TP24;TP37;TP393
A
10.16280/j.videoe.2015.24.006
2015-07-10
【本文献信息】孙振邦,贾剑平,刘继忠,等.基于智能手机的服务机器人监护控制系统设计[J].电视技术,2015,39(24).
孙振邦(1990— ),硕士生,主要研究方向为机器人技术与智能化。
责任编辑:时 雯