基于Arduino仿生机器人神经反射弧的研究∗
2019-10-08徐伟
徐 伟
(江汉大学工程训练中心 武汉 430056)
1 引言
纵观仿生机器人发展历程,到现在为止经历了三个阶段。第一阶段是原始探索时期,该阶段主要是生物原型的原始模仿,如原始的飞行器,模拟鸟类的翅膀扑动,该阶段主要靠人力驱动。第二个阶段是宏观仿形与运动仿生阶段,20世纪中后期,由于计算机技术的出现以及驱动装置的革新,主要是利用机电系统实现诸如行走、跳跃、飞行等生物功能,并实现了一定程度的人为控制。进入21世纪,随着人类对生物系统功能特征、形成机理认识的不断深入,以及计算机技术的发展,仿生机器人进入了第三个阶段,机电系统开始与生物性能进行部分融合,如传统结构与仿生材料的融合以及仿生驱动的运用[1]。
当前,随着生物机理认识的深入、智能控制技术的发展,仿生机器人正向第四个阶段发展,即结构与生物特性一体化的类生命系统,强调仿生机器人不仅具有生物的形态特征和运动方式,同时具备生物的自我感知、自我控制等性能特性,更接近生物原型[2]。
在实验室利用传感器模拟不同外界刺激,实现生物的自我感知、自我控制特性是本文仿生机器人设计的突破点,也是一个难题。
2 神经反射弧的生物学基础
21世纪初,俄罗斯生理学家巴甫洛夫在研究条件反射的过程中,创立了高级神经活动学说,即反射弧理论。在中枢神经系统的控制下,机体对刺激所做出的规律性应答反应称为反射[3]。连接肌肉中感受器和脊髓的弧线或路径穿过间隙,回到肌肉纤维,称之为反射弧(reflex arc)[4]。
巴甫洛夫认为反射是有机体与环境取得平衡的基本形式,反射弧是反射的结构基础和生理基础。反射弧通常由感受器、传入神经、反射中枢、传出神经和效应器五个部分组成,包括从接受刺激到发生反应整个神经系统内循环的路径。反射活动的完成依赖于反射弧的完整性,如果反射弧中任何一环节被破坏,反射活动都不能进行[5]。
3 仿生机器人神经反射弧实验实现目标
按照神经反射弧的生物学理论,对仿生机器人的神经反射弧实验确定实验目标,本实验既要使仿生机器人能实现神经反射弧的基本传导功能,体现神经反射弧的绝对不应期和相对不应期。同时,还要体现仿生机器人的“大脑”对反射弧产生的抑制作用和“肾上腺素”对反射弧的激励作用,具体功能如下:
1)反射弧的基本传导功能。反射弧的传导是单向连接,从肌肉感受器到感觉传导纤维,再通过脊髓间隙或者神经突触到达运动纤维,之后穿过肌肉神经结点最终传递到肌肉纤维[6]。肌肉感受器和与之相关的反射弧有不同的阈值,与数字电路类似,一旦感受器阈值达到,感受器就被触发[7]。
2)反射弧的绝对不应期和相对不应期。反射弧有一个绝对不应期(absolute refractory period)或者说在触发后需要经过一定的时间才能再次触发,可以把这一段时间认为是感受器的重启期。在绝对不应期后,感受器对刺激是不敏感的。随后,反射弧呈现出一个相对不应期(relative refractory period)[8]。即在绝对不应期后,感受器的不灵敏程度呈指数形式减弱,也即感受器灵敏程度应该是逐步加强,如图1所示。
3)反射弧实验的第三个特点是来自大脑的另外一些神经纤维。当它们被激活时,能够抑制(inhibit)反射弧的行为,按时或者直接命令运动系统采取一些措施或者直接停止某种错误的反射行为[9]。但反射行为的速度远大于可疑行为的速度,因为刻意行为的速度可能涉及到各种信号,信号在大脑中要穿过成百上千的连接点或神经突触(neural synapse),而反射弧只设计一堆局部神经元,所以刻意行为要比反射弧缓慢得多[10]。所以在后面程序编译中,定义抑制常量(globalInhibition)要略大于兴奋常量(globalExcitation)。
图1 反射弧的绝对不应期和相对不应期
4)反射弧实验的第四个特点是肾上腺素的参与。肾上腺素是人体经历某种刺激后,由肾上腺分泌的激素。肾上腺素的作用比较复杂,而且对于不同的器官的影响也大相庭径。总体来说,肾上腺素能暂时增强肌肉收缩力并增强忍耐力[11]。
一般电化学信号由大脑或感受器发出,最终传递到神经纤维,但肾上腺激素与人体神经系统的电化学信号不同,它并不生成信号,它只是降低触发感受器的阈值,而且当反射弧发生时,能最大限度发挥肌肉收缩潜能[12]。神经反射弧的生物原理如图2所示。
图2 反射弧的生物原理图
4 仿生机器人神经反射弧实验
4.1 仿生机器人神经反射弧实验硬件组成
仿生机器人神经反射弧实验基于Arduino单片机,一个开源的单片机电子设计硬件平台。硬件部分由Atmel AVR单片机、I/O接口及相关电路组成,软件部分包括标准的程序编译器和程序下载器。作为一种新型的集成开发环境,其采用C++或Java语言编程,简单易用且适用面广[13]。主要硬件如下:
1)伺服舵机两个。伺服电机由一个电机和一个编码器组成,编码器可以跟踪电机旋转角度,所以伺服电机可以用于静谧的运动,实现移动若干角度到达准确位置。一般伺服电机转动角度从0°~179°,在本实验中模拟生物体肌肉的动作。伺服电机引脚分别接Arduino单片机的数字量9、10引脚。这里的10号引脚上的伺服电机可以看做是第二块肌肉或者同一块肌肉上的第二束肌肉纤维。
2)S1、S2两个触敏开关。分别接Arduino单片机的6、7号数字量引脚。其中7号S1模拟大脑,在实验中抑制反射。6号模拟肾上腺素,在实验中促进反射。
3)P1是10KΩ的线性电位器,它的读数通过Arduino UNO的模拟量输入端口A0读入,控制伺服电机的初始位置。在刺激消失的情况下,伺服电机能够回到初始状态的位置。
4)FSR1是Sparkfun生产的力敏电阻。这种电阻在无外力时阻值最大可达到1MΩ,若用手在上面轻轻按压,则可以改变其阻值。当压力越大,其阻值越小,最小可达到1KΩ。力敏电阻模拟的是外界刺激。
5)力敏电阻和一个10KΩ的电阻R1形成串联回路,通过按压力敏电阻FSR1,改变力敏电阻的电阻值,R1两端的分压也会随之改变。这样,R1两端的电压信号则反映了外界刺激的大小,该数值通过Arduino UNO的模拟量输入端口A1读入。
其硬件原理图如图3所示。
图3 仿生机器人神经反射弧硬件原理图
4.2 仿生机器人神经反射弧实验软件代码
编写仿生机器人神经反射弧程序代码,如何做到通过以上多个传感器共同完成一个反射动作?这是一个关键的问题。解决渠道一般有两种方式:
1)包容体系结构(subsumption architecture)。在这种体系结构内,某些特定的传感器可以否决或抑制其余的传感器,可以认为手工划分传感器等级,但这种方法的问题在于不能很好地处理一些错综复杂的情况[14]。
2)传感器融合(sensor fusion)。这种方法可以处理那些由不同传感器发出的可能冲突的信号,简单来说就是传感器信号的混合[15]。有很多种办法可以实现传感器信号的融合,简单的方法就是直接取各传感器信号的平均值,较为复杂的办法是用数字信号滤波器应用于多传感器输出的信号,或者用相应的算法公式在程序中体现出来[16]。
经适当调试的传感器融合程序将相关传感器传来的信号按特定方式综合,通过这种方式对设计触发和抑制反射的复杂问题给出一个有意义且实施有效的响应。本程序中的语句“FSRValue>(noiseLevel+(inhibitionState*globalInhibition)+(excitationState*globalExcitation))”就是典型的传感器融合用法。
注1:参见硬件组成部分,将各输入、输出引脚以全局变量定义;
注2:定义P1线性电位器的引脚;
注3:定义马达延时5ms,马达反射延时2ms;
注4:给绝对不响应赋予初值1000ms,即1s;
注5:用millis函数分别给当前时间变量和相对时间变量赋予初值,即当前程序运行的时间值,单位为ms;
注6:给定干扰值,经验数据,可以人为设定;
注7:为相对不响应期设定一个斜率参数1000;
注8:为S1和S2分别设定一个权重系数值,经验数据,可以人为设定;
注9:当前时间与绝对不应期的基数时间值的差只有大于绝对不响应设定值(1000ms)时,才能发生反射弧现象;
注10:触发值triggerVal取干扰值和相对不应期渐进直线的纵坐标值,相对不应期本来应该是一个指数函数,但为了编程方便,采取用一个渐进直线函数y=kx+b,k取0.25,b取1000;
注11:只有当力敏传感器FSRMaxVal的值大于触发值时,刺激反射才能发生,程序转而去运行makeReflex()子函数,发生反射动作;
注12:当力敏传感器FSRMaxVal的值小于触发值时,刺激反射不发生,程序转而去运行置位子函数reset(),等待下一次的“刺激”。
5 结语
以上基于Arduino仿生机器人神经反射弧实验通过传感器和舵机组成的硬件电路,完全可以实现神经反射弧的一系列仿真动作。同时,可以在代码中加入中断或者其他更加复杂的算法,使程序代码可以为后续的仿生机器人的制作设置专门的“神经反射弧”的库文件,可以无限地在仿生机器人相关的实验中进行扩展和应用。在未来的发展中,仿生机器人将生物基础理论与机器人控制相结合,可以在行为链、动态平衡、光视觉、声音定位、心肺功能、内循环系统、机体衰老和情感表达等方面进行实验和探索。