Прогулка по лунолётам. 4 - Вблизи и на орбите

На прошлых прогулках (первая, вторая, третья) мы опробовали расчетную модель и графическую основу для нашего интерактивного симулятора полётов вблизи Луны и других безатмосферных планет. Однако, данная модель не учитывала ни изменение ускорения свободного падения при наборе высоты, ни сферическую форму планеты, что не позволяло нам сделать главный шаг - набрать первую космическую скорость и выйти в свободный полёт на лунной орбите.

Пришла пора усовершенствовать математику полёта и собрать наш симулятор из трех частей: основного цикла "реального" времени для взаимодействия с пилотом лунолёта, расчетного блока и блока вывода графической информации. Для работы нам понадобится ПМК типа HP 50g/49 (с небольшими переделками программа пойдет и на 48g) или его эмулятор, например, Debug4x.

Итак, наш лунолёт становится способным совершать орбитальные полёты. Вот как это выглядит в понятиях используемой математической модели.

Движение лунолёта характеризуется вертикальной "u" и горизонтальной "v" скоростями, тяга определяется вектором ускорения "a", угол "альфа" которого задаётся как отклонение от вертикали (прямая между лунолётом и центром планеты). Местонахождение определяется расстоянием "r" от центра планеты (высота "h" является разностью этого расстояния и радуса планеты) и углом отклонения "гамма" от места старта "гамма-ноль". Как вы могли заметить, мы перешли к расчетам в полярной системе координат. Пройденная дистанция "L" рассчитывается как сумма пройденных участков пути (наш симулятор рассчитывает манёвр ежесекундно)

Тем не менее, при полёте вблизи поверхности на небольшие расстояния и вертикальных полетах расчеты позволяют использовать привычную и удобную в этих случаях декартову систему координат. Координата "x" вычисляется по приведенной формуле даже более точно с учетом сферической поверхности. Привычный набор параметров: высота, координата "x", скорости, позволяют однозначно определить положение корабля и направление его движения.

Для орбитальных полётов удобнее использовать угол отклонения "гамма" и высоту. Виток вокруг планеты будет означать изменение "гаммы" от нуля до 360°.

На базе блок-схемы "Орбитальная станция" была разработана следующая схема расчетов маневра. В отличие от модели, использованной на предыдущих прогулках, ускорение зависит от гравитационных, центробежных (вертикальная или, точнее, радиальная составляющая) и кориолисовых (горизонтальная) сил.

Чтобы начать полет на симуляторе загружаем в ПМК программу "Лунолёт" (Lunar Ship) из прикрепленного внизу файла.

Параметры и управление

После заставки программа показывает горячие клавиши, доступные пилоту для управления лунолётом.

  • Стрелки вверх и вниз служат для управления ускорением. Одно нажатие клавиши соответствует изменению ускорения на 1 м/сек2. Клавишей "F2" для более точного манёвра можно изменять приращение с 1 до 0,5 м/сек2 и обратно. Клавишей "F6" можно мгновенно выключить двигатель.
  • Вектор тяги задаётся углом "альфа" в пределах [-180°, 180°]. Изначально "альфа" равна нулю (тяга направлена вверх по вертикали). Для изменения угла используются стрелки вправо и влево. Изменение цикличное: угол -190° становится 170° и наоборот. Шаг изменения - 10°. Аналогичным образом клавишей "F1" можно переключать шаг с 10° до 10° и обратно.
  • Клавиша "J" ("var") делает паузу в игре и рисует на экране траекторию полета в орбитальном масштабе. Если вы будете летать вблизи поверхности на малые расстояния, то, разумеется, кроме Луны на картинке ничего видно не будет.
  • Клавиша "N" запускает новую игру (дожидаться приземления необязательно), клавиша "Q" - выход из программы.

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

  • g - ускорение свободного падения на поверхности планеты, м/сек2
  • R - радиус планеты, м
  • c - скорость истечения топлива, м/сек
  • LS - жизнеобеспечение корабля в секундах
  • A - предельное допустимое ускорение, м/сек2. В рассказе С. Лема "Дознание" из цикла о пилоте Пирксе робот сумел сорвать этот предохранитель и вывести корабль на запредельные перегрузки, подвергая смертельному риску экипаж людей. Наш лунолёт не позволяет такие шалости.
  • Ms - "сухая" масса корабля, включая экипаж, кг
  • Mf - масса топлива, кг
  • L/X - переключатель для режима орбитального полёта и полетов вблизи планеты. В первом случае (значение "1") выводится информация о пройденной дистанции L, во втором ("0") - информация о текущей координате "x" на поверхности.

