Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА

в 12:50, , рубрики: динамика полёта, параметры Родрига-Гамильтона, углы Эйлера, Учебный процесс в IT, метки: , ,

Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА.
Реализация в коде.

Время пошло. В интернете можно найти немало описаний того, что такое параметры Родриго-Гамильтона, откуда они взялись и для чего нужны. Вместе с этим вам предложат узнать, что такое кватернионы, гиперкомплексные числа и как их можно вывести. Здесь описано, как применить их на практике в задачах динамики полета. Ниже представлен фрагмент кода на языке Java:

//вычисление параметров Родриго-Гамильтона по углам Эйлера:
        double ρrg = Math.cos(psi / 2) * Math.cos(fi / 2) * Math.cos(gam / 2) + Math.sin(psi / 2) * Math.sin(fi / 2) * Math.sin(gam / 2);//- клишин
        double λrg = Math.cos(psi / 2) * Math.cos(fi / 2) * Math.sin(gam / 2) - Math.sin(psi / 2) * Math.sin(fi / 2) * Math.cos(gam / 2);//+
        double μrg = Math.sin(psi / 2) * Math.cos(fi / 2) * Math.cos(gam / 2) + Math.cos(psi / 2) * Math.sin(fi / 2) * Math.sin(gam / 2);
        double Vrg = Math.cos(psi / 2) * Math.sin(fi / 2) * Math.cos(gam / 2) - Math.sin(psi / 2) * Math.cos(fi / 2) * Math.sin(gam / 2);
        
//Нормировка. Модуль вектора в 4-х мерном пространстве для нормировки:
         double norm = Math.sqrt(ρrg*ρrg+λrg*λrg+μrg*μrg+Vrg*Vrg);
//нормировка параметров:
        double[] rg = {ρrg/norm, λrg/norm, μrg/norm, Vrg/norm); 
        ρrg = rg[0];
        λrg = rg[1];
        μrg = rg[2];
        Vrg = rg[3];
//вычисление производных параметров РГ
        double ρrgt = -dt*(Rocket.w[0]*λrg+Rocket.w[1]*μrg+Rocket.w[2]*Vrg)/2;
        double λrgt = dt*(Rocket.w[0]*ρrg -Rocket.w[1]*Vrg +Rocket.w[2]*μrg)/2;
        double μrgt = dt*(Rocket.w[0]*Vrg -Rocket.w[1]*ρrg -Rocket.w[2]*λrg)/2; 
        double Vrgt = dt*(-Rocket.w[0]*μrg +Rocket.w[1]*λrg+Rocket.w[2]*ρrg)/2;
//интегрирование (метод Эйлера):
        ρrg = ρrg+ρrgt;
        λrg = λrg+λrgt;
        μrg = μrg+μrgt;
        Vrg = Vrg+Vrgt;

//углы Эйлера на новом шаге
        fi = Math.asin(2 * (ρrg * Vrg + λrg * μrg)); //угол тангажа
        gam = Math.atan(2 * (ρrg * λrg - Vrg * μrg) / (Math.pow(ρrg, 2) + Math.pow(μrg, 2) - Math.pow(Vrg, 2) - Math.pow(λrg, 2))); //угол крена
        psi = Math.atan(2 * (ρrg * μrg - Vrg * λrg) / (Math.pow(ρrg, 2) + Math.pow(λrg, 2) - Math.pow(Vrg, 2) - Math.pow(μrg, 2))); //угол рыскания

Автор постарался дать исчерпывающее количество коментариев.
Литература: И.С.Голубев, В.Г.Светлов «ПРОЕКТИРОВАНИЕ ЗЕНИТНЫХ УПРАВЛЯЕМЫХ РАКЕТ». Москва, 2001.

Автор: mmarashan

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js