崔雪渭,彭熙,2,3,颜顺,陈含丽子,杜笛箫,杨琬晨
(1 华中师范大学 计算机学院,武汉 430079;2 湖北省高等学校计算机基础实验教学示范中心,武汉 430079;3 湖北省人工智能与智慧学习重点实验室,武汉 430079)
随着控制技术、信息技术等现代科技的飞速发展,拥有与人手相似结构的仿生机械手已具备很强的灵活性,因而可代替人手完成复杂操作,成为医疗保健、资源勘探、灾难救援等诸多领域的实用工具[1]。表面肌电信号(Surface Electromyography,SEMG)是肌肉收缩时伴随的电信号,是在体表无创检测肌肉活动的高效方法,在人机交互控制、手势识别等领域发挥着重要作用[2]。
在仿生机械手结构设计方面,Xu 等人[3]提出了一种与人手高度相似的仿生机械手结构。在肌电信号方面,程扬威[4]对基于多通道表面肌电特征图像的手势识别进行了深入研究,通过提取不同表征的肌电特征及深度学习,实现了对不同手势的精准识别。吴娜[5]也提出了一种基于一维卷积神经网络-独立循环神经网络(Conv1D-IndRNN)模型的手势识别算法,提升了通过表面肌电信号进行手势识别的准确率。但是对于如何将肌电信号处理与仿生机械手控制相结合,构成面向仿生机械手的肌电控制系统,却少见成熟可行的设计。
本文提出了一种面向仿生机械手的肌电控制系统的设计与实现,即仿生机械手能够实时模拟手部动作,可用于灾难救援、医疗恢复,也可用于排爆等高危环境中。
本文所设计的仿生机械手肌电控制系统大致可以分为3 个部分:肌电信号的采集、肌电信号的处理和动作匹配。首先,利用六导联肌肉电传感器搭配Arduino UNO 采集肌电信号;然后,树莓派接收Arduino UNO 传送的数据,进行数据处理和加工;最后由树莓派做出判断,向仿生机械手发出运动指令,使其执行相应的动作。各组成部分的结构框架如图1 所示。
图1 仿生机械手肌电控制系统的结构框架Fig.1 Structural framework of myoelectric control system of bionic manipulator
本文选用的肌电传感器为六导联肌肉电传感器,能够采集人体手臂或者腿部的表面肌电信号,并对其进行一系列的放大与滤波处理。还有2 种通道增益方式,也可结合Arduino UNO 输出原始肌电信号或者包络后的肌电信号。
树莓派是一款基于ARM 的微型电脑主板,以SD/MicroSD 卡为内存硬盘,不仅具备所有PC 的基本功能,还有着丰富的硬件接口。本文使用的树莓派四代B型,具有40 个引脚接口,不仅可以读取肌电传感器采集的肌电信号并进行处理匹配,还可以与仿生机械手进行串口通信,以控制仿生机械手做出与肌电信号相对应的动作。
本文选用了树莓派和并行舵机控制板协同工作的方式,根据通信原理及舵机控制指令对树莓派控制系统进行设计。即树莓派在对肌电信号加以处理后,将进行仿生机械手的动作匹配,再向并行舵机控制板发出相应命令,从而控制仿生机械手对动作进行实时模拟。
肌电信号,是人体运动时肌肉产生的生物电信号,能够反映肌肉动作的状态。当人的肌肉在运动时,相应的肌肉群会发生收缩。比如,当人的右手运动时,会受到大脑中枢神经系统的控制,右手骨骼肌的肌肉将会收缩以完成相应动作,此时就会在皮肤表面产生生物电信号。
肌电信号具有微弱性、低频性、易受干扰性等特点[6],其幅值主要在100~5 000 μV,频率范围在0~1 000 Hz,信号中的主要能量和频谱主要集中在10~500 Hz。同时,采集肌电信号时易受电极位置、皮肤状态、场所噪音等影响。
目前,肌电信号的采集方式主要有2 种:侵入式采集与非侵入式采集。两者的区别在于采集的位置和方式不同。其中,侵入式采集需要把针极刺入被试者的肌肉组织内部,这样一来信号采集的过程就不受外界干扰,但在一定程度上会对被试者造成伤害;非侵入式采集需要把电极贴片与被试者的皮肤表面接触,通过此种方式采集到的信号就是表面肌电信号。
本文选用六导联肌肉电传感器进行肌电信号的非侵入式采集。其前端采集电路通过1~6 通道采集人体手臂或者腿部的肌电信号,并对SEMG 进行一系列的放大与滤波;中端通过单刀双掷开关切换Envelope Mode 和RAW Mode 输出信号;后端采用Arduino UNO 采集中端的输出信号,并控制LED灯发光,可以通过其亮度快速得出SEMG 信号的强度。
肢体所完成的动作是依靠若干肌肉相互协调所致,并非其中一块肌肉单独引起的。人体手臂的肌肉分布如图2 所示。
图2 人体手臂肌肉分布示意图Fig.2 Schematic diagram of human arm muscles
经过反复的实验测试,发现指部的伸屈与肱桡肌、指浅屈肌、指深屈肌、尺侧腕屈肌和桡侧腕屈肌的关系更加紧密。故将肌电传感器的一次性贴片电极贴在上述肌肉组织上进行采集。该电极贴片与肌肉接触面积小,从而能够减少周边肌肉对选定肌肉的信号干扰。根据前人的医学研究发现,在被试者手臂上放置4~5 个电极片,可使动作识别率最大化。
在多通道肌电信号的数据处理中,活动段检测是极其重要的一个部分,可以确定很多组手势中每一个手势动作的起始时刻和终止时刻,对每一个手势动作进行划分。信号的活动段检测能够对连续多个手势动作进行准确判别,直接影响着后期的特征提取和模式分类。本文使用移动平均法进行活动段检测。移动平均法是短时能量检测算法中一种典型方法,能够从连续的肌电信号中有效区分出活动段和静息段,方便不同手势动作的识别。
在初步采集中,共收集了3 个动作的39 445 条肌电信号数据。由于采集时肌电传感器使用了2 个通道,因此数据集的总维度是39 445×2,对应39 445个标签。此后,根据标签将数据转换为3 个部分,并在每个部分中进行分组操作,每200 个合并为一组,因此每一组的维度为200×2×1,作为卷积神经网络的输入。在训练过程中将数据集打乱,同时对标签数据进行one-hot 操作,并取80%作为训练集,20%作为测试集。在构建神经网络模型时使用了Python的Keras 模块,该卷积神经网络共有5 层、即3 层卷积层和2 层全连接层,如图3 所示。
图3 卷积神经网络模型图Fig.3 Convolution neural network model
每一层经过卷积操作后得到的特征图大小的计算公式如下:
特征图的数目由卷积核个数决定,因此每一次卷积操作之后得到的特征图大小为(高度,宽度,卷积核个数)。
本文中,选择了基于梯度优化算法的Adam 优化器,损失函数则选择了多分类研究任务中常用的categorical_crossentropy。训练过程共迭代100次,每次训练的数据样本量为64。训练后的损失值如图4 所示。
图4 训练集和测试集损失值Fig.4 Loss value of training set and test set
考虑到树莓派达不到正常PC 机的算力,为了能够在用树莓派运行时取得实时的效果,本文采用了KNN 分类算法,KNN 算法作为最经典的机器学习算法之一,实现起来也十分简单。KNN 算法的核心思想为:如果2 个样本足够相似,即在特征空间中的距离足够近,则这2 个样本大概率属于同一类别。为了提高判断的准确率,在实际应用中通常寻找离待测样本最近的K个样本,根据K个样本的类别来判断待测样本的类别。在不考虑距离权重时,K个样本中哪种类别的样本数量最多,则待测样本同属于此类别。本文使用了Sklearn库中的KNeighborsClassifier 来实现KNN 算法。
首先是采集数据,将采集到的握拳、张开以及Yeah 手势的数据集分别设置标签,依据标签分成三大组。而后将一个标签中的数据视为KNN 中的一个点,将数据集中80%的数据设置为训练集,将数据集中20%的数据设置为测试集。
之后将数据进行存储后便可以进行K个预测投票,再利用测试集中的数据进行测试,发现精度达到96%,属于简单的学习任务,适用于KNN 算法。
用新数据预测时,可按行读取输入的数据,并按行投票判断归属于哪一类,最终将每一行的结果再依据类别进行累计,输出累计数目最多的结果。
本机械手具有高度的仿生性能,根据人手手指关节的结构和运动自由度进行设计,采用了连杆结构,使得一个伺服舵机能够控制一个手指上3 个关节的运动,即伺服舵机通过主舵转动推动连杆使得一个手指向前弯曲,主舵反方向转动拉动连杆使得手指伸张,如图5 所示。这样的结构能够使仿生机械手比较轻巧灵活地实现人手的动作。
图5 机械手连杆结构Fig.5 Connecting rod structure of the manipulator
仿生机械手使用的舵机是LX-224 双轴总线舵机,如图6 所示。LX-224 双轴总线舵机扭矩为20 kg,自由度为180°,能够充分满足手指关节的运动需求。
图6 LX-224 舵机Fig.6 LX-224 steering gear
该舵机为并行舵机,在舵机控制系统中,本文研制并开发了一款具有多并行舵机控制功能的舵机控制板。舵机控制板大多以单片机(STM32/STM8等)作为核心,本文的并行舵机控制板以单片机STM8S003 为主板。STM8S003 提供了10 比特模数转换器、3 个定时器、1 个串口、1 个IIC 等功能模块。同时并行舵机控制板内还集成了2 块PCA9685 作为驱动模块。驱动模块PCA9685 是一款IIC 总线控制的16 通道的PWM 波发生器,每个输出通道都有自己的12 位分辨率固定和频率单独的PWM 控制器,该控制器在典型的24~1 526 Hz 的可编程频率下运行,占空比在0%~100%范围内可调。PCA9685 还具有一个外部时钟输入引脚,可以接受用户提供的时钟(最大50 MHz),代替内部25 MHz振荡器,此功能允许同步多个设备。仅占用主控板的4 个引脚,通过IIC 通信协议就可以驱动16 台舵机。此外,可以通过级联的方式最多级联62 个驱动板。本机械手所使用的并行舵机控制板共级联了2个驱动板,可以驱动32 台舵机。
并行舵机控制板如图7 所示,控制板电路图如图8 所示。
图7 并行舵机控制板Fig.7 Parallel steering gear control board
图8 舵机控制板电路图Fig.8 Circuit diagram of steering gear control board
本文所涉及的系统主要由树莓派4B、并行舵机控制板、并行舵机、肌电传感器、Arduino 等部分组成。控制系统各模块硬件连接如图9 所示。
图9 控制系统各模块硬件连接图Fig.9 Hardware connection diagram of each module of control system
为了满足本文硬件需要,树莓派需要设置开机自启动项,同时通过配置文件来修改树莓派的设备树,改变引脚的映射关系,将ttyAMA0 映射到引出的GPIO Tx /Rx上,以此使用高性能的硬件串口。Arduino 需要使用A0~A5和D0~D13的引脚完成与肌电传感器的数据传输、控制LED 灯等功能。此外,还要使用USB 线将Arduino 与树莓派进行连接。
5.2.1 Arduino 与肌电传感器之间的通信
Arduino 与肌电传感器之间通过Arduino的D0和D1引脚来实现串口通信;通过D2~D4引脚分别实现移位寄存器的数据、时钟和锁存功能;通过D5和D6引脚来控制灯的按键;通过D7~D12引脚输出的数据来控制传感器上灯的颜色;通过D13引脚来使能控制灯的模块;通过A0~A5引脚来接收肌电传感器的包络信号。最终能够通过Arduino 读取肌电传感器的肌肉电信号数据。
5.2.2 树莓派与Arduino 之间的通信
树莓派与Arduino 之间通过USB 口进行连接,使用串口通信方式。连接后检查是否存在ttyACM0文件,存在即可正常使用。由于串口通信简单、并且能够实现远距离通信,符合项目要求,所以树莓派和Arduino 之间使用串口通信。串口通信主要就在于各类参数的匹配,例如波特率、数据位、奇偶校验。2个端口如要实现通信,这些参数必须匹配。
5.2.3 树莓派与舵机控制板之间的通信
本文选用了树莓派和并行舵机控制板协同工作的方式来控制机械手。并行传输相比于串行传输的优点在于易于实现和速度较快,虽然传输距离近,但对本系统来说已经足够,所以选择并行传输方式,并使用上述自主研制的并行舵机控制板。具体实现方式为:控制板的Tx 接树莓派的Rx,控制板的Rx 接树莓派的Tx。本次设计中,图9 中树莓派的8 号引脚(TXD)、10 号引脚(RXD)分别与并行舵机控制板的Rx、Tx 引脚相连。最后设置相同的波特率,即可将树莓派上的指令传输给舵机控制板,从而实现对舵机的控制。
本文针对仿生机械手肌电控制系统进行了测试与评估。5 名被试者首先进行表面皮肤处理,然后使用自主设计的上位机软件采集当前动作的肌电信号,如图10 所示。
图10 数据可视化及动作预测Fig.10 Data visualization and action prediction
测试中,握拳、五指张开和Yeah 手势每个动作各做20次,即每个动作都有100 组数据,分别统计每个动作正确识别的个数、错误识别的个数以及识别率见表1。
表1 测试实验结果统计Tab.1 Statistics of test results
从表1 可以看出,在进行测试的动作中,握拳的识别率最高,达93%,而张开和Yeah 手势识别率略低。考虑到被试者之间体质差异的问题,这样的误差可以理解。另外,实验过程中还发现,张开和Yeah 手势之间容易发生错误识别,经分析发现是由于两者肌电信号有时近似度较高。
另一个评估标准是系统的响应时间。实验中,发现仿生机械手反应相对迅速。为了实现定量分析,对每个动作从开始预测到输出结果的时间进行了统计。结果表明,系统的平均识别时间为12 s。而本系统每20 ms 采集一条肌电数据,即采集当前动作的400 条肌电数据需要8s,所以预测速度平均为4 s。进一步分析后可知,通过提高采集速度和优化匹配模型,能够更好、更快地得出结果。
综上所述,本文的仿生机械手肌电控制系统是合理的。
本文设计了一种基于肌电控制技术的仿生机械手肌电操控系统,由六导联肌肉电传感器、肌电信号传输导联线、Arduino UNO 单片机、上位机、树莓派4B、并行舵机控制板及仿生机械手构成,基本实现了对人手的实时模仿。后续可通过ZigBee 实现远程控制,进而用于排爆等高危行业和偏瘫患者的手部功能恢复等领域。目前由于只采集了3 个动作的肌电数据做测试,存在一定的局限性。但总体上对仿生机械手的后续发展与应用具有一定的借鉴意义。