Чтобы изменить параметры, стрелками подведите курсор к полю, введите новое значение и нажмите "Ввод" (Enter).

В кресле пилота

Итак, корабль на старте. Посмотрим, какую бортовую информацию даёт нам симулятор. Координатная сетка показывает масштаб в метрах. При движении лунолёта масштаб будет динамически меняться. В левом ряду расположились все основные цифры телеметрии.

  • H - текущая высота в метрах
  • L (или "X", если выбран это режим) - пройденная дистанция или текущая координата, также в метрах
  • γ - "гамма" - угол отклонения от начальной вертикали, градусы
  • a - текущее ускорение, м/сек2
  • α - "альфа" - угол вектора тяги, градусы
  • V - горизонтальная скорость
  • U - вертикальная скорость
  • LS - запас жизнеобеспечения, секунды
  • F - запас топлива, кг

Теперь обратите внимание на кружок, разделяющий ряд на блок координат и остальную телеметрию. Кружок показывает Луну, а точка - текущее положение корабля согласно углу "гамма" (высота в расчет не принимается). По мере увеличения "гаммы" точка будет вырисовываться в дугу, потом в окружность. Окружность будет означать выполнение полного витка вокруг планеты. Для детального просмотра орбиты существует соответствующий режим, войти в который можно нажав кнопку "J".

Можно не трогая горизонтальных стрелок немедленно перейти в вертикальный полёт и попробовать себя в роли Саши Перепёлкина: разогнаться, набрать высоту около 10 км, а потом совершить мягкую посадку в той же точке.

Можно потренироваться, повторив выполнение задания из "Лунолет-2", совершив баллистический полёт на 250 километров. Для этого, правда, лучше нажать "N" (новая игра) и перейти в режим координат "X".

Но мы сразу попробуем стартовать на орбиту. Ускоряемся и меняем угол. Рекомендуем отклоняться вправо, так как полет влево будет мешать наблюдению за цифрами.

Разгоняемся

Выходим на орбиту, отключаем двигатель. Судя по цифрам, круговая орбита не получилась, нас выносит на эллипс. Включаем кнопкой "2" режим 10-кратного ускорения времени и ждём, куда эллипс вынесет...

Так и есть, эллипс вынес на Луну! При таких скоростях от корабля и пилота не осталось и дыма...

Жмем "J", смотрим на орбиту - вот она во всей красе...

Итак, первый полет завершился "сваливанием" на эллипс и падением корабля на поверхность планеты с космической скоростью.

Ваша задача - не повторить ошибки и попытаться совершить круговой полёт вокруг Луны при заданных начальных параметрах (3500 кг топлива, 2250 кг сухой массы корабля). В пошаговом режиме с карандашом и миллиметровкой в уютном кабинете редакции КЭИ - это одно. Пришло время проверить, возможно ли это в суровых условиях динамического полёта.

File attachments: 
Прикрепленный файлРазмер
Binary Data lunar_ship_03.s15.84 KB
Undefined

Комментарии

Замечательная работа, впечатляет! Пожалуй, можно запортировать на iPad ;)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

:) Попробуйте. И выложить на iStore.

Да это была шутка про iPad. Не собираюсь я платить деньги за (+) покупку лицензии разработчика, тем более не собираюсь "джейлбрейкить" устройство, которое было купленно с одной единственной целью - заменить старый ноутбук на обеденном столе в качестве "новостечиталки".

А вот перенести на Python для любимой Nokia N810 - это можно попробовать :)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Оффтопик. Виталий, ты вроде в Нокии или ошибаюсь? Как ситуация в связи с объявленной ориентацией на Windows Phone? Жалко Симбиан, да и с поддержкой Qt неясности.

Да, там. Ситуация "переходная" во многих смыслах - на Windows Phone 7 и к новой организации. Время перемен во всей красе.
Симбиан пока живее всех живых - вот открыли сегодня новый сайт: http://symbian.nokia.com/
Со временем он, скорее всего, вытеснится виндой, но пока есть и еще будет.

С Qt - права на лицензионную поддержку купила финская фирма Digia, сам фреймворк продолжает дорабатываться в Нокии, но какое будущее - я не знаю.

Под Виндофон писать и так будет хорошо - что что, а средства разработки у MS на уровне.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Меня сильно смущает меняющаяся политика MS в отношении мобильных устройств. Так была похерена Windows Smartphone 2003, хотя телефон у меня жив и здоров по сей день вот уже более 7 лет. Был декларирован переход на Windows Mobile 4, потом 5, остановились на 6.5 вроде. Сказали: "Всё, больше не будет Windows Mobile, а будет Windows Phone 7". Идеология Windows Phone похожа на Aplle: относительно закрытая платформа с лицензированием.

