Как построить траекторию Клохесси Уилтшир в MATLAB?

Поэтому я, по сути, хочу построить график изменения траектории, когда я выполняю маневр, используя уравнения Клохесси Уилтшира для преследования цели. У меня есть цикл for на 10 000 секунд, и я хотел бы рассчитать каждое значение r(t) при прохождении цикла, а затем построить его. Кто-нибудь знает, как это будет сделано? Я могу опубликовать код, если хотите.

Ответы (1)

Быстрый взлом:

close all
n=0.00113;

phi_rr = @(t) [4-3*cos(n*t) 0 0; 6*(sin(n*t)-n*t) 1 0; 0 0 cos(n*t)];
phi_rv = @(t) [1/n*sin(n*t) 2/n*(1-cos(n*t)) 0; 2/n*(cos(n*t)-1) 1/n*(4*sin(n*t)-3*n*t) 0; 0 0 1/n*sin(n*t)];

r_0 = [100;0;0];
v_0 = [-1;-.115;0];

T=0:10:2000;

% plot red circle at origin
plot3(0,0,0,'ro')
hold on

% start loop
for t=T
    % display 50% progres
    if t==T(floor(end/2))
        disp('50 % done');
    end
    r=phi_rr(t)*r_0 + phi_rv(t)*v_0;
    plot3(r(1),r(2),r(3),'k.');
end
rotate3d
xlabel('x'), ylabel('y'), zlabel('z')
axis equal
grid on
hold off

Согласно википедии и этому , ось x направлена ​​радиально от центра тяжести к цели, ось y указывает в направлении движения цели, а ось z просто перпендикулярна предыдущей (правосторонняя система). Итак, при начальных значениях, приведенных в качестве примера выше, траектория выглядит так:

пример траектории относительно цели

Вид относительно цели (красный кружок), т.е. как цель видит движение преследователя.

Это означает, что преследователь начинает на расстоянии 100 метров радиально наружу от положения цели и со скоростью -1 м/с радиально внутрь и -11,5 см/с по касательной назад относительно цели.

Преследователь поражает цель с ненулевой скоростью. Таким образом, чтобы сделать его более реалистичным, вам придется выполнить многоэтапную симуляцию с последующим уменьшением скорости преследователя.

Ваше здоровье! Так что я не совсем уверен, что происходит с битом "if t === floor(T(end)/2) disp('50% done')... можешь объяснить, для чего он?
Хороший вопрос! Он должен отображаться, когда прибл. Выполнено 50 % вычислений, так как это может занять много времени, если T содержит много чисел. Но то, как я это закодировал, не имело особого смысла... исправлено!
Итак, чтобы прояснить ваш последний пункт в вашем собственном ответе (как я вижу, у вас есть вопрос, связанный с ним), вы должны сделать еще один прожиг, который сведет вашу относительную скорость к нулю в цель. Природа этих уравнений такова, что для заданного конечного состояния вы можете найти начальное условие, поэтому ваше v0 будет значением, с которым вам нужно лететь, чтобы достичь своей цели с относительной скоростью 0, где, как кажется, вы выбрал произвольное значение. Надеюсь, это поможет и с другим вашим вопросом!