目录
一、CPG控制器介绍
CPG控制是将神经科学和机器人学很好结合的例子。仅通过低维少量的输入信号即可控制复杂高维的运动,可以形成周期性的节律发生器。在机器人的应用中,可以起到降低控制难度和控制量平滑过渡的效果。对于其关键振荡器模型目前存在多种多样的设计:
二、线性振荡器模型
线性振荡器模型易于理解和求解,参数较少,方便在机器人上快速部署,单个关节角度控制模型:
原函数:
其中r(t)为t时刻的摆幅,x(t)为t时刻的偏置角,R和X为预期的收敛值,α和β用以调节收敛速度。
三、Matlab代码实现
(1)代码
代码中对单个关节的摆幅、频率和偏置分别应用了以上数学模型,代码如下所示:
clc;clear;
syms theta t T alpha beita sigma r0 x0 r_n r_l x_n x_l f0 f_n f_l j i;
T=0.02;
i=-T;
f=1;
r=5;
alpha=5;
beita=5;
sigma=0.1;
t=0:T:11-T;
A=[];
r_l=r;
x_l=1;
f_l=0.5;
% angle_change=[40,40,40,30,20,10,10,10];
% r_change=[20,20,20,20,20,20,20,20,20,20,20];
r_change=[5,10,20,30,40,40,40,30,20,10,10];
x_change=[1,1,1,5,10,15,20,15,10,5,1];
% x_change=[1,1,1,1,1,1,1,1,1,1,1];
f_change=[0.5,0.5,1,1,1,1,1,3,3,3,3];
for j=1:1:11
r0=r_change(1,j);
x0=x_change(1,j);
f0=f_change(1,j);
for i=i+T:T:i+1
r_n=r_l+T*alpha*(r0-r_l);
r_l=r_n;
x_n=x_l+T*beita*(x0-x_l);
x_l=x_n;
f_n=f_l+T*sigma*(f0-f_l);
f_l=f_n;
% theta=x_l+r_l*sign(sin(2*pi*f*i));
theta=x_l+r_l*(sin(2*pi*f_l*i));
% g=sawtooth((2*pi*f)*i,0.9);
% theta=x_l+r_l*g;
A=[A,theta];
end
end
plot(t,A,'b.-');
xlabel('t/s');
ylabel('angle/°');
(2)测试效果
①三角函数曲线输入时振幅、频率和偏置变化的平滑过渡效果图:
②其他函数输入:
方波:
锯齿波:
可见对于离散的输入以及不可求导的输入,线性振荡器模型同样有优秀的应用效果。只测试了单个关节的CPG控制效果,当存在多个关节时,应当建立多个振荡器的耦合数学模型,引入相位差物理量。