При этом все эти года в параллельной реальности существует Windows CE (недавно вышла 6 версия), которую используют в промышленных устройствах.

Как-то не удавалось Мсофту с мобильными системами до сих пор. Виндовс фон 7 ОС была написана с нуля, изначально заточенная под пальцевый интерфейс.
Посмотрим, что из этого выйдет. Толстый зеленый робот не дремлет

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

NokiaN810

А вот перенести на Python для любимой Nokia N810 - это можно попробовать :)

Вопрос не по теме. Этот NokiaN810 стоит сейчас покупать?

Смотря для каких целей и за какие деньги. Машинка интересная, до сих пор.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Тут один чел в Мск продает за 4000 руб. Хотел сначала с ним обменяться anydata 505a на его 810-ую. Но после НГ он что-то передумал... Зато за это время, просматривая Интернет, уже стало не совсем ясно — есть ли у нее перспективы или нет.

За 4000 руб, может, дороговато. Перспективы - да вряд ли, устаревшая машинка, с ограниченнным комьюнити, по нынешним меркам уже тормозная.
Но в интернет ходит, читалка книжек и дежавюшек замечательная. Программировать на Питоне на ура можно. Можно поставить пакет GCC, и программировать на Си прямо на борту.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Спасибо за отзыв :) Вот думаю на паскале переписать под HP Pascal. Он генерит код для Saturn-a, т.е. весь функционал ПМК доступен, а скорость лишь немногим хуже, чем при генерации на Си под ARM. Разбираюсь с исходниками компилятора: автор реализовал его под VC++/ATL/MFC. Перевожу код под GCC/STL потихоньку.

Интересно было бы также реализовать эмулятор МК-61/52 под HP. А то и МК-161 :) Не знаю, будет ли время.

С платформами все понятно: HP 50g - как классический ПМК, для контроллера периферии тот же 50g или МК-161 в зависимости от требований к системе.

Компилятор и эмулятор VC++/ATL/MFC
Интересно, почему бы сразу не под GCC?

Интересно было бы также реализовать эмулятор МК-61/52 под HP. А то и МК-161 :) Не знаю, будет ли время.
Интересная идея :)
Насчет МК-1хх - а если для начала попробовать скомпилировать Arvi's программный калькулятор ВК-6 на Си под Арм?

С платформами все понятно: HP 50g - как классический ПМК, для контроллера периферии тот же 50g или МК-161 в зависимости от требований к системе.
А я брожу вокруг мысли о самой простой "руке" из фанерных выкроек с сервоприводами. Которую можно было бы сделать лобзиком и дрелью

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

ВК-6

Насчет МК-1хх - а если для начала попробовать скомпилировать Arvi's программный калькулятор ВК-6 на Си под Арм?

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

Поскольку в использовании новых ПМК-ашных возможностей (типа 10000 шагов и 1000 регистров) с целью написания новых прикладных программ нет большого смысла, то достаточно иметь эмулятор для МК-61/52 для запуска старых программ с 105 шагами и 15 регистрами.

Да, ВК-6 эмулировал лишь ПМК без "портовых" (+) возможностей.

Хотя без доп. железа все порты 161й не сэмулировать (ADC, SPI)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Естественно, без доп.железа нельзя. Только последовательный порт и можно было бы. Поэтому и не вижу особой целесообразности в эмуляторе, выходящем за пределы старых МК-61/52.

Тем более, что за три с половиной года не появилось ни одной практически полезной программы, специфичной для МК-152/161, которую имело бы смысл эмулировать. Возможно, всё-таки, они появятся. Но вот я, например, совершенно не готов к неадекватным усилиям для написания мнемокода более чем на 1-2 сотни шагов (ну, может, 3-4 с учетом меток и среды прекомпиляции). Что, на мой взгляд, является естественным пределом практического использования парадигмы старых ПМК. А для большего нет адекватных средств типа ЯВУ уровня хотя бы Си или Форта.

Тот же динамический "лунолет" вместо 700 строк на UserRPL превратился бы в плохсопровождаемую кашу из нескольких тысяч шагов.

Так, может, стряхнуть пыль с mk61avr? :) http://code.google.com/p/mk61avr/

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

А у него исходники эмулятора на Си?

