Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » "Семерка" (МБР Р-7) для Orbiter | страница 3
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 3 из 31
На страницу: Пред.  1, 2, 3, 4 ... 29, 30, 31  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал Orbiter: «"Семерка" (МБР Р-7) для Orbiter»
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Tiger :
Знаю одного человека, он умеет облака вычищать. Спросить, как?


Спроси, конечно.

Хотя вариант есть - тот же что и с Циклонами - убрать общие тайлы и оставить только высокого разрешения (их границы не захватят облака).

Есть еще один маленький секретик - на заметку базостроителям.
В конфиге базы есть два параметра

Size = 100
Objectsize = 100

Оба в километрах.
Дык если они одинаковые то с достаточно большой точностью можно сказать что граница видимости базы с расстояния будет определятся
L~ctg(FOV)*Objectsize
То есть при размерности в 100 км при фов 50 граница видимости 85 километров.
Граница разная - для тайлов поверхности для загрузки и отображения она отсчитывается от маркера базы, для мешей загрузка от маркера, отображение по расстоянию до каждого треугольника.

Смысл секрета следующий - при полете на орбите пролет ганицы вызывает процесс загрузки визуалки и если база имеет весомый объем визуалки происходит скачек в шаге симуляции и пертрубация орбиты. Выхода два -либо загонять размер в максимум, либо оганичить так чтобы с орбиты она была не видна. Другой подход - рельефы местности большой протяженности сотни и тясячи километров - имеет смысл ограничить дальность видимости и тем самым предотвратить отображения под углами меньше нуля к среднему местному горизонту.
    Добавлено: 07:51 27-04-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Bloodest :
Поставил NASA WorldWind...


Угу, скачал. У "хьюзов". Пока не ставил. Эти 62 мега инсталяхи, это все что к нему нужно?
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 10:47 27-04-2006   
Tiger
 65 EGP


Репутация: 10
Сообщения: 140
Откуда: Россия, Барнаул
Зарегистрирован: 13.12.2005
astronavt :

Угу, скачал. У "хьюзов". Пока не ставил. Эти 62 мега инсталяхи, это все что к нему нужно?


Нет, смысл в том, что это только некий базовый комплект текстур. При увеличении дальше определенного масштаба будет происходить подкачка нужных материалов из интернета. Они будут храниться в кэше. Есть возможность заранее накачать "кэшевых файлов" для определенных участков. Ими люди друг с другом делятся.
_________________
Siberian Tiger
    Добавлено: 11:33 27-04-2006   
Tiger
 65 EGP


Репутация: 10
Сообщения: 140
Откуда: Россия, Барнаул
Зарегистрирован: 13.12.2005
Bloodest :
Tiger :
Знаю одного человека, он умеет облака вычищать. Спросить, как?


Спроси, конечно.

Хотя вариант есть - тот же что и с Циклонами - убрать общие тайлы и оставить только высокого разрешения (их границы не захватят облака).


Спросил. Предлагает прибегнуть к ретушированию изображения. Использовать тулз "clone" из комплекта Photoshop или Gimp. Не забыть замазать также и тень облака. Подчеркивает, что, как правило, участок текстуры, которую класть поверх облака, лучше брать из удаленной на некоторое расстояние точки изображения, чтобы не было повторяющегося узора. Еще можно использовать тулз "Pattern", разница невелика. В одних случаях дает лучший результат резкие края кисти, в других - диффузные.

С пожеланиями удачи, StarLost
_________________
Siberian Tiger
    Добавлено: 12:49 27-04-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Tiger :
...подкачка нужных материалов из интернета


А вот это плохо. Дома онлайна нет (dialup), а на работе не всегда удобно
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 09:00 28-04-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
«Красотка» стала более-менее управляемой Улыбка. Вот демка

http://texband.nm.ru/pub/dimonspage/orbiter/R7_demo6.zip

Новая версия сабжа оснащена простейшим автопилотом. Что я вкладываю в слово «простейший»:

