kOS-скрипт посадочного автопилота

Kerbal Space Program » Гайды

Добрых шестичасовых суток!

Хочу представить вам свои наработки по созданию автоматического пилотирования на основе скриптов kOS. Сегодня речь пойдет об автоматической посадке на Кербин …постойте! – скажут некоторые – во-первых, в чем сложности посадки на Кербин?! – есть же парашюты; а во-вторых, есть MechJeb. Правильно, ни то и ни другое не мешает нам расслабиться и наслаждаться жизнью, т.е. полетом. Но мы были бы не мы, если бы не ставили перед собой дополнительных задач, которые помогают нам смотреть шире на обыденные для нас вещи.
Итак, автоматическая посадка на Кербин без парашютов и MechJeb’а, имея в наличии всего лишь kOS-процессор на борту и скрипт посадки “landing.ks”.




Теперь от теории к практике.



P. S. Подводные камни.
Как всегда, не все так прекрасно, как очень хочется. Нельзя просто так запустить скрипт на любом аппарате, удобном для посадки на Кербине, или еще где. Необходимо учесть два параметра, разных для каждого аппарата.
1. Измерение высоты полета над поверхностью не учитывают высоту самого крафта, в следствии чего расчетная финальная высота в реальности оказывается ниже уровня земли, и мы получаем не очень мягкую посадку.
2. Инертность работы скрипта ведет к зависанию аппаратов с двигателями с большим TWR над поверхностью земли, т.к. импульсы тяги больше, чем нужно, и скрипт вылетает из-за потери ретрогрейда.
Если в решении второй проблемы я ввел в скрипт программный лимит тяги (эмпирически выведен лимит в TWR=2), то для решения первой приходится вводить данные о высоте крафта в скрипт, а точнее высоту расположения командного модуля относительно самой нижней точки крафта.

Пока все. Спасибо за внимание.

Скрипт landing.ks

