目录
Hopf振荡器作为中枢模式发生器(CPG)模型的一种方法,在四足机器人、双足机器人、外骨骼机器人的步态控制中具有重要应用。本文首先介绍了Hopf振荡器的基础知识,包括其基本数学模型,并使用Matlab进行对其输出信息进行动态仿真;分析了振荡器初始值选取与参数之间的关系;振荡器各个参数对动态特性的影响进行了仿真分析。另外对多个振荡器耦合的算法进行了分析,并且通过仿真进行验证。最后,介绍了一种频率自适应振荡器的学习律,这种振荡器可以学习输入信号的频率,对其进行了仿真分析。文末给出了所有仿真源码的地址。
一、Hopf振荡器基础
1.1 数学模型
Hopf振荡器的数学模型如下:
其中x,y为振荡器的状态变量,,
为模型参数,与振荡器的动态特性相关,各个参数单独影响动态性能。
当初始值为:,模型参数为:
,振荡器的输出如下图所示。
(a)横坐标x,纵坐标y
(b)x,y的曲线
图1 Hopf振荡器输出
可以看出,Hopf振荡器的实质就是一个点,从初始位置收敛到一个圆周上,然后在圆周上随着时间做周期运动。收敛的快慢、圆周的大小、运动的速度可以通过模型参数调整。
1.2 初始值的选取
对于任意非零的初始值,在合适参数下(主要是),振荡器都能产生相同形状的周期性振荡信号。但是如果参数不合适,会导致信号不平滑,甚至发散。当初始值为:
,
分别为200,100,50时,振荡器的输出如下图所示。
(a)
(b)
(c)
图2 不同对应的输出信号
1.3 模型参数的选取
(1)收敛权值
参数的作用是控制从初始位置收敛到圆环的速度。当初始值为:
,模型参数为:
,其他参数不变的情况下,
分别为5,10,50时,振荡器的输出曲线如下图所示。
图3 振荡器的收敛速度
可以看出,越小,收敛速度越慢,但是如果
太大,会导致振荡甚至发散,如图2所示的情况。实际使用中,不能只最求快速收敛,应综合考虑。收敛太快,可能会导致收敛阶段的信号不平滑,甚至会超过某些幅值限制,例如速度、加速度超出实际系统的最大值。因此,实际使用时,应根据系统自身限制选择合适的收敛速度。
(2)幅值系数
振荡器输出信号的幅值,表示的是图1(a)中极限圆的半径,也是图1(b)中周期信号的幅值。当初始值为:,模型参数为:
,其他参数不变的情况下,
分别为0.25,1,1.44时,振荡器的输出曲线如下图所示。
图4 振荡器的幅值
可以看出,幅值A与参数的关系为:
。
(3)频率
这个参数表示振荡器的角频率,也就是1.1中所说的点绕圆周运动的速度快慢。当初始值为:,模型参数为:
,其他参数不变的情况下,
分别为
时,振荡器的输出曲线如下图所示。
图5 振荡器的频率
可以看出,当时,振荡器输出信号的周期
,当
时,振荡器输出信号的周期
,当
时,振荡器输出信号的周期
,所以,振荡器输出信号的周期T与
的关系为:
。
二、振荡器耦合
为什么要讨论多个振荡器耦合的情况?举个例子,四足机器人行走时,每条腿通过一个振荡器来产生固定节拍的信号,从而驱使四足机器人连续行走或小跑。机器人的四条腿并非同时抬起和放下,在一个固定步行模式下,每两条腿之间都有一个固定的相位差,为了保证任意时刻四条腿的节拍信号都满足固定相位差的要求,就需要在多个振荡器之间增加耦合。
在多个振荡器之间增加耦合的方法,就是在Hopf振荡器数学模型里面加入一个耦合项,如下所示:
其中,n表示耦合的振荡器个数,i=1,...,n分别对应各个振荡器,,其中
表示相位占比。
例如对于双足机器人,左右腿各一个振荡器,左腿i=1,右腿i=2,以左腿相位作为参考相位,两条腿交替运动,相位相差50%,则。初始值为
,
时,两个耦合的振荡器输出信号如下图所示。
(a)x1-y1和x2-y2
(b)t-x1和t-x2
图6 振荡器耦合的输出
可以看出,两个振荡器的输出信号相位始终相差50%。需要特别注意的是,在有些初始值情况下,耦合会失效,两个输出信号会完全相同。
三、自适应振荡器
这一节内容来自论文:Dynamic Hebbian learning in adaptive frequency oscillators.
本节介绍一种频率自适应振荡器的学习律,这里只讲用于Hopf振荡器上的自适应方法,这种方法可以类似推广到其他非线性振荡器。
3.1 自适应Hopf振荡器模型
Hopf振荡器与一个周期输入信号相耦合的模型为:
其中,
决定了振荡器的幅值,
是振荡器的固有频率,这表示,如果没有扰动(
)系统输出以
的速度振荡。这个振荡器与周期信号F进行耦合,如果没有耦合(F=0),系统有一个渐近稳定的极限环。而微小的扰动不会改变渐近稳定系统的整体表现,这个模型结构上是稳定的。
将上述模型改成极坐标系的描述,令,得到:
当振荡器的固有频率接近周期输入信号F的一个频率分量时,将会发生锁相现象,这意味着振荡器的频率与输入信号的频率会同步。
自适应学习律为:
(这里直接给出自适应学习律,省去了推导过程,感兴趣可以直接看论文)
这个学习律和上面的公式(*)就组成了自适应Hopf振荡器的全部模型,非常简洁。稳定性证明略。
3.2 仿真分析
(a) 输入信号为单频率周期信号
首先通过一个简单的例子来说明自适应系统是如何工作的,并讨论学习率参数对整个过程有什么影响。在公式(*)和(**)中,令输入信号为
,参数
,初始情况下
,
,
,当
分别为1, 0.8, 0.6, 0.4时进行仿真,结果如下图所示。
图7 不同参数的仿真结果
可以看出,振荡器的固有频率通过自适应调整,稳定到了输入信号的频率。同时,参数决定了自适应的速度,
越大频率学习的速度越快。
(b) 输入信号为多频率周期信号
当学习多频率输入信号的频率时,我们通常希望振荡器收敛到其中一个频率分量。但是,如何选择自适应振荡器的初始频率范围,才能收敛到特定频率分量呢?在证明稳定性的时候,给出了一个方程,用来描述输入信号频率与振荡器初始固有频率的偏差:
可以看出,这个方程取决于振荡器初始频率、输入信号的频率分量
以及该分量的幅值
。因此对于一个给定的输入信号,可以计算函数等于零时的
。这些零点给出了收敛区间,振荡器会向与
位于同一区间的频率分量收敛。例如输入信号如下:
主要的频率分量为,各频率分量对应的幅值为
,其他幅值为
。只需要求出下面方程的根:
可以求出根为0或,因为频率一般大于零,所以有效的解为:
,这两个解划分出了三个区间,当振荡器的初始频率分别处于下列区间时
,振荡器固有频率将分别收敛于20,30,40,只是在区间的临界处有一些不确定性。取
,
在各区间内任意取值时,振荡器最终收敛情况如下图所示。
图8 初始频率取不同值时的收敛情况
图中黑色虚线表示区间的边界,可以看出,当振荡器初始频率取不同区间的值时,振荡器频率的收敛情况与以上推倒完全一致。
四、参考文献
[1] Ludovic Righetti, Jonas Buchli, Auke Jan Ijspeert. Dynamic Hebbian learning in adaptive frequency oscillators.
源代码包里面包括4个m文件:
1)标准的Hopf振荡器仿真;
2)2个Hopf振荡器耦合的仿真;
3)自适应Hopf振荡器跟踪单频率的输入信号仿真;
4)自适应Hopf振荡器跟踪多频率的输入信号的仿真;