1) Вращение ракеты вокруг центра масс считается динамически развязанным – ракета осесимметрична, вращения по крену нет.
2) Привод рулевиков моделируется просто вращением оных с конечной скоростью 20 град/с.
3) Реализовано управление по крену и тангажу, причем в этой демке крен никак не иллюстрируется. Рулим только тангаж, а в азимут поворачиваем на старте (в сценарии т.е.).
4) Вопреки замечаниям Bloodest, алгоритм расчета угла поворота рулевых камер строится по принципу подчиненного регулирования с обратными связями по вектору состояния (угол и соответстующая ему скорость), с ограничением по углу отклонения рулевиков и величине максимальной угловой скорости поворота (подробнее эта байда описана в теме «Универсальный ракетный автопилот» на стр. 3., мой постинг от 03-04-2006). Решил замутить пока так. Если честно, не понял смысл термина «залипание» решения, объясни, Роман, плз. Улыбка.
5) Программа по тангажу состоит из двух частей – атмосферный участок (у меня все время работы 1-й ступени) и участок управления по линейному тангенсу tg(phi) = a*t + b.

Не могу, как обычно, не рассказать в подробностях о геморройных моментах. Такой я человек, люблю рассказывать о достигнутых успехах. Иногда это людей раздражает Ой, не могу!...

Прежде всего рулевики. Они на «семерке» отклоняются аж на 45 градусов (когда-то моделировал «Сатурн-5», так там максимум 7), а значит допущение

sin(delta) ~ delta

не катит! Отсюда возник вопрос – блин, а как в линейном регуляторе учесть эту ерунду. Долго думал, потом осенило – с выхода регулятора скорости снимать не угол отклонения рулевиков, а синус этого угла, т.к. момент линеен относительно синуса! А потом по синусу находить задание для привода рулевых машинок. Нелинейность то никуда не девается (отсюда небольшое перерегулирования при сильных бросках по тангажу), но на процесс синтеза регулятора уже не влияет.
Попробовал – получилось. Рулевики откидываются на полную катушку, но колебаний по тангажу нет.

Gut, контуры настроили, но как быть с программой управления? Может кому-то покажется, что я изобретаю велосипед, но прошу заметить, что во-первых, мне патологически не везет с поиском нужной информации (без освещения проекта на «Элите» вообще наверное не продвинулся бы), а во вторых, и это самое главное, всегда стремлюсь во всем досконально разобраться.
Так вот. Почесал я репу, и понял, что нужно решать задачу с конца. Ракета баллистическая, «голова» должна попасть в определенную точку земной поверхности. Для этого ее нужно бросить с определенной высоты, с определенной скоростью, в определенном направлении. Взял обожаемый мною пакет Maple, и составил такую вот систему диф-ур:
dx/dt = Vx

dy/dt = Vy

dz/dt = Vz

dVx/dt = -mu*x/r^3 + omega0^2*x + 2*omega*Vy

dVy/dt = -mu*y/r^3 + omega0^2*y - 2*omega*Vx

dVz/dt = -mu*z/r^3

r = sqrt(x^2 + y^2 + z^2)

ничто иное, как уравнения движения тела в системе отсчета, связанной с вращающейся Землей. Отсюда и составляющие центробежного ускорения, пропорциональные квадрату угловой скорости Земли, и составляющие ускорения Кориолиса, пропорциональные компонентам скорости тела и угловой скорости Земли. Здесь: omega0 – угловая скорость вращения Земли; mu – гравитационный параметр Земли.

Уравнения позволяют остановить Землю, но добавляют геммора с их решением. Эссно, решал я их численно, благо для Maple это плевое дело. Короче, решая двухточечную краевую задачу для этой системы, путем подбора параметров alpha0 – угол бросания к местному горизонту, A0 – азимут бросания, методом Ньютона, получил вышеозначенные величины, позволяющие попасть в заданную точку земной поверхности для заданной скорости V0, и высоты броска H0. Естественно, H0 и V0 связаны, чем меньше первое, тем больше второе, и меньше время подлета «головы» к цели. Погоду портит наша любимая атмосфера, поэтому я ограничился H0 = 200 км, и скоростью V0 = 7400 м/с. Результат: для попадания в точку 165 в.д., 55 с.ш. (на Камчатке) из Байконура, нужно бросить «голову» на азимут 39.32 градуса, под углом -0.59 градусов к горизонту.