kOS-скрипты для вывода аппаратов [RSS-RO].
kOS-скрипты для вывода аппаратов [RSS-RO].
19 июн 2016 в 23:38, Гайды
Tutorial: автопилот MechJeb 2.0.9
Tutorial: автопилот MechJeb 2.0.9
15 авг 2013 в 23:27, Творчество » Гайды
  1. Басила

    Басила 23 сентября 2016 00:22

    Плюсую нечитая яростно)
    зы: еще больше плюсую, за теорию, и за практику и вообще за приятную и понятную подачу. Исполать тебе) Лис, твой выход)

  2. valkerman

    valkerman @Александр 23 сентября 2016 00:54

    Товарищ, ты офигенен. Я из-за лени и недостатка времени эту затею бросил. Теперь допилю - ты всю основную работу проделал.

  3. Tesla254

    Tesla254 @Николай 23 сентября 2016 06:12

    Вот решение первой проблемы. Модуль покажет реальную высоту до поверхности.

    1. Iavasdemsul

      Iavasdemsul @Илья 23 сентября 2016 10:09 Автор

      Отличная идея. Спасибо.

  4. Reistlyn

    Reistlyn 23 сентября 2016 10:26

    Перенес в "Гайды" (тут это более к месту)

  5. DimasusFX

    DimasusFX @Димасус Миридиус Дицимус 23 сентября 2016 15:03

    Спасибо за очень полезный скрипт, плюсую!

  6. Пряморукий пилот

    Пряморукий пилот @Пряморукий пилот 23 сентября 2016 15:21

    Никаких скриптов; только вручную - только хардкор!

    1. Lynx

      Lynx 23 сентября 2016 18:29

      Этот скрипт написан вручную. Вот это - хардкор.

      1. Пряморукий пилот

        Пряморукий пилот @Пряморукий пилот 23 сентября 2016 18:38

        Хардкорно было, когда программы двоичным кодом для ламповых и транзисторных компьютеров писали. А этот скрипт был бы гораздо полезнее для посадки на безатмосферные планеты и луны.
        UPD: Ладно, все равно поставил плюс за труды; применение этому скрипту , при желании, можно найти. (Хотя лично я предпочитаю геморройный путь размещать ретрансляторы везде, где только можно, для предотвращения казуса потери связи.)

  7. sahsa_sahencie

    sahsa_sahencie @Александер 23 сентября 2016 17:30

    Цитата: Пряморукий пилот
    Никаких скриптов; только вручную - только хардкор!

    Вручную нельзя посадить беспилотный аппарат в RT при потере связи.
    А скрипт и вправду полезен.

  8. lis_vamp

    lis_vamp @Ilya 23 сентября 2016 19:53

    несколько подсказок.. высоту можно считать не только alt:radar.
    а вот такой конструкцией ship:geoposition:TERRAINHEIGHT. собственно получает ship:Altitude - ship:geoposition:TERRAINHEIGHT.
    по тяге можно тоже написать ограничитель ТВР..
    остаётся один вопрос, в горах сядет?

    1. Iavasdemsul

      Iavasdemsul @Илья 24 сентября 2016 00:45 Автор

      Только ship:geoposition:terrainheight выдает странные значения, и не всегда

      ship:altitude - ship:geoposition:terrainheight = alt:radar

      особенно при наклонном падении. Работает лишь при отвесном спуске.
      Про ТВР я написал, что ограничил программно.
      А проблему с измерением высоты решили модом LaserDist.
      Прицепил лазер на "пятую точку" и добавил:

      set laser_module to ship:modulesnamed("laserdistmodule")[0].
      if not laser_module:getfield("enabled") {
      laser_module:setfield("enabled",true).
      }
      lock curr_h to laser_module:GETFIELD("Distance") * sin(vang(up:vector,ship:facing:topvector)).
      //
      set h to 0.1. //!!!!!!!Высота LaserDist модуля корабля.
      //


      Теперь вычисляется не alt:radar, а curr_h:



      Остается разобраться со спуском вдоль склона, когда alt:radar < curr_h.

  9. MegaLoogin

    MegaLoogin @Данил Кубинович 26 сентября 2016 04:21

    Что за язык программирования в скрипте, и можно по подробнее об этом моде ?

    1. Tesla254

      Tesla254 @Николай 26 сентября 2016 12:09

      1. MegaLoogin

        MegaLoogin @Данил Кубинович 2 октября 2016 14:00

        Огромное спасибо !

  10. Gonzales_Gonzo

    Gonzales_Gonzo @Гонзо Гонзалес 26 сентября 2016 21:24

    Крутотень, почти как здесь
    https://www.youtube.com/watch?v=q1xSKBVOU6w

    И исходники там же есть, можно сравнить подходы авторов - https://github.com/jb10181/KOS_Suicide_Burn

    1. Iavasdemsul

      Iavasdemsul @Илья 28 сентября 2016 13:51 Автор

      Спасибо, интересный алгоритм у JB.
      В теории различий нет, та же формула, только значения конечной скорости и высоты у него заданы нулевыми.
      Сам же скрипт разбивает полет на три части, где дает максимальную тягу при снижении ниже "критической" высоты, а потом при достижении нужной скорости в -6 м/с, просто регулирует тягу +/- 10% в зависимости от девиации вертикальной скорости.

  11. lis_vamp

    lis_vamp @Ilya 27 сентября 2016 11:28

    Направление/наклон корабля доверим встроенному SAS

    если тебе нужен просто ретрогрэйд, то так и фиксить его "lock steering to srfretrograde."

    1. Iavasdemsul

      Iavasdemsul @Илья 28 сентября 2016 13:00 Автор

      Ага, уже разобрался с векторами и направлениями, последняя редакция скрипта здесь в теме на форуме:
      kOS - програмируемый автопилот

  12. ux3sty

    ux3sty 28 сентября 2016 17:22

    Я лишь посоветую использовать вместо/вместе сырой математики ПИД регуляторы, можно будет исправить некоторые проблемы, если правильно подобрать коэффициенты.

  13. beglum

    beglum @Мария Халабуда 28 ноября 2016 09:54

    Господы, помогите пожалуйста.
    Скачал расширение с оф. сайта модов для KSP (на курсе, как я понял).
    И само окно, после установки модуля корабля, не открывается. И способа открыть его я не нашел.

Последние сообщения с форума
  • Тема в разделе: Игровой процесс
    Просмотров: 3131
    Ответов: 8
  • Тема в разделе: Технические вопросы
    Просмотров: 2694
    Ответов: 1
  • Тема в разделе: Технические вопросы
    Просмотров: 86722
    Ответов: 453
  • Тема в разделе: Предложения и Ошибки
    Просмотров: 369
    Ответов: 0
  • Тема в разделе: Модераторский раздел
    Просмотров: 322
    Ответов: 13
    Все сообщения..
    Полный список последних сообщений
    Loading...

    Нашли ошибку?
    Вы можете сообщить об этом администрации.
    Выделив текст нажмите Alt+Ctrl