我目前正在执行一项任务,需要在Matlab/Simulink中为机器人外骨骼腿创建两个不同的控制器。这背后的想法是将两者进行比较,看看哪种控制器更能帮助佩戴它的人。我很难将特定的方程放入Matlab函数块中,然后在Simulink中运行,以获得AFO(自适应频率振荡器(的结果。链接中有我试图输入的方程式,下面是我迄今为止的代码:
function [pos_AFO, vel_AFO, acc_AFO, offset, omega, phi, ampl, phi1] = LHip(theta, eps, nu, dt, AFO_on)
t = 0;
% syms j
% M = 6;
% j = sym('j', [1 M]);
if t == 0
omega = 3*pi/2;
theta = 0;
phi = pi/2;
ampl = 0;
else
omega = omega*(t-1) + dt*(eps*offset*cos(phi1));
theta = theta*(t-1) + dt*(nu*offset);
phi = phi*(t-1) + dt*(omega + eps*offset*cos(phi*core(t-1)));
phi1 = phi*(t-1) + dt*(omega + eps*offset*cos(phi*core(t-1)));
ampl = ampl*(t-1) + dt*(nu*offset*sin(phi));
offset = theta - theta*(t-1) - sym(ampl*sin(phi), [1 M]);
end
pos_AFO = (theta*(t-1) + symsum(ampl*(t-1)*sin(phi* (t-1))))*AFO_on; %symsum needs input argument for index M and range
vel_AFO = diff(pos_AFO)*AFO_on;
acc_AFO = diff(vel_AFO)*AFO_on;
end
https://www.pastepic.xyz/image/pg4mP
从本质上讲,我不知道如何做下标、西格玛或(t+1(函数。感谢任何帮助,因为这将于下周到期
您希望找到自适应过程的结果,因此您的算法在进行时需要考虑时间。不存在这样的(t-1(运算符。它只是一个数学符号,告诉你需要重用一个旧值来计算一个新值。
omega_old=0;
theta_old=0;
% initialize the rest of your variables
for [t=1:N]
omega[t] = omega_old + % here is the rest of your omega calculation
theta[t] = theta_old + % ...
% more code .....
% remember your old values for next iteration
omega_old = omega[t];
theta_old = theta[t];
end
我想你忘记了根据你链接的原始公式对phi应用模运算。一般来说,将代码设计成小块,确保每一块的输出都有意义,然后将所有部分组合起来,确保总体结果是正确的。