Но это пассивный участок. Задача активного участка – дать нам указанные параметры. Тут я поступил довольно таки криво. На атмосферном участке ракета, по преодолении М = 0.1 заваливается на тангаж 75 градусов (необоснованный эссно), начиная с М = 0.8 идет управления для обеспечения нулевого угла атаки, и так до сброса боковиков. Потом в дело идет линейный тангаж, a и b для которого найдены однократным решением краевой задачи для ур-й полета 2-й ступени, с начальными условиями в виде результата работы 1-й ступени, требуемой скоростью и углом на другом конце. Такой подход создает точку разрыва 2-го рода в программе по тангажу (скачек с 45 на -20 градусов, который естественно не может быть отработан), ведущую к потере точности в конце активного участка. Результат – попадание «головы» в точку 159.286 в.д., 54.103 с.ш., т.е. с ошибкой в 127 км. Для такого результата пришлось уменьшить скорость до 7220.3 м/с, т.к. ракета вышла на высоту 221 км. Иначе – падение в Тихом океане.

Точность неудалая, учитывая, что ракета 63-го комплекса (средний радиус действия, их еще на Кубу возили) попадала с 2500 км в солдатскую простыню Улыбка.

В общем, буду работать. Естественно, ни каких «мейплов» и в помине не должно быть – все алгоритмы предполагается перетащить в орбитеровские модули. Просто внешний математический пакет помог быстро выработать концепцию решения задачи и проверить его в первом приближении.
В принципе, есть соблазн вывести спутник – уменьшаем массу «головы» до 85 кг и перезакладываем уставку на скорость отсечки 2-й ступени (то есть перекомпилировать два модуля). Но так не интересно.

В целом, для такого сырого варианта получилось прикольно – ракета-то летает Улыбка.

Теперь вопрос.

To Kulch

Не врублюсь, как можно задействовать GetManualControlLevel(…). Ведь в сдк написано, что он возвращает уровень тяги групп ориентации, но у меня то тяга не меняется, а поворачиваются сами камеры. Ясно, конечно, что он связан со всеми средствами пользовательского ввода (джой в том числе), но вот этот момент не ясен.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 23:10 01-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
astronavt :

4) Вопреки замечаниям Bloodest, алгоритм расчета угла поворота рулевых камер строится по принципу подчиненного регулирования с обратными связями по вектору состояния (угол и соответстующая ему скорость), с ограничением по углу отклонения рулевиков и величине максимальной угловой скорости поворота (подробнее эта байда описана в теме «Универсальный ракетный автопилот» на стр. 3., мой постинг от 03-04-2006). Решил замутить пока так. Если честно, не понял смысл термина «залипание» решения, объясни, Роман, плз. Улыбка.



Цитата:
Mx = Kpc*(wxz - Kocc*wx).


Ну здесь я так понял (чехарда с обозначениями)
wxz - рассогласование по углу
wx - угловая скорость.
Может и не правильно и все по другому.
Тем не менее все сводится, в любом варианте, к выражению

Mx= A*P1(x)+B*P2(Vx);
Где
Mx - управляющий момент
A и B - константы
P1 P2 - параметрические функции от положения и скорости.
Идем от обратного. Допустим Mx=0
Дык поскольку переменных две а уранение одно. То оно имеет бесконечное множество решений! Иными словами Mx равно нулю не только при P1(x)=P2(Vx)=0 но и при множестве других значений.
Если целевое (и к тому же в течении длительного времени) Vx=Vxc=0 и х=const то формула будет работать. Но если с течением времени x меняется...

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

