Клиначев Н.В.

Инструмент трехмерной визуализации движения космического аппарата вокруг центра масс

3D-сцена. Визуализация движения КА.
Собственное вращение

Данный веб-документ является программным средством трехмерной визуализации движения космического аппарата (КА) вокруг центра масс. Выше по тексту на 3D-сцене представлено интерактивное изображение КА. Документ перехватывает и обрабатывает некоторые события клавиатуры. Цифровые клавиши: "1", "2", стрелки, – включают двигатели по осям системы координат привязанной к корпусу КА. Клавиши: PgUp / PgDn, – приближают или удаляю камеру.

Для визуализации движений КА используется интерфейс прикладного программирования WebGL API [1] [2], который поддерживают браузеры отвечающие стандартам HTML5. Для выполнения аффинных преобразований в пространстве применена javascript-библиотека glMatrix [3], поддерживающая матрицы поворота, перехода и гиперкомплексные числа (кватернионы). Впрочем, существуют конкурирующие решения [4].

                                              Листинг 1
// "Динамические уравнения Эйлера" в форме Коши
dwx = (Mx - (Jzz - Jyy) * wy * wz) / Jxx;
dwy = (My - (Jxx - Jzz) * wz * wx) / Jyy;
dwz = (Mz - (Jyy - Jxx) * wx * wy) / Jzz;
// Интегрируем (решаем) уравнения методом Трапеций
zx += dwx * dT;     wx = zx + dwx * dT05;
zy += dwy * dT;     wy = zy + dwy * dT05;
zz += dwz * dT;     wz = zz + dwz * dT05;
// где: Jxx, Jyy, Jzz – осевые моменты инерции КА
//      wx, wy, wz – проекции угловой скорости КА
//      zx, zy, zz – регистры задержки интеграторов
//      Mx, My, Mz – моменты двигателей ориентации КА
//      dT – период дискретизации модели

Движение КА, как твердого тела, вокруг центра масс, вычисляется с помощью "Динамических уравнений Эйлера" и "Кинематических уравнений" [5], [6], [7]. Система динамических уравнений позволяет вычислить проекции угловой скорости на оси неподвижной системы координат. Кинематические уравнения – ориентацию в пространстве (три угла для поворота осей КА). Система "Динамических уравнений Эйлера" представлена в первом листинге программного кода. Альтернатив нет. Это единственная система уравнений, которая позволяет вычислить проекции угловой скорости, приобретаемой твердым телом под действием возмущающих моментов. Её можно представить в более полной версии, для объекта отличающегося от шара или волчка, например, для самолёта. Но это будет все та же система "Динамических уравнений Эйлера".

                                                             Листинг 2
// Предотвратим вырождение СУ при угле нутации (th) равном 0 и PI
var th_gap = 1 / 360 * M_2PI,           // Величина разрыва
    den = Math.sin(th);                 // [-1 .. 0 .. +1]
while (-th_gap < den && den < th_gap)   // Вытолкнем за разрыв
{ th += 1.001 * (dth >= 0 ? th_gap : -th_gap); den = Math.sin(th); }

// "Кинематические уравнения Эйлера" в форме Коши
dps = +(wx * Math.sin(ph) + wy * Math.cos(ph)) / Math.sin(th);
dth = +(wx * Math.cos(ph) - wy * Math.sin(ph));
dph = -(wx * Math.sin(ph) + wy * Math.cos(ph)) / Math.tan(th) + wz;
// Интегрируем (решаем) уравнения методом Трапеций
za += dps * dT;     ps = za + dps * dT05;
zb += dth * dT;     th = zb + dth * dT05;
zg += dph * dT;     ph = zg + dph * dT05;
// Зацикливаем интеграторы углов в пределах -M_PI .. +M_PI
za += ps > +M_PI ? -M_2PI : ps < -M_PI ? +M_2PI : 0.0;
zb += th > +M_PI ? -M_2PI : th < -M_PI ? +M_2PI : 0.0;
zg += ph > +M_PI ? -M_2PI : ph < -M_PI ? +M_2PI : 0.0;
// где: za, zb, zg – регистры задержки интеграторов
//      ps, th, ph – углы Эйлера: прецессии, нутации,
//                   и собственного вращения КА

Интеграл угловой скорости – есть угол. Но одно и то же угловое положение в пространстве можно закодировать разными способами – поворотами вокруг разных осей. Вращение планеты Земля, традиционно представляли изменением во времени углов Эйлера: прецессии, нутации, и собственного вращения. Соответствующая система "Кинематических уравнений Эйлера" представлена в листинге 2. Для кораблестроения потребовался другой способ описания положения твердого тела вокруг центра масс – "Кинематические уравнения Брайнта-Крылова", см. листинг 3. Соответствующие углы: рысканье, тонгаж и крен, – сегодня называют самолётными.

                                                             Листинг 3
// Предотвратим вырождение СУ при тонгаже (by) равном +/-90°
var by_gap = 1 / 360 * M_2PI,           // Величина разрыва
    den = Math.cos(by);                 // [-1 .. 0 .. +1]