Да, Си, правда, avr-специфичный в местах ввода-вывода.
Можно посмотреть исходники: http://code.google.com/p/mk61avr/source/browse/trunk/+mk61avr+--username...

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Тогда надо поискать Си под Saturn. Вроде бы HPGCC может и такое, но я не полностью уверен. Надо покопать тему.

есть еще эмулятор:
http://sourceforge.net/projects/pocketmk/

Интересный эмулятор. Правда, там все под win32 заточено - наверное, сложнее напильником допиливать будет

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Я так понимаю, что под HPGCC порты HP50g не будут работать:
http://sense.net/~egan/hpgcc/

Why not C?
* Serial and USB I/O is currently not supported.
* Small UserRPL routines may be good enough. Why add a layer of complexity? Use the right tool for the right job.

Но если ограничиться "чистой" эмуляцией МК-61, то, наверное, самое то.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Код под сатурн был бы более подходящим, т.к. он работает на всей линейке 48/49/50, под 50g - в безопасном режиме эмулятора. С большой вероятностью все возможности UserRPL/SysRPL, включая работу с портами, должны поддерживаться. Запускать такой модуль на 50g так же просто, как и UserRPL-программы.

http://hp48xgcc.sourceforge.net/

Не хочешь попробовать скомпилировать под него mk61avr (точнее, калькуляторную его часть) ? ;) Просто ради интереса, какие будут проблемы совместимости кода.

Попробовал Вашу программу на Debug4x. Затрачено усилий много, но интерфейс управления не удобен. Пролететь вокруг Луны на 4-х км и успешно прилуниться на 3500 кг топлива практически не возможно из-за большой инерционности системы управления тягой и ориентацией. Ещё и полёт длится практически в реальном времени. Это же почти 2 часа "лететь". Такое "болтание на орбите" несколько утомительно.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

У меня реально-временные игры всегда (+) шли с трудом, если не принимать во внимание, что я вообще не игрок :)
Наверное, поэтому меня и зацепили "Лунолеты". Также как, позднее, "Incubation - Time is Running Out".

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Так надо задействовать. Так надо было задействовать клавиши управления.
Для длительных маневров после разгона - "2" и "3" - шаг по времени 10 и 100 секунд, соответственно.
"1" - возврат к 1 секунде.
F6 обнуляет тягу.
Для более точных манёвров можно F1 и F2 задавать меньшие "дельты" угла и тяги.

А почему на эмуляторе, а не на нормальном ПМК, у вас же имеется 50g? На эмуляторе графика хуже.
Для запуска надо просто скопировать файл, например в HOME-каталог, он появится в меню по VAR.

Дал НР-50 на время своему знакомому для ознакомления. У меня сейчас в железе HP-48GII.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Спасайте! Полчаса бился над Debug4x, но запустить программу так и не смог. Это что-то с чем-то. После Ti и Сasio ни в какие рамки не лезет.

В общем вопрос простой, как запустить программу на эмуляторе?

Я пробовал так: перетащил мышкой файл на эмулятор, программа появилась, потом набрал ' alpha G STO>, программа вроде сохранилась в переменной G и в меню появилась, далее нажал <-, и потом нажал эту G над F1 и Enter. И ничего не произошло, только текст программы опять на экране почему-то, доступен для редактирования. Но не запускается... Простенькая программка из руководства запускается, а эта не хочет.

Так она в текстовом виде перетаскивается (в кавычках). Для преобразования этой программы (lunar_ship_03.s) можно использовать ASCIIBIN, которая идет с Emu48.

З.Ы. Я лично предпочитаю вместо ASCIIBIN использовать встроенные STR-> и ->STR. Текст программы заранее подготавиваю в правильной кодировке ( http://www.ascii.ca/hp48.htm ). Сохраняю программы через Copy Stack (предварительно преобразовав в строку ->STR).

HP > Я лично предпочитаю вместо ASCIIBIN использовать встроенные STR-> и ->STR.

Это наверное надо хорошо знать что все это значит))) Спасиб за ответ, но нашел более простой способ по F10 из среды разработки.

Я сам debug4x и его IDE не использую. Только Emu48 из него. Поэтому, для загрузки сторонних программ использую ASCIIBIN, а свои сохраняю в родном ASCII через ->STR и Copy Stack и загружаю через Load Object/Paste Stack и STR->.

Ясно. А я было попробовал найти эту программу ASCIIBIN в самом эмуляторе debug4x.

Попробуйте просто открыть файл в среде и запустить на выполнение (по F9 вроде).

Да уж... Так сходу не удалось. Ошибки какие-то странные выдал:
SLOAD. : 0: /SLOAD: Problem reading file _end.o
SLOAD. : 0: /SLOAD: Problem reading file _head.o
SLOAD. : 0: /SLOAD: Problem reading file _table.o
SLOAD. : 0: /SLOAD: Symbol LIB200 not defined.
Буду второй способ пробовать.

Можно так:
1. Можно так:
1. Скачать http://hp.giesselink.com/Emu48/Emu48v151Setup.zip
2. Загрузить программу Emu48asc\ASCIIBIN.49 в калькулятор (через Load Object или перетянуть).
3. Сохранить ее (STO) под именем "A2B", например.
4. Скачать lunar_ship_03.s. Исправить первую строку на "%%HP: T(3)A(R)F(.);"
5. Загрузить ее в стек (через Load Object или перетянуть).
6. Запустить на калькуляторе "A2B".
7. Сохранить программу (STO) под именем "LUNAR"
8. Запустить LUNAR и играть.

О, вот это уже намного понятнее! Спасибо, запомню на будущее!

Способ как запустить программу на эмуляторе. Случайно нашел простой способ запустить программу! Оказывается надо сначала загрузить программу в среду IDE. И нажать F10 (Send to emulator). Программа и загрузилась в эмулятор и, как ни странно, запустилась даже.

Попробовал. Вылетел куда-то в космос и похоже не вернулся...
Я так понимаю раз атмосферы нет, то и парашюта тоже нету и ничего нет для безопасной посадки?
Прикольно! Надо теперь во внутренностях поразбираться)

Да, парашют не поможет :) Внутренности можно также посмотреть в предыдущих статьях "Прогулки" 1-3, см. ссылки в начале статьи.

HP-49g+Программа только для 50-го калькулятора? На 49g+ не заработала.

Для 49+, видимо, надо подкорректировать графику.

О как, значит 50-ка все-таки отличается от 49-й... Печально. Придется 49й сдать обратно.

На 49-й были нарекания по надежности кнопок (на сайте была информация), эта модель отозвана с рынка, заменена на 50g. Так что лучше поменять модель, если есть такая возможность.

Кнопки хорошие. Правда в отличие от Касио очень тугие.

Версия прошивки HP 49g+. Какая версия прошивки у вашего HP 49g+ ? Может проблемы с запуском программы из-за старой прошивки.

Похожие проблемы были при запуске моей игрушки на калькуляторе HP 50g со старой прошивкой (см. комментарии http://pmk.arbinada.com/node/675).

P.S. У HP 50g и у HP 49g+ одинаковое ПО и, в частности, разрешение экрана (???). Я скачивал последнюю на текущий момент версию прошивки отсюда http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareIndex.jsp?lang=...

О как! Надо бы посмотреть какая там прошивка... Я не знал что ее можно заменить.

Не понял, мне что, нужно вкачать прошивку от 50-го в калькулятор 49-й?

Да

Не понял, мне что, нужно вкачать прошивку от 50-го в калькулятор 49-й?

Именно так. На странице по указанной ссылке есть табличка Firmware, в которой в столбце с заголовком Description в первой строке написано HP 49g+ and 50g Calculator ROM Upgrades, что означает одну прошивку для калькуляторов HP 50g и HP 49g+.

Что-то не ясно как узнать версию прошивки. Можно обновлять прошивку, даже если там уже такая есть?

Версия прошивки. Версию прошивки можно узнать командой VERSION.
Можно перезаписать туже саму версию прошивки.

HP 49 Cверсия. HP 49 C
версия 1.23
2003 год
Судя по году наверное старая, ибо на сайте HP 2009 год прописан...

Обновление прошивки. Да, версия прошивки старая. Лучше обновить до последней официальной 2.15.

P.S. На вашем калькуляторе с такой старой прошивкой может быть работает это (см. комментарий "Разработчики" http://pmk.arbinada.com/node/233):

Вероятно, не лишней будет информация о не упомянутых здесь дополнительных сочетаниях клавиш. Следующие клавиши нажатые после активации тестового режима (ON + F4) позволяют отобразить на дисплее калькулятора фотографии разработчиков (в дополнение к кроссворду с их именами):
- B: Christian Bourgeois;
- C: Cyrille de Brebisson;
- G: Gerald Squelart;
- J: Jean-Yves Avenard
- M: Mark Carter;
- R: Ray Suryn;
- S: Cyrille, Jean-Yves, Mika Heiskanen, Gerald, and Bernard Parisse;
- T: Tanya Brooks;
- V: :)
(для выхода нажать ON)

Фотки не выводятся.