Я собственно не далеко ушел от данной формулы - просто A и B не константы - они непрерывно вычисляются
Mx= A(P1(x),P2(Vx))*P1(x)+B(P1(x),P2(Vx))*P2(Vx)
Что дает в конечном счете агрегатирование вида
Mx=(abs((PP2(Vx)/PP1(x))-1)*sign(PP2(Vx))*sign(PP1(x))
Да, при нулевом PP1(x) Mx стремится к бесконечности. Зато она ни когда не залипает. Бесконечность подавить легко - достаточно ввести зону нечувствительности по PP1(x) где управление идет по закону
Mx=PP3(Vx). Во всяком случае зона нечувствительности все равно нужна если сами целевые параметры вычисляются с определенной точностью - появляется шум.

Весь смысл в универсальности - и для танагажа и для КК для посадки на поверхность и пр.


Цитата:
участок управления по линейному тангенсу tg(phi) = a*t + b.


Дык в pdf по Союзу есть график тангажа - дык он линейный по времени Гы-гы
И это понятно - гораздо проще управлять.

ЗЫ предлагаю замутить реальную систему.
Забацать гиростабилизированную платформу - в упрощенном варианте конечно.
-Первый шаг расчет траектории - дык для БР здесь проще простого - троектория всего одна! - обеспечивающая максимальную дальность.
Получаем закон изменения тангажа и вектора скорости по времени.
-Второй прицеливание - учет вращения Земли и определение азимута бросания, определение момента и напаравления вектора скорости в момент отсечки для обеспечения попадания.
-Третий полет. Используем абсолютные напаравляющие вектора
--вектор вращения - перпендикулярен плоскости полета
--Вектор гировертикали - перпиндикулярен горизонту в месте старта
--Вектор конечной скорости.
Соответственно тангаж получаем путем вращения гировертикали вокруг вектора вращения (1). Скорость в момент старта считывается компонента скорости по вектору конечной скорости и затем считывается все время с целью получения разницы, иммитируя тем самым показания акселерометра кажущейся скорости (2). Второй акслерометр лежит в направлении вектора вращения и считывает боковой снос (3).
Таким образом управление разделяется по трем каналам
-Угол тангажа - (1)
-Тяги двигателей -5+2% на невилирование в течение заданного времени отклонений (2)
-Угол рысканья на невилирование в течение заданного времени отклонений (3)

Самое простое для реализации данной математики использовать глобальную систему координат Орбитера - к тому же можно говорить о том, что реализована истинная система инерциального управления - именно истинная.
Даже мой лаунчер использует комбинированную систему управления.

Первую стадию тоже производить в глобальной системе координат - гараздо проще система уровнений - нет ни кориолиса и др. Надо обеспечить законом танагажа, исходя из ограничений, просто максимальную дальность.

Вторая стадия. Естественно цель вращается но это плевое дело - одна формула, которую не надо интегрировать. Здесь надо подобрать только момент отсечки и азимут бросания. Соответственно два икса. И две невязки - отклонение по широте и долготе места падения. Конечно лудше невязки переориентировать по линии соединяющей старт и цель - тогда сходимость будет гараздо выше соотнести к времени (вдоль) и азимуту (поперек).

Третья стадия - в момент отрыва от стола считавыем вектора и используем их.

Матиматика работы с векторами предельно проста
Есть класс-юнион VECTOR3
Надо доопределить функцию его нормолизации - получение единичного вектора.
Тогда векторное произведение даст вектор перпендикулярный двум компонентам.
Скалярное произведение даст косинус угла между компонентами. Если один из компонентов - не нормализован то скалярное произведение даст длину его проекции на нармализованное напаравление.
Остается определить только кватернион и к нему функцию вращения.
Плюс халявные функции СДК по преобразованию глобальных координат в локальные и наоборот.

Например нужно получить вектор вращения тангажа.
Запрашиваем в СДК направление оси вращения планеты (1).
Запрашиваем в СДК радиус-вектор положения РН от планеты(2).
Векторное произведение нормализованных (2) на (1) даст вектор (3)перпендикулярный и плоскости стол-север-центр планеты и лежащий в плоскости горизонта стола.
Образуем из (2) и величины азимута бросания кватернион и вращаем им (3).
Все, полученный вектор (4) и есть искомый (3-4 строчки кода).

Остается только каждый раз для управления образовывать кватернион из (4) и угла 90 минус тангаж и им вращать (2) - результат вектор напаравление оси Z РН (5).
Требуем от СДК глобальное положение РН, дополняем им (5) и запихивем сумму в СДК для получения локальных координат - вуаля, остается только разложить на тангаж и рысканье для управления. Если (5) получить на секунду вперед то можно в локалке получить и скорость вращения.

Для получения отклонений кажущейся скорости и бокового сноса
достаточно использовать скалярные произведения на соответствующие направляющие и поправки вносить в тягу и вектор (5).

Одна загвоздка - аэродинамика. РН не знает ни угла атаки ни угла скольжения и померить их не может
    Добавлено: 11:18 03-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Докладываю, стрельбы произвел
Высота подъема 220 км
Точка падения 156.241 55.832
Замечания
1. Ни где не написано что окромя С (автопилот) надо жать еще и О (запуск двигателей).
Вообще лудше необратимые и важные команды разносить с их выключением и совмещать с Ctrl можно и второй раз жимануть С.
2. БЧ
а) Ушла в сторону (дб вперед ?)
б) Какая такая выемка у нее на ж..пе? Между баком и БЧ находится приборный отсек. Пятая точка у БЧ тоже выпуклая, более того она в атмосфере к цели летит ею вперед...
в) Надоть ориентацию БЧ добавить - всю аэродинамику содрать (коэффициенты сопротивления) и запихнуть в CreateVariableDragElement - работает пудово.
г) Дык втюхиваться в цель должна со скоростью не менее 3х Махов, иначе ее любой идиот подстрелит.

