王清波 虞 成 朱隽典 胡志奇 袁 杰 王琳斌
基于Node.JS的远程实时虚拟康复训练系统研究
王清波①虞 成①朱隽典①胡志奇①袁 杰①王琳斌①
目的:建立远程实时虚拟康复训练监控系统,利用虚拟现实的视觉等反馈机制,帮助医生及时了解患者现状并指导下一步康复,便于患者在离院康复过程中接收医生专业化评价。方法:通过Node.JS和Socket.io构建远程实时数据传输系统,服务器端采用弯曲传感器测量手指弯曲程度,利用串口通过蓝牙模块传输数据,从而构建无线数据手套。同时利用Node.JS构建服务器,使用node-serial port接收串口数据,并使用Socket.io建立远程实时连接。客户端采用支持WebSocket的Mozilla Firefox浏览器,采用网页形式登录服务器,接收远程实时数据。通过jUART模块将数据以串口形式发送,虚拟手模型单元接收串口形式数据,数据提取后用于控制虚拟手。结果:通过Node.JS建立了稳定的远程实时数据传输,可以将弯曲传感器数据准确传输,以控制不同地域下的三维虚拟手模型。结论:构建一套基于Node.JS的远程实时虚拟康复训练监控系统,用于离院后患者脱离医生指导下的手部运动康复。结论:远程实时虚拟康复训练系统可构建一套基于无线式数据手套的虚拟手控制系统,能够有效用于患者的手部运动康复。
弯曲传感器;虚拟现实;手模型;康复
[First-author's address] Department of Medical Equipment, Hangzhou First People’s Hospital, Hangzhou 310006,China.
有研究显示,目前在美国和欧洲脑卒中是导致成人卒中后残疾的首因,且为世界范围内第二大死因[1]。随着世界人口逐步老龄化,脑卒中疾病将造成极大的社会负担,而此种情况在发展中国家将会更为严重[2]。迫于患者家庭经济承担能力的限制,多数中风患者在医院里进行初步的康复治疗之后则立即回到家中进行下步康复进程。因此,有效和低成本的家庭远程康复就显得尤为重要。对于患者而言,在家庭康复中的重要问题是无法与医生进行有效沟通和交互。为此,本研究设计远程实时传输数据系统平台,通过实现远程虚拟康复训练系统的引进,以解决患者通过远程医疗在家庭康复的问题。
实现远程康复训练的虚拟交互平台,即设计能够远程实时传输数据的系统平台,在测量手指活动角度的数据手套基础上,将患者端数据远程传输至医生端;然后结合基于网页的IO读取技术,利用现有虚拟手训练,以有效地跟踪患者手的运动。
远程虚拟康复训练监控系统包括患者端和医生端,将患者数据手套测量的数据远程传输到医生端。由于在常规情况下患者所处的网络多为家用网络,医生所处多为医院公共网络下的子节点,网络属于不同的IP段下,无法通过IP直接通讯,故采用通过花生壳申请域名,对动态域名进行解析的方法,保证系统平台的通用性。在系统中数据平台部分主要包括服务器设计、实时数据通讯模块和虚拟手模型3部分。其中服务器端负责接收数据手套采集的串口数据,实时数据通讯模块负责服务器端与客户端之间的实时数据传输,并将网络接收的数据以串口形式发送至虚拟手模型单元(如图1所示)。
1.1服务器设计
1.1.1数据手套设计
为检测手指关节弯曲角度,许多商用的数据手套使用弯曲传感器(Flex-Sensor),如Nintendo Power数据手套。弯曲程度越高,电阻值越大[7]。本研究使用弯曲传感器作为康复患者手指弯曲角度的测量输入源。
通过串接角度传感器电阻,测量角度传感器的电压,将其连接到电压跟随电路。手指的角度变化通过弯曲传感器测量后,经过分压电路,跟随电路经STC12C5A60S2的P1口进行AD采集。采集手指角度变化信息后采用蓝牙短距离无线通信技术将数据传输至电脑进行网络传输。蓝牙模块使用HC-05蓝牙串口套件,其使用CSR主流蓝牙芯片,蓝牙V2.0协议标准[8-9]。
STC12C5A60S2芯片采样精度为10比特,每组数据共5个手指,平均采样5次,加一组测试数据,共6组数据打文件包传输。数据格式采用文件包头+ 6组数据区(手指号+高位数据+低位数据)+文件包尾的形式。在实际使用Node.JS中,利用ASCII码传输,数据更直观有效。文件包头与文件包尾数据采用48~57的阿拉伯数字,有关手指关节信息,每个关节10位数据,分拆为高位数据6位与低位数据4位,分别在串口数据发送时加至8位。数据转换为ASCII码区64~127的数据段和64~79的数据段。数据由客户端接收,在控制虚拟手时,转换为实时数据。
1.1.2基于Node.JS的数据采集服务器设计
Node.JS是一个开放源代码,其为跨平台的、可用于服务器端和网络应用的运行环境,Node.JS应用JavaScript语言写成。Node带来的高性能I/O用于实时应用,Voxer将Node应用在实时语音上,国内腾讯的朋友网将Node应用在长连接中,以提供实时功能,花瓣网及蘑菇街等公司通过socket.io实现实时通知的功能[10]。
图1 远程实时虚拟康复训练监控系统设计图
为了能够实时读取蓝牙模块接收的USB转串口数据,需引入SerialPort模块,而node-serialport 是Node.JS的数据包,用来对串口数据进行读写操作,如“var SerialPort=require(“serialport”). SerialPort”。由于接收到的为串口数据流,在函数serialPort.on'data', function(data)中对串口数据进行获取并按格式进行分包。
1.2实时数据通讯模块
1.2.1基于浏览器的实时数据传输
通常,浏览器访问网页时,会向页面所在的服务器发送一个HTTP请求,Web服务器确认请求并向浏览器发回响应。在许多情况下,返回的信息到达浏览器显示页面已经过时。由于远程实时数据传输是本系统设计的核心,采用Websocket规范。传统的WebSocket是HTML5的一种新通信协议,其实现了浏览器与服务器之间的双向通讯[11]。
而Socket.io是一个完全由JavaScript实现、基于Node.JS、支持WebSocket的协议用于实时通信以及跨平台的开源框架,包括了客户端的JavaScript和服务器端的Node.JS。Socket.io设计的目标为构建能够在不同浏览器和移动设备上良好运行的实时分析系统、二进制流数据处理应用、在线聊天室、在线客服系统、评论系统及WebIM系统等。目前,Socket. io已经支持主流PC浏览器(如IE、Safari、Chrome、Firefox、Opera等)和移动平台上的浏览器(iOS平台下的Safari、Android平台下的基于Webkit的浏览器等)。
在服务器端,经过安装Socket.io模块后,在Node.JS程序中引入该模块:
io =require('socket.io').listen(server)
在客户端连接,身份识别核对后,开始传输串口数据
socket.emit('newMsg', socket.name,SerialData, mycolor);
在客户器端,index.html主页插入javascript脚本,引入socket.io模块
<script src="/socket.io/socket.io.js"></ script>
同时自行编写脚本引入,<script src="scripts/ VirHand.js"></script>
从网页上接收服务器端推送的实时数据
this.socket.on('newMsg', function(user,msg, color)
1.2.2基于jUART的数据串口传输
基于浏览器的数据获取后,需以串口形式将数据转发至虚拟手操作单元,但在采用浏览器模式下,对客户端硬件I/O的操作比较受限。本系统中采用jUART系统平台,可以在浏览器上进行JavaScript框架下的串口通讯[12]。直接引用该平台下的相关函数,进行串口通讯,其中recv为接收到串口数据时的回调函数。
1.3虚拟手模型
OpenSceneGraph(简称OSG)是开源的高性能三维图形开发包,使用OpenGL技术开发,是一套基于C++平台的应用程序接口(application program interface,API),能够让程序员更加快速、便捷地创建高性能、跨平台的交互式图形程序,并可广泛应用于可视化仿真、游戏、虚拟现实、科学计算、三维重建、地理信息、太空探索以及石油矿产等领域[13]。
本研究沿用前期研究的虚拟手OSG模型(部分采用浙江大学求是高等研究院设计的虚拟手)作为展示模型,提供作为患者的手部反馈[14]。在利用远程数据控制虚拟手时,可识别48~57的文件包头和文件包尾数据,截取中间位于≥64数据区的数据,分别减去64后转换为手指信号+高位数据(6位)+低位数据(4位)的形式,组合后数据用于虚拟手控制,如图2所示。
图2 虚拟手模型图
2.1服务器端
服务器端包含无线数据手套和远程数据传输部分。
2.1.1无线数据手套
开机上电后自动检测手指关节弯曲角度,按照10 Hz/s速度传输数据。蓝牙模块上电后自动连接,通过串口检测、接收数据,并有效传输数据。弯曲传感器采用粘合的方式固定在手套上,数据手套佩戴舒适。
2.1.2远程数据传输
通过node-serialport有效接收、检测串口数据格式后实时发布数据。服务器端利用1~60循环数进行数据发送测试,无线数据为每秒1组,数据格式采用文件包头+手指序号+数据+文件包尾,其中6号序号手指(测试数据组)数据利用与时间相关的循环数替代。服务器与客户端分别放置于家庭网络和医院办公网络,测试前两地时间与北京时间对齐,客户端后台查看数据接收,接收时间相较本地时间无明显延迟(时间延迟<1 s)。
2.2客户端控制
客户端部分采用网页作为数据传输中介,加载jUART模块。当通过网页远程登录服务器时,可实时接收服务器传输的数据,并通过串口模块将数据发送到虚拟手模型。虚拟手模型可有效接收串口数据,并实时显示出该数据,客户端接收串口数据后直接控制虚拟手,无网络所引致的延迟,虚拟手控制能够连续和稳定进行。
本研究通过Node.JS和Socket.io来构建远程实时数据传输系统,服务器端完成手指弯曲数据采集和远程实时数据推送,客户端部分完成数据获取和虚拟手模型控制。服务器端采用弯曲传感器测量手指弯曲程度,转换成模拟信号后输入至芯片(STC12C5A60S2)的AD采集单元,并转换为数字量然后利用串口通过蓝牙模块传输数据,从而达到构建无线数据手套的目的。同时,通过“花生壳”申请域名,利用Node. JS构建服务器,使用node-serialport接收串口数据,使用Socket.io建立远程实时连接;客户端支持WebSocket的Mozilla Firefox,采用网页形式登录服务器,实现接收远程实时数据。通过jUART模块将数据以串口形式发送,虚拟手模型单元接收串口形式数据,数据提取后用于控制虚拟手。该系统稳定可靠,能够达到预期的设计技术要求,可为患者提供带视觉反馈的自主康复训练平台。
[1]Feigin VL.Stroke epidemiology in the developing world[J].Lancet,2005,365(9478):2160-2161.
[2]Donnan GA,Fisher M,Macleod M,et al. Stroke[J].Lancet,2008,371(9624):1612-1623.
[3]李海丽,谢叻,魏盛凯,等.手功能康复机器人技术[J].机械设计与研究,2014,30(1):24-28.
[4]Lukas Z,Mario J,Lar S,et al.Increasing patient engagement during virtual realitybased motor rehabilitation[J].Arch Phys Med Rehabil,2013,94(9):1737-1746.
[5]Wang CY,Hwang WJ,Fang JJ,et al. Comparison of virtual reality versus physical reality on movement characteristics of persons with Parkinson's disease:effects of moving targets[J].Arch Phys Med Rehabil,2011,92(8):1238-1245.
[6]Resnik L,Meucci MR,Lieberman-Klinger S,et al. Advanced upper limb prosthetic devices:implications for upper limb prosthetic rehabilitation[J].Arch Phys Med Rehabil,2012,93(4):710-717.
[7]Ibarra Zannatha JM,Tamayo AJ,Sánchez AD,et al.Development of a system based on 3D vision,interactive virtual environments,ergonometric signals and a humanoid for stroke rehabilitation[J].Comput Methods Programs Biomed,2013,112(2):239-249.
[8]樊锐,李茹,王绩一.蓝牙/ZigBee无线网络传输系统的设计与实现[J].内蒙古大学计算机学院,2013,23(1):209-213.
[9]陈鹏展,祝振敏.基于环境光能量收集的低功耗蓝牙传感器[J].仪表技术与传感器,2014(2):4-10.
[10]朴灵.深入浅出Node.JS[M].北京:人民邮电出版社,2013:163-164.
[11]Vanessa W,Frank S,Peter M.HTML WebSocket权威指南[M].北京:机械工业出版社,2014:7-9.
[12]龚君佐.78例手部屈肌肌腱断裂修复术的临床疗效分析[J].医药卫生(全文版),2015(11):93.
[13]杨晓,廉静静,张新宇.基于OSG的虚拟场景中包围盒碰撞检测的研究[J].计算机技术与发展,2011,21(9):32-38.
[14]王清波,虞成.基于无线式数据手套的虚拟手控制系统研究[J].中国医学装备,2015,14(12):35-37.
[15]李懿,陆光明,金帅,等.手部精细运动获取缺损数据修复方法[J].浙江大学学报,2013,47(6):925-956.
Research of a remote real-time virtual rehabilitation training system based on Node.JS/
WANG Qing-bo, YU Cheng, ZHU Juan-dian, et al//
M China Medical Equipment,2016,13(8):7-10.
Objective: To establish a remote real-time virtual rehabilitation training system by using vision feedback mechanism of virtual reality, help doctors to understand the status of patients in time and facilitate patients to receive doctors’ professional evaluation in the process of rehabilitation out of hospital. Methods: A remote real-time virtual rehabilitation training system was established by Node-JS and Socket.io. The part of server collected the bending angle of finger based on bending sensor and used the serial port to transmit data by blue-tooth, and then the wireless data glove was established. The server was established by Node.JS, using the module of node-serial port to receive serial data and the module of Socket.io to build remote real-time connection. The part of client used Mozilla Firefox browser with websocket support and the web for signing in the server to receive the remote data. The glove data was sent by module of jUART and was received by virtual hand module for virtual hand control. Results:A remote real-time data transmition system was established by Node.JS. It could transmit the bending data accurately to control the 3D virtual hand model under different geographical conditions. Conclusion: A remote real-time virtual rehabilitation training system based on Node.JS could help the hand’s rehabilitation of patients who were out of hospital without doctors’ face to face guidance.
Flex-sensor; Virtual reality; Hand model; Rehabilitation
1672-8270(2016)08-0007-04 [中图分类号]R318.04
A
王清波,男,(1983- ),硕士,工程师。杭州市第一人民医院设备科,从事医学生物传感器检测等技术项目研究以及医疗设备的临床验证研究、医疗设备售后的技术支持等工作。
10.3969/J.ISSN.1672-8270.2016.08.003
①杭州市第一人民医院设备科 浙江 杭州 310006
2016-04-10