Ввод уравнений в Matlab для функции Simulink - PullRequest
0 голосов
/ 22 ноября 2018

В настоящее время я работаю над заданием, в котором мне нужно создать два разных контроллера в 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 arguement 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) функцию.Любая помощь приветствуется на следующей неделе

1 Ответ

0 голосов
/ 23 ноября 2018

Вы ищете результат адаптивного процесса, поэтому вашему алгоритму необходимо учитывать время по мере его развития.Оператора (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, судя по исходной формуле, которую вы связали.Как правило, проектируйте свой код небольшими кусочками, убедитесь, что вывод каждого кусочка имеет смысл, а затем объедините все кусочки и убедитесь, что общий результат верен.

...