Ну и цель нужно как то обозначить - например добавить базу камчадалам...
    Добавлено: 12:08 03-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Bloodest :
Ушла в сторону (дб вперед ?)


Дык после отцепления сообщаю скорость 1 м/с (детатчем). У меня тоже иногда вбок уходит, когда ступень имеет большой наклон к горизонту Подозрение.. А иногда как надо отделяется...

Bloodest :
Какая такая выемка у нее...


Вот это от фонаря. Исправлю, спасибо за информацию. Об управлении ориентацией БЧ тоже думал. Забахаю стандартные группы ориентации. И, кстати, превоначально она у меня летела копчиком вперед, но потом я подумал, что это неправильно, и сместил ЦТ в нос.

Bloodest :
Точка падения 156.241 55.832


М-де, а точность то у тебя еще хуже вышла... Буду улучшать.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 15:06 03-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
astronavt :


Забахаю стандартные группы ориентации. И, кстати, превоначально она у меня летела копчиком вперед, но потом я подумал, что это неправильно, и сместил ЦТ в нос.



Дык нету на БЧ ни каких органов управления. Система подрыва - относится к ЯБП и о ней ничего мне не известно. Все очень просто - скорее всего БЧ отделялась либо пружинным либо пневматическим толкателем. На известных мне 70х годов разработки был пневматический толкатель - пятая точка БЧ и еще одно днище с кусочком цилиндра образуют герметичную полость. По окончанию работы последней ступени вычисляется специально образованный недобор скорости (~3 м/с) и соответствующим образом полость наддувается, дальше подравают пироболты, держащие БЧ и она "выстреливается" из кусочка цилиндра уходя от последней ступени и набрав скорость с точностью до сантиметров в секунду. Гыг правда на этой балде в голове стоят два сектстанта и при полете за атмосферой они производят астрокоррекции.
Механический проще но менее точный - подпружиненные толкатели, ход каждого ограничен набором стопоров - они убраны, нужный ход/усилие_отталкивания обеспечивается выдвижением соответствующего стопора пиропатроном.
То есть реально в симе компенсировать ошибку скоростью отделения.

Грубо - для МБР каждый м/с дает ошибку в километр.

