随着机器人技术和康复医学的发展,康复机器人已成为一种新的运动神经康复治疗技术,通过康复训练运动疗法来维持并改善脑卒中偏瘫患者的关节活动度[1],可防止肌肉萎缩,促进患肢运动功能的恢复,同时改善运动的协调性。利用机器人技术进行康复训练,辅助脑卒中引起的上肢功能障碍的恢复,得到了人们越来越广泛的认可。
上肢康复训练机器人经过二十多年的发展,已取得了很大的进展。通过对上肢康复训练机器人发展现状的研究[2]可以发现,现有的多种机器人系统在人机交互控制方面仍存在一些不足,人机交互控制系统全部都是基于个人计算机,操作方式主要是通过鼠标与键盘[3-4]。一方面这种设计要求医护人员在康复训练现场操作设备,降低了工作效率;另一方面,脑卒中偏瘫患者的行动能力通常较弱,很难通过传统的计算机操作方式进行交互,削弱了患者对自身康复治疗过程的关注程度与参与程度。本文的目标是设计并实现一个基于嵌入式Linux的上肢康复训练机器人用户控制系统,利用该便携式终端设备的移动处理能力,结合相关的无线通信模块和LCD显示控制模块,实现训练时运动关节参数的实时采集、无线传输,方便医护人员提前设定针对不同患者的康复训练计划,并在离开康复训练现场进行工作的同时又能监控处于运行状态的上肢康复训练机器人,掌握患者的训练动态,适时做出调整,提高医护人员的工作效率。
1 嵌入式系统框架
整个用户系统的原理框架如图1、图2所示。图1为硬件框图,图2为软件框图。硬件部分包括ARM主控制器开发平台和外围设备两大部分。主控芯片包括串口、以太网口、触屏接口等各类接口,负责对信号进行处理、存储,LCD控制器和触屏接口负责控制信号的传输以及显示,通信模块依据SPI通信协议完成信息数据在主控制器与外围设备(主要是底层动力控制系统)间的传递。
1.1 处理器的选择与开发环境搭建
本文选择了三星公司型号为S5PV210的微处理器作为用户控制系统的主控芯片。S5PV210基于ARM CortexTM-A8内核进行设计,使用ARM V7指令集。S5PV210的运行主频高达1 GHz,可以确保嵌入式Linux操作系统及其应用程序的及时响应并稳定运行。本文设计的嵌入式用户控制系统硬件基于友善公司推出的mini210开发板,该开发板使用了S5PV210微处理器为主控芯片进行设计,配备7英寸电阻式触摸屏作为用户操作的终端设备。宿主机上搭建的嵌入式开发环境包括安装Linux操作系统、交叉编译工具以及NFS网络文件服务器的配置和串口调试终端的选择等。本文的GUN/Linux操作系统选择Ubuntu13.04,程序编辑软件使用gvim,配合gcc/g++编译器,串口调试终端使用Minicom,并根据目标板的配置修改和裁剪了2.6.37版本的Linux内核[5]。
1.2 驱动程序的开发
基于嵌入式Linux内核的应用程序无法像普通单片机程序一样直接操作GPIO、USB、串口等任何系统外设模块,需要使用相应外设的Linux设备驱动提供的统一函数接口API。某些特殊外设需要按照Linux设备驱动规范自行编写,本文所涉及的驱动主要是字符设备的驱动[6],包括7英寸LCD控制终端的按键驱动、触摸屏的驱动以及SPI通信模块的驱动。下面仅以SPI通信协议为例介绍系统通信模块的驱动。
无线通信模块采用SI4432芯片,SI4432通过SPI接口与外界进行通信,因此在嵌入式用户控制系统中,底层SPI驱动程序主要完成SI4432与S5PV210间的通信。上层SPI驱动完成通过主控芯片外设模块向SI4432发送指令和数据,最终由SI4432芯片控制器控制射频收发器完成数据收发,实现控制终端与底层动力控制系统相应无线模块之间的无线数据传输。SPI的驱动结构可以分为3个层次:SPI 核心层、SPI控制器驱动层和SPI设备驱动层。SPI 核心层由Linux内核决定,应用程序的开发无需关心。SPI控制器驱动可用数据结构spi_master来描述,是与处理器平台相关的软件层,本文中对应的是ARM系列处理器。SPI设备驱动层为应用程序接口层,它提供了通过处理器平台的SPI外设模块访问具体SPI设备的接口。SPI设备驱动层可以用spi_driver和spi_device两个结构来描述。这3个重要数据结构之间的关系如图3所示。
SPI驱动程序作为字符设备文件,需要定义SI4432通信芯片的SPI特性参数,并提供S5PV210的SPI控制器对SI4432通信芯片的读、写功能函数接口。本文具体实现的主要函数接口包括spi_si4432_open(),spi_si4432_read(),spi_si4432_write(),spi_si4432_interrupt(),spi_si4432_ioctl(),spi_si4432_poll(),spi_si4432_
probe(),spi_si4432_message()等。其中最为关键的是读、写函数。读操作的目的是通过上层SPI驱动发送接收指令,然后把接收到的数据转存至内核缓存区,再由内核缓存区读入用户空间数据结构中,写操作与之类似。驱动程序采用中断的方式来告诉系统数据是否已经发送或者接收完毕。每发送或接收完一组数据,中断信号就被触发,CPU执行中断处理函数。
2 嵌入式用户图形界面GUI设计
本系统选用了嵌入式Linux的主流GUI系统之一Qt作为开发工具[7]。嵌入式GUI要求直观、可靠、占用资源少且响应迅速,与系统硬件资源有限的情况相符。另外嵌入式GUI应具备高度的移植性和剪裁性。Qt以面向对象的C++语言为基础,通过Qt API接口函数与Linux I/O设备直接交互,它采用帧缓存(buffer frame)作为底层图形接口,将外部设备抽象为键盘和鼠标的输入事件,具有良好的跨平台移植性以及强大的API支持。
2.1 GUI整体设计流程
目前实现的嵌入式用户控制系统主要包括5大部分:用户注册和登录管理,医生控制中心、患者控制中心、设备控制中心以及康复训练游戏。使用对象包括医护人员和康复患者两类,医护人员更加偏向于对上肢康复训练机器人的管理、病人训练计划的安排及监测;患者则更侧重于实际训练过程的细微调整、对训练项目及康复小游戏的选择以及执行训练计划等。由此,在用户登录界面选择不同登录类型时将进入不同的控制中心面板,从而获得不同的设备操作权限。整个用户控制系统共绘制了12个主要的操作、显示面板。
整个Qt用户系统界面的设计采用了QGraphicsView场景-视图框架,通过在视窗Viewport加载不同的场景Scene来实现窗口部件的切换。以医生控制中心面板的构建为例,实现了从视图(QGraphicsView)->场景(QGra-phicsScene)->自定义窗体部件类(QWidget)->子窗口类(QLabel,QSlider等)->信号与槽函数链接(Singnal & Slots)添加的一整套用户操作系统界面的设计,共计12个界面之间的快速链接跳转,方便医护人员及患者对终端设备的操作。
class DocCtrlCenterView : public QGraphicsView
//自定义医生控制中心视图
{ …
public:
DocCtrlCenterView(QWidget*parent, logInInfo logInInfoIn);
//函数构造
~DocCtrlCenterView();
DocCtrlCenter *docCtrlCenter; //建立场景
private slots:
void UpdateNow(){this->viewport()->repaint();};
//提供实施刷新的槽函数
};
class DocCtrlCenter : public QGraphicsScene//自定义场景
{ …
DocCard *docCard;//声明场景中的类
SysCtrlPad *sysCtrlPad;
…
QGraphicsProxyWidget* a;//声明代理Widget
…
};
2.2 运动参数存储与提取
在用户控制系统中,需要将医生设定的康复训练计划转换为机器人各个关节的电机驱动参数[9]并发送到底层动力控制系统实现对机械臂运动的实时控制,以及得到反馈信息并绘制康复机器人机械臂的各项关节运动参数。在计划设定阶段以及从数据传输模块读取运动参数后,系统会把数据分发到数据库存储线程进行存储,存储数据块大小由缓冲队列的数据块大小决定。根据需求,本文使用QSQLite完成数据的操作管理。QSQLite是SQLite数据库提供的一个Qt数据库驱动,通过该驱动,所有的Qt应用程序可方便地访问SQLite数据库。数据库的设计包括多张数据表格[8],以康复训练的被动训练计划定制为例,实现该计划的定制涉及到s_Passive_Exercise、s_ScheduleSet两个数据表,如图4所示。根据终端用户的操作实现对数据库条目以及各项参数的增加、删除、更新以及查询。
2.3 各关节运动参数曲线绘制
设备控制中心提供了关节运动参数曲线绘制功能,该功能通过Qwt(Qt Widgets for Technical Applications)工具库实现。Qwt提供了一系列GUI组件和曲线绘制的实用类,包括Curves(曲线)、Slider(滚动条)、Dials(圆盘)、Compasses(仪表盘)等。使用QWT绘制数据曲线所要用到的主要类包括QwtPlotCanvas与QwtPlotCurve。其中,QwtPlotCanvas类为曲线绘制提供画板,画板上则可以绘制曲线、标签、坐标、网格等组件;QwtPlotCurve类则用于绘制曲线,它由一系列的数值点组成,有多种显示方式,包括折线、点状/平滑曲线等。在程序中,用户系统定时发出关节运动信息反馈请求,底层动力控制系统收到请求后将检测到的新的关节运动信息反馈给用户系统。
2.4 康复训练游戏
“反弹球”游戏是通过对Qt社区提供的开源游戏QBall移植而实现的[9]。原始的QBall游戏只能使用触摸屏或计算机键盘进行控制。本方案中,利用关节的真实运动信息控制游戏中虚拟挡块的左右移动,将程序移植的工作集中在探究关节运动号与挡块位置之间的关联。该游戏控制一个可左右移动的挡块,将落下的红球反弹回去,被撞击到的上方各色的方块消失,不同的颜色对应不同得分,游戏结束时将给出最终得分。
3 实验验证
用户控制系统的实验样机为上海理工大学自行研制的3自由度中央驱动式上肢康复机器人[10]。样机的机械部分与底层动力控制部分不在此论述。为了验证嵌入式用户控制系统的性能,设置实验场景如下:(1)在设备控制中心界面设置机器人单关节运动参数,利用传感器采集驱动电机角速度、角位移,在参数输出面板绘制曲线。(2)在主动训练模式下进行康复训练游戏。
首先使用嵌入式用户控制中断在设备控制中心界面将肘关节的速度设置为300 r/min,运动范围上下限设置为-800°~+800°。点击运行按钮使肘关节对应电机旋转,观察实验过程中角速度的变化情况。电机从静止开始加速旋转至设定值300 r/min时,观察到设备控制中心绘制的角速度曲线如图5所示。从图中的角速度曲线可看出,电机角速度从0加速至300 r/min用时0.1 s。图中显示的加速时间还需考虑数据传输、软件分析的时间,其真正代表的是两个角速度数据采集点的时间差,而不是实际意义上的0.1 s,当然,由于底层动力系统及用户控制系统处理性能较强,这个时间差仅会稍微超过0.1 s。
经实验验证,系统能够对样机机械臂的运动速度、活动范围等参数进行及时响应并实现实时调正,并可将具体的一个自由度上的角速度或角位移参数通过曲线方式在面板上描绘。在底层动力控制系统运行在正常工作状态的条件下,设定参数与反馈参数匹配度较好,并能实现由患者带动机械臂主动运动进行康复训练游戏。
本文通过深入研究嵌入式Linux系统的原理与使用,以 mini210开发板为硬件平台完成了一套应用于上肢康复训练的嵌入式用户控制系统的设计,实现了使用触屏终端无线控制上肢康复训练机器人的运行,并可在终端实时显示关节的角速度、角位移的参数。同时设计了名为“反弹球”的康复训练小游戏,允许患者操作系统样机来控制游戏,有助于提高其参与兴趣,使其主动完成训练任务。控制系统具备智能化的人机交互方式,允许医护人员通过设定机械臂的各项运动参数来制定量化的康复训练计划,并实现了医生与患者之间的远程沟通以及医生与机器、患者与机器间的远程控制,增强患者对整个康复训练过程的参与程度。