while (-by_gap < den && den < by_gap)   // Вытолкнем за разрыв
{ by += 1.001 * (dby >= 0 ? by_gap : -by_gap); den = Math.cos(by); }

// "Кинематические уравнения Брайнта-Крылова" в форме Коши
dbx = +(wx * Math.cos(bz) - wy * Math.sin(bz)) / Math.cos(by);
dby = +(wx * Math.sin(bz) + wy * Math.cos(bz));
dbz = -(wx * Math.cos(bz) - wy * Math.sin(bz)) * Math.tan(by) + wz;
// Интегрируем (решаем) уравнения методом Трапеций
zr += dbx * dT;     bx = zr + dbx * dT05;
zp += dby * dT;     by = zp + dby * dT05;
zv += dbz * dT;     bz = zv + dbz * dT05;
// Зацикливаем интеграторы углов в пределах -M_PI .. +M_PI
zr += bx > +M_PI ? -M_2PI : bx < -M_PI ? +M_2PI : 0.0;
zp += by > +M_PI ? -M_2PI : by < -M_PI ? +M_2PI : 0.0;
zv += bz > +M_PI ? -M_2PI : bz < -M_PI ? +M_2PI : 0.0;
// где: zr, zp, zv – регистры задержки интеграторов
//      bx, by, bz – углы Брайнта: крен, тонгаж, рысканье КА

Обе системы уравнений имеют общий недостаток – в частных случаях они не могут дать решение (вырождаются). Представим неподвижную и правильно ориентированную сферу для наблюдения за вращающимся телом. Если ось вращения, в какой то момент времени, совпадет с северным или южным полюсом сферы, то в "Кинематических уравнениях Эйлера" возникнет деление на ноль (синус от угла нутации равен нулю). К счастью, со времен открытия уравнений ось вращения Земли ни разу не выпрямлялась. Однако были мореплаватели, и они хотели, чтоб мачты их кораблей всегда были в зените. Для решения задачи остойчивости проектируемого корабля "Кинематические уравнения Эйлера" не подходили. Поэтому появились "Кинематические уравнения Брайнта-Крылова". Они тоже вырождаются. И не в двух точках, а вдоль линии экватора нашей сферы для наблюдений, когда дифферент / тонгаж равен 90 градусам. Но кому нужен корабль, чья мачта может занять положение в плоскости поверхности воды? Поскольку любое твердое тело инерционно – "куда оно из колеи то денется"! Допуская погрешность оговоренной величины, обе системы кинематических уравнений можно использовать. Нужно определить запретную зону вокруг полюсов сферы или экватора и принудительно выталкивать из нее соответствующий интегратор соблюдая направление движения (см. первые четыре строки кода в листингах 2 и 3).

                                              Листинг 4
// "Кинематические уравнения Родрига-Гамильтона"
dqw = (- wx * qx - wy * qy - wz * qz) * 0.5;
dqx = (+ wx * qw + wz * qy - wy * qz) * 0.5;
dqy = (+ wy * qw - wz * qx + wx * qz) * 0.5;
dqz = (+ wz * qw + wy * qx - wx * qy) * 0.5;
// Интегрируем (решаем) уравнения методом Трапеций
z0 += dqw * dT;     qw = z0 + dqw * dT05;
z1 += dqx * dT;     qx = z1 + dqx * dT05;
z2 += dqy * dT;     qy = z2 + dqy * dT05;
z3 += dqz * dT;     qz = z3 + dqz * dT05;
// где: qx, qy, qz, qw – кватернион ориентации КА

Шло время, математики не могли смириться с нелинейностью уравнений и с оговорками для них. Был изобретен новый способ кодирования углового положения тела в пространстве – гиперкомплексное число. А для его вычисления (по угловым скоростям) – "Кинематические уравнения Родрига-Гамильтона", см. листинг 4. Сегодня, несмотря на традиции в терминологии, бортовые ЦВМ самолетов контролируют положение машины в пространстве с помощью кватернионов. Истребители отлично летают в плоскостях параллельных поверхности Земли и "кобру Пугачёва" могут выполнить. Как и необитаемые подводные аппараты – могут вцепиться манипулятором в любой болт и крутиться, выкручивая его.

Все описанные системы уравнений использованы в программе визуализации КА, см. 3D-сцену. Угловое положение первого отсека получено с помощью "Кинематических уравнений Эйлера". Второго отсека – с помощью "Кинематических уравнений Брайнта-Крылова". А положение соединительных стоек и двигателей ориентации – с помощью "Кинематических уравнений Родрига-Гамильтона". Все три системы уравнений интегрируют одни и те же проекции угловой скорости. Поэтому во всех положениях и в любой момент времени отсеки должны составлять единую конструкцию КА. Напомним, были определены запретные области. Соответствующие отклонения, т.е. погрешности в угловом положении отсеков величиной в один градус, глаз не видит.