Дык при входе в атмосферу БЧ сама ориентируется - конус действует как флюгер.
Указанная CreateVariableDragElement позволяет создать никак невидимый элемент (он может быть вынесен и за геометрические контуры). Главное что его пложение по осям можно задать и он образует моменты. Плюс коэффициент его сопротивления можно менять.
Двумя драгами - один в ЦТ, другой отнесен по оси Z можно довольно хорошо сапроксимировать аэродинамику СА и БЧ и главное быстро. Сначала одним, в ЦТ - подобрать общую траекторию (скорость-высота), затем разделив их подобрать момент и сопротивление ему.Сама БЧ имеет фиктивные площади, микроскопическое сопротивление, и подобранное сопротивление вращению.
В аэрофоле это выльется в тучу таблиц моментов.
    Добавлено: 08:25 04-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Забацал гироплатформу. Кватернионы РУЛЕЗЗЗЗЗЗ!!! Долой матрицы поворота Гы-гы! Шутка конечно... Правда пришлось немного дописать драгофлайевские исходники - у них не было нормы, построения сопряженного квартениона и построения обратного квартениона, что требуется для поворота.

В связи с дописыванием проблемка - исходники я передаю с аддоном, а кватернионы-то не мои! Самому писать влом (зачем?). Как там с авторскими правами, на кого и как сслылаться? В мануале написано, что это дело рук самого Мартина, Роджера Лонга и Раду Поенару. В исходниках вообще никаких комментариев, думаю можно просто сослаться, или как?

Извратился, сделал управление движками по принципу максимума Понтрягина. Точность резко возрасла! Имеется в виду точность отработки тангажа и рыскания. Критерий - оптимальность по быстродействию, управление получается импульсное с переключением, так, чтобы изображающая точка все время ползла в нуль фазовой плоскости, т.е. можно управлять как углом так и угловой скоростью.
Правда импульсное управление подразумевает мгоновенную перекладку рулевиков, а таковой нет в реальности. Для интереса делал вращение со скоростью 2000 град/с - красота, можно отклонять камеры на полный диапазон (45). Но если вернуть 20 град/с, рулевики запаздывают. Вышел из положения, ограничив диапазон отклонения камер до 5 градусов. И волкам и овцам Улыбка. Управление теперь идет сразу по обоим каналам - уравнения Эйлера не врут, при осевой симметрии и отсутсвии скорости по крену каналы динамически развязаны. Прикольно смотреть, как в полете абсолютно все камеры качаются туда-сюда, туда-сюда...

Исправил пару глюков с мешами. Теперь работаю над прицеливанием и активным участком.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 23:43 04-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Ну дык с авторскими правами не беда - в Росии, скажем достаточно указать автора алгоритма, так сказать, для соблюдения чести. Поскольку способ решения посредством алгоритмических действий не является объектом авторских прав (даже в мелкософтовских юлах приписка - если не противоречит законадательству - дык половина запретов противоречит российскому). Это один путь.
Другой действительно периписать. Собственно я шел тем же путем - правки драгонфлайтовских (гыг - они там лежат мертвым грузом - в самом драгоне они ни как не используются). Дык ушел от vector3 на СДК VECTOR3 в инициализаторах. Соответственно вращаю квантернионом тоже VECTOR3.

Дык на счет долой матрицы это не шутка Подмигиваю. Потому как в квантернионе поворот вектора это набор арифмитических операторов плюс один синус и один косинус (для образования кватерниона). Что действительно здорово сокращает вычисления.

Вопрос другой а аправдано ли использование float вместо double?
    Добавлено: 08:10 05-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Bloodest :
Вопрос другой а аправдано ли использование float вместо double?


Если честно, разницы я не заметил. Еще когда только начинал изучать Си, писал симулятор Saturn-5, ломал голову над тем, в каком формате плавающую запятую брать. По моему даже точности float с головой. А с другой стороны, не зря же компилятор матерится, когда присваиваешь даблу флоат, или наоборот, типа потеря точности...
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 12:47 05-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Такая трабла.

Как я понял, Роман, в твоем агоритме подбора коэффициентов для phi(t) = a*t + b, идет интегрирование физической модели от текущего момента времени, до конечного с подстановкой в качестве начальных условий текущего состояния + решением системы нелинейных уравнений методом Ньютона.

Так вот, забахал я у себя что-то похожее. Порядок расчета на каждом таймстепе следующий:

1. Интегрирую физическую модель, получая значения H1 – высота, и alpha1 – угол наклона скорости к горизонту. Причем интегрирование прекращается либо по истечении заданного конечного времени (выборка топлива), либо по достижении заданной скорости.
2. Составляю функции f1(a, b) = H1(a, b) – H, и f2(a, b) = alpha1(a, b) – alpha, где H, alpha – заданные значения. Решаю эту систему методом Ньютона относительно (a, b), естественно на каждой итерации заново интегрируя физическую модель.
3. Полученные (a, b) отдаю на съедение автопилота.

Пока интегрирование модели прекращается по истечении времени (т.е. при текущей программе ракета не дотягивает еще до нужной скорости) все идет просто замечательно. На первом таймстепе Ньютон делает 3 итерации, на последующих – всего одну, и невязка 1e-5 – что на два порядка точнее, чем заданное значение точности eps = 1e-3.

Но как только интегрирование начинает завершаться по достижении расчетной скорости (уже на малых тангажах, менее 10 градусов), начинаются чудеса. Получается решение, приводящее к задиранию носа ракеты, он задирается, естественно при этом опять мы не достигаем расчетной скорости, высота тоже «уходит» и Ньютон выпадет в осадок, т.к. чувствителен к начальному приближению. Бред какой-то…

Раньше я выполнял все дейтсвия в clbkPreStep(…). Но потом заметил, что в момент вышеописанного глюка, SimDT, то есть величина следующего таймстепа резко возрастает – от 30 секунд до МИНУТЫ!!! Поскольку в процедуру интегрирования подставляется текущее время, рассчитываемое исходя их SimDT, то на следующем шаге у нас получается момент времени НЕ СООТВЕТСВУЮЩИЙ истинному, а убежавший вперед на 30-60 секунд! Соответственно двигатель в физической модели не дорабатывает нужного времени, не достигается расчетная скорость и уже очень близкая к расчетной высота. А значит Ньютон снова расходится, к приводит к зависанию «Орбитера».

Почуяв это, я пересадил все на clbkPostStep(…), но видимо это не помогло, только автопилот перед издыханием успевает сделать несколько итераций.

Может я чего неверно понял?
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 12:52 06-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
astronavt :
Получается решение, приводящее к задиранию носа ракеты


Это не решение, это я идиот Улыбка. В программе отработки тангажа был такой код

Код:

if (GetMachNumber() > 0.1)
   {
      SetHyroplatform(39.0659*KRAD, A*t + B);      
   }
   else
   {
      SetHyroplatform(39.0659*KRAD, 90*KRAD);      
   }


Это условие типа для того, чтобы отработка начиналась после ухода со старта, т.е. когда уже имеется значительная скорость (30-40 м/с как пишут в умных книжках, или 0.1M). А до этого, просто держать вертикаль.

Вот здесь я и прокололся - ведь если выйти в космос, то там число Маха опять уменьшается, достаточно взглянуть на SurfaceMFD!!! И ракета радостно задирает нос в вертикаль, начихав на программу!!!

Так что вроде все нормуль Хы....
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 17:39 06-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
На счет точности невязок это обманка, если конечно, используеш стандартную схему - оценка точности по приращению.
GetMachNumber() выше 200 км - мы тож по этим граблям ходили..
Однакож на вопрос я бы дал другой ответ - на конечном участке может происходить развал решения (но это зависит от самой ракеты и выбранной траектории и легко парируется подбором величины шага интегрирования). В лаунчере просто последние 10 секунд летит по уже вычиленным величинам.
    Добавлено: 18:04 06-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
Ага, на последних секундах решение действительно разваливается. Все заканчивается мертвым зависом Улыбка
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 23:11 06-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
To Bloodest

Роман, а как ты вычисляешь якобиан (матрицу Якоби, точнее) в методе Ньютона? Я тупо делаю, вот так:

J[i, j] = (F[i](x1, xj + h,..., xn) - F(x1, xj,...,xn))/h

то есть заменяю частную производную конечной разностью. Величину h беру от 1e-4 до 1e-7. При верхней границе наблюдается мертвый завис метода где-то на 200 секунде, а при нижней - неопределенность решения, вызванная, видимо, выраждением якобиана. А если взять грубее, то зависает вообще в начале полета. Завис возникает из-за расхождения метода Ньютона, это я точно выяснил, натыкав счетчиков итераций где только можно, и установив точки останова на определенные их значения.

