本文主要是复现了Central Pattern Generator(CPG) Control of a Biomimetic Robot Fish for Multimodal Swimming中的CPG算法。论文链接可见DOI:https://doi.org/10.1007/s42235-019-0019-2
机器鱼运动学分析
根据Lighthill的理论,鱼体在行进时的鱼体中线可用公式概括:
在公式中,分别表示鱼体摆动的一次与二次波振幅包络(wave amplitude envelop),
分布表示鱼体波动数与鱼体波动长度,
表示鱼体波动角速度。上图中鱼体行进的角度
。
在原文中采用的是绳驱式(wire-driven)机器鱼,鱼尾的摆动主要依靠拉绳的伸长与缩短。其结构可如下图所示。
其中需要注意的是图(c),这是两个关节之间的最基本结构。为关节数,
为两侧拉绳的距离,
为关节的高度,
为两关节之间的距离,根据这个视图,
表示该关节的弯曲角度,
与
分布表示两侧拉绳的长度。根据这个结构的几何分析,可得到拉绳长度变化与该关节弯曲角度的关系(左边长右边就短):
由于该关节的弯曲角度非常小,所以上述公式可以进一步简化为
进一步,可得舵机的旋转角度与鱼体活动关节的旋转角度
的关系为
第i个关节在XOY坐标系的位置可以表示为
机器鱼的控制方法
在该论文中,采用CPG的控制方法,由于绳驱动模式,只需要一个电机进行控制,故没有神经元之间的相互影响。改进后的CPG公式如下:
在CPG公式组中,存在四个控制参数:,
为舵机的输出信号,设定有上下限幅-60°~60°。
仿真实验
根据论文所给的鱼体机构的参数,设置有。只需要设置上述所提到的四个控制参数,就可以控制鱼体进行前进与转弯,当需要鱼体转弯时,设置CPG的参数
采用matlab进行仿真,代码如下,
M = 30
w = 2*pi
B = 0
R = 1
Kb = 10
Km = 10
N = 5
d = 36
r = 33
b = 0
first_b = 0
second_b = 0
m = 0
first_m = 0
second_m = 0
fai = 0
first_fai = 0
alpha = 0
beta = 0
bending_angle = 0
alpha_array = []
beta_array = []
T_array = []
bending_angle_array = []
T = 0.05
for t = 0:T:5
second_b = Kb * (0.25 * Kb * (B - b) - first_b)
second_m = Km * (0.25 * Km * (M - m) - first_m)
first_fai = (((1 + R)^2)/(4 * R) - ((R^2 - 1)/(4 * R)) * sign(sin(fai))) * w
fai = fai + T * first_fai
first_b = first_b + T * second_b
b = b + T * first_b
first_m = first_m + T * second_m
m = m + T * first_m
alpha = b + m * cos(fai)
beta = b + m * sin(fai)
if alpha > 60
alpha = 60
end
if alpha < -60
alpha = -60
end
bending_angle = 2 * N * asind((deg2rad(alpha) * r)/(N * d))
alpha_array = [alpha_array; alpha]
beta_array = [beta_array; beta]
T_array = [T_array; t]
bending_angle_array = [bending_angle_array; bending_angle]
end
figure
plot(T_array, alpha_array, T_array, bending_angle_array)
xlabel('Times (s)')
ylabel('Angel (°)')
title('The CPG control signals for cruising mode')
legend('The rotational angle of servomotor', 'Bending angle')
最终,仿真的结果如图,与论文结果相符合