基于线性振荡器的CPG控制器

目录

一、CPG控制器介绍

二、线性振荡器模型

三、Matlab代码实现

(1)代码

(2)测试效果


一、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控制效果,当存在多个关节时,应当建立多个振荡器的耦合数学模型,引入相位差物理量。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值