Как решить уравнение ODE в Simulink? - PullRequest
0 голосов
/ 11 июня 2019

Я изучаю отчет об оценке угла крена. В статье я нашел следующую схему:

this

где vx - продольная скорость транспортного средства, psi_dot - горизонтальная скорость рыскания, lambda_dot - скорость крена, а лямбда - угол крена. Мне нужно проверить этот метод на matlab / simulink

Вот мой симулятор:

here

Я выбрал случайные значения (я надеюсь, разумные) для vx и скорости рыскания, тогда как lambda_dot аналогична той, что использовалась в статье. Функциональный блок MATLAB содержит этот код:

function lambda = fcn(vx, yaw_r)

  g = 9.81;

  lambda0 = -(vx*yaw_r)/g;

  tspan = [0 40];

  [t,lambda_var] = ode45(@(t,lambda_var) tan(0.9*lambda_var)*cos(lambda_var), tspan, lambda0);


  t0 = 0:0.01:40; 
  lambda1 = zeros(1,4001);
  lambda1 = interp1(t,lambda_var,t0);
  lambda = [t0' lambda1']; 

Я использовал уравнения, которые я нашел в статье, в выражении lambda0 и в выражении [t, lambda_var]. Блок «lambda_d» содержит вектор из двух столбцов, первый из которых содержит значения времени, а второй - соответствующие значения lambda_dot. Также лямбда (вывод блока fcn) должна быть определена таким же образом, как вы можете видеть в коде выше.

Я думал, что проблема была в прицеле: если я запустил это моделирование, у меня не появится ни одного сигнала, нанесенного на прицел. Вместо этого я получаю столько же сигналов, сколько и размер вектора, который содержит что-то вроде 4000 значений (0,01 секунды времени выборки на 40 секунд общего числа).

Но теперь я понимаю, что проблема в уравнении ОДУ в блоке Simulink. Мне нужно написать это в этом блоке, потому что два входа будут переменными на следующем шаге. Уравнение, которое мне нужно решить:

tan(0.9*lambda)*cos(lambda) = -vx*yawrate /g

РЕДАКТИРОВАТЬ: Я изменил основной вопрос в соответствии с вашими комментариями.

...