Применение параметров Родрига-Гамильтона в задачах динамики полета ЛА.
Реализация в коде.
Время пошло. В интернете можно найти немало описаний того, что такое параметры Родриго-Гамильтона, откуда они взялись и для чего нужны. Вместе с этим вам предложат узнать, что такое кватернионы, гиперкомплексные числа и как их можно вывести. Здесь описано, как применить их на практике в задачах динамики полета. Ниже представлен фрагмент кода на языке 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.
ссылка на оригинал статьи https://habrahabr.ru/post/282409/
Добавить комментарий