Программу, которая описывает движение КА можно изменить. Для этого необходимо сохранить документ на локальном диске1 и открыть для редактирования в любом редакторе текстовых документов. Следует обратить внимание – браузер должен сохранить два файла. Один из которых – библиотека gl-matrix-min.js. Программный код2, встроенный в веб-страницу, можно разделить на две части. Первая – отвечает за визуализацию и была составлена по примеру уроков 2 и 4 учебного пособия "WebGL lessons" [1], [2]. Т.е. хорошо документирована автором пособия [1]. Вторая часть кода – это одна функция, в которой составлена вычислительная модель движения КА.

Суть экспериментов, которые можно выполнить с моделью, состоит в том, чтобы сначала раскрутить КА случайным образом, а потом, ориентируясь на раскраску КА, прекратить его вращение. Человеку, решить эту задачу, помогает неравенство моментов инерции по осям КА. Одна ось вращения легко вычисляется, а справиться с движениями по двум оставшимся осям существенно легче. Для автоматического решения задачи ориентации КА применяют векторную систему управления. С тремя подчиненными контурами: момента, скорости и положения. Самый важный датчик, который необходим для решения задачи – это датчик углового положения (как и в электроприводе). Точность любого численного расчёта зависит от периода дискретизации. Если раскрутить модель КА, то количество расчетных точек на периоде вращения (на периоде синусоиды) будет меньше. Ошибки интегрирования будут накапливаться, и модель пойдет в разнос. По оси цилиндра корпуса, КА раскрутить легче.

[КА: Собственное вращение] [КА: Контур скорости] [КА: Контур ориентации]
[КА: Отладка СОиС] [КА: Трек полёта] [КА: Полёт с СОиС]
[КА: Ручное пилотирование] [КА: Полёт с автопилотом] [КА: Автопилот без СОиС]
[КА: ДУ – 12 машин] [КА: ДУ – 8 машин] [КА: ДУ – 16 машин] [Союз Т-13 и Салют-7]
[Методические указания к лабораторным работам]

Литература

  1. Giles Thomas. WebGL lessons: 3D Programming for the Web // URL: http://learningwebgl.com/blog/?page_id=1217 (дата обращения: 03.08.2017).
  2. Sergey. Перевод уроков "WebGL lessons: 3D Programming for the Web" // DevBurn.ru. URL: http://devburn.ru/%d1%83%d1%80%d0%be%d0%ba%d0%b8-webgl (дата обращения: 03.08.2017).
  3. Brandon Jones. glMatrix – Javascript Matrix and Vector library for High Performance WebGL apps // URL: http://glmatrix.net (дата обращения: 03.08.2017).
  4. Ricardo Cabello (Mr.doob). Three.js – кроссбраузерная библиотека JavaScript, используемая для создания и отображения анимированной компьютерной 3D графики при разработке веб-приложений // URL: https://threejs.org (дата обращения: 03.08.2017).
  5. Ф. Л. Черноусько, Л.Д.Акуленко, Д. Д. Лещенко. Эволюция движений твердого тела относительно центра масс.
  6. Кафедра теоретической механики, Самарский государственный аэрокосмический университет им. академика С. П. Королёва (СГАУ), Самара.
  7. Юдинцев В.В. Презентация к лекции, посвященной движению твёрдого тела в случае Эйлера.
  8. Жидкова Н.В., Волков В.Л. Моделирование бесплатформенной системы ориентации // Современные проблемы науки и образования. – 2015. – № 1-1.; URL: https://www.science-education.ru/ru/article/view?id=17099 (дата обращения: 03.08.2017).
  9. Карпенко С. Открытое ПО численного моделирования: SPUTNIX Satellite Simulator. // URL: http://www.sputnix.ru/ru/technologies/numerical-simulation (дата обращения: 03.08.2017).
  10. Д.В. Гриневич, А.В. Лебедев, О.В. Мороз. Разработка универсального моделирующего программного комплекса для создания стендов отладки и поддержки систем ориентации космических аппаратов // Вопросы электромеханики Т. 135. 2013. URL: http://jurnal.vniiem.ru/text/135/21-30.pdf (дата обращения: 03.08.2017).
  11. Гулиа Н.В. Магия вращательного движения Можно ли вращаться по инерции?
  12. Steve Baker. Euler Angles are Evil.
  13. Кручу-верчу, запутать хочу: углы Эйлера и Gimbal lock.

Примечания

  1. Для сохранения веб-страницы на локальном диске пользователя необходимо открыть веб-страницу браузером, который имеет команду сохранения веб-документов (в браузере MS Edge такой команды нет). Активировать скрытое меню браузера (нажать клавишу ALT). Выбрать команду меню: Файл > Сохранить как. Или нажать сочетание клавиш: CTRL + S. Рекомендуется использовать для сохранения браузер MS IE. Браузер FF сохраняет веб-документы не в исходном состоянии, а в перестроенном скриптами.
  2. Для написания программ, которые встраивают в веб-страницы, используют язык программирования JavaScript. Любой браузер для настольных компьютеров и ноутбуков (IE, FF, Eg, Ch) имеет интегрированную среду разработки и отладки программ, написанных на языке JavaScript. В любом браузере она активируется функциональной клавишей F12 или через меню браузера. Нажмите F12 сейчас. Найдите в коде "Математическую модель движения космического аппарата вокруг центра масс".

2017.07.31