У меня в диссере такой способ прокатывает, а тут видимо нет.

P.S.: Это я к тому, что основная формула метода Ньютона

X[k] = X[k-1] - (J[k-1]^(-1))*F(X[k-1])

где X - вектор неизвестных величин в ур-е F(X) = 0; J^(-1) - матрица, обратная матрице Якоби.
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 03:19 08-05-2006   
Bloodest
 155 EGP


Рейтинг канала: 3(40)
Репутация: 18
Сообщения: 944
Откуда: Питерские мы
Зарегистрирован: 07.10.2004
Здесь конечно вырождение якобиана может иметь место, но это следствие. Первопричина конечно в свойствах самих псевдофункций, а именно во второй производной. А именно - метод Ньютона- слабо работает если вторая производная имеет тот же знак что и первая. Добавляет масла в огонь способ вычисления производных якобиана. Чем меньше шаг при вычеслении производной тем больше промах. Дык основные способы борьбы -
вычисление производных с шагом равным шагу движения самого ньютона.
регуляризация приращений иксов
- проверка на допустимость величины если это тригонометрический параметр - конечно из иксов, относящихся к at+b должен получатся разумный угол - +- 180 градусов, особенно при предельных t. Соответственно присутствует регуляризация для b и главное а.
- дросселирование шага приближения
X[k] = X[k-1] - (J[k-1]^(-1))*F(X[k-1])*IncrementFactor

Итог - первое приближение
x[0] = -180.*RAD/650.;
x[1] = 50*RAD ;
x[2] = asin(cos(Inc)/cos(latitude));

Шаг для производных
double Step[3] ={.1,.1,0.01};//
В некоторых случаях лудше бывает использовать отрицательный шаг, но не здесь.
Точность
double E[3] ={.01*RAD,.01*RAD,.01*RAD};
Дроссель приращений
double IncrementFactor[3] ={ 1, 1, 0.1};


Регуляризация
x[i]=x[i]+f[i]*IncrementFactor[i];
if(x[1]>89.99*RAD) {x[1]= 89.99*RAD;bMarign=true;}
if(x[1]<-89*RAD) {x[1]= -89*RAD;bMarign=true;}
if(x[0]>10*RAD) {x[0]= 10*RAD;bMarign=true;}
if(x[0]<-10*RAD) {x[0]= -10*RAD;bMarign=true;}
if(x[2]>180*RAD) {x[2]= 180*RAD;bMarign=true;}
if(x[2]<-180*RAD) {x[2]= -180*RAD;bMarign=true;}
if ( fabs( f[i]/x[i])>E[i]) // Продолжаем расчет

ЗЫ Очепятка - исправил
    Добавлено: 08:08 10-05-2006   
astronavt
 86 EGP


Рейтинг канала: 1(3)
Репутация: 35
Сообщения: 403
Откуда: Новочеркасск
Зарегистрирован: 11.01.2006
М-да, это не плюшки со стола тырить... Улыбка

А еще погоду портит (уже при управлении) конечная скорость поворота рулевиков. Из-за этого дикое запаздывание. Вот сейчас чешу тыкву, как это учесть. Не Понтрягин, ни твой способ управления с линеаризацией этого не учитывает (наверно?). Можно, конечно, сделать так - управлять мговенно меняющимся моментом, а рулевики просто крутить для зрителей. Но так ведь блин не интересно Расстроен. Летала же (и летает!) реальная "семерка". Обидно, ведь я по специальности управленец-робототехник... Видимо плохо учили, или я плохо учился. Ну ничего, прорвемся Хы...!
_________________
Я бы изменил этот мир, но Бог не дает мне исходников...
    Добавлено: 09:31 10-05-2006   
Канал Orbiter: «"Семерка" (МБР Р-7) для Orbiter»
На страницу: Пред.  1, 2, 3, 4 ... 29, 30, 31  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Макс, советую перекусить тросик ручного тормоза. ... Макс, у тебя, кажись, там не тросик, а рельса стальная. (Juni)

  » "Семерка" (МБР Р-7) для Orbiter | страница 3
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18