kOS - програмируемый автопилот

  1. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Silver, в двух словах суть такова. В компьютере на самом деле нет никаких True и False, там есть только числа. Но как же нам тогда быть с логическими переменными? А очень просто, будем считать что True = 1, а False = 0 и сконструируем компилятор так, чтобы он сам следил численная у нас переменная, или логическая. И тогда все выходит прозрачно для пользователя - ты пишешь print 5 < 3 и в ответ получаешь True, потому что компилятор знает что ты хочешь получить. Но число ведь на самом деле никуда не исчезло и все логические значения по сути это числа. А числа можно сравнить. Например (5 > 3) < 1, ага? Получается что в скобках у нас True, то есть 1, а 1 < 1 это False, то есть 0 и команда print (5 > 3) < 1 по идее должна печатать False.
    Теперь на счет букв. Букв в компьютере тоже нет, вместо них числа. И компилятор который знает что ты хочешь увидеть именно буквы. Сопоставить буквы и числа можно например при помощи таблицы кодировки, это как раз те числа, которыми можно вводить в чате всякие закорюки зажав Alt.
    Например в основном коде ASCII a (латинская) кодируется как 97, и тогда смысл операции `a` > 90 становится предельно понятен, это тоже самое что и 97 > 90.
    Совершенно другой вопрос что из всего этого позволяет делать язык. В C , например, пошли очень далеко и превратили это из бага в фичу, там даже оператор присваивания имеет численное значение и можно конструировать вещи типа IF (SET A TO X) < 5 Print WTF?, только в оригинальном синтаксисе. Что и как реализовано в КОСе я не знаю, возможно это все на уровне "никогда так не делайте", но общий смысл я думаю описал.
    Ах да, и насчет строк. Их тоже нет :) Возможно в КОСе строка представлена массивом, 0 элемент которого содержит ее длину, потому и получается что сравнивая число со строкой, ты сравниваешь с ее длиной. Но это только догадка.
    Сообщение отредактировал Lynx 21 декабря 2015 - 20:43
    21 декабря 2015 - 20:07 / #301
  2. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    Finn писал:
    Очень уж странно, что из Траста команда только MAXTHRUST есть.

    не только...

    LIST ENGINES IN olleng.
    FOR eng IN olleng {
    set ollthrust to ollthrust eng:thrust.
    }.

    даёт траст всех двигателей сейчас работающих.
    21 декабря 2015 - 21:24 / #302
  3. Оффлайн

    lis_vamp

    Посетители

    Сообщений: 71

    как-то очень сложно...
    почему не узнать так
    set mthrust to ship:maxthrust.
    или
    set athrust to ship:availablethrust. // если throttle < 1
    21 декабря 2015 - 21:39 / #303
  4. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    это я к тому, что если работает не один двиг. и нужно знать тягу конкретного.

    На Н-1 например, первая ступень имела 30 двигателей и маневрирование происходило за счёт уменьшения или увеличения тяги на разных двигателях в зависимости от необходимости. А не за счёт их поворота.
    Сообщение отредактировал PAPIK-77 21 декабря 2015 - 22:02
    21 декабря 2015 - 21:58 / #304
  5. Оффлайн

    bonus

    Посетители

    Сообщений: 110

    Господа, добрый день. У меня тут возник вопрос - а никто не заморачивался интерпретатором для kOS с подсветкой и автозаполнением?
    21 декабря 2015 - 23:11 / #305
  6. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    bonus,
    посмотри тут KSP-KOS/EditorTools, это если я правильно тебя понял.
    Я нотепадом пользуюсь с этим синтаксисом.
    Сообщение отредактировал PAPIK-77 21 декабря 2015 - 23:35
    21 декабря 2015 - 23:33 / #306
  7. Оффлайн

    bonus

    Посетители

    Сообщений: 110

    PAPIK-77,
    Спасибо, оно.
    Правда я уже для JetBrains`овских продуктов начал такое же ваять )
    21 декабря 2015 - 23:40 / #307
  8. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    Silver, ого какие программы уже пишешь.

    Я пока не могу понять с какой стороны к 4 части гайда подойти. Ибо надо очень большой объем информации туда влить. Сегодня роботами, да кранами карьерой позанимался. Что-то не до kOS было. Хотя немного с дирекшеном поигрался. Сделал для карьеры автопилот самолётный дабы аэроразведки упростить.

    Летать и строить. Строить и летать.

    22 декабря 2015 - 01:33 / #308
  9. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Finn, а какова тематика четвертой части?
    22 декабря 2015 - 01:39 / #309
  10. Оффлайн

    Silver

    Модераторы

    Сообщений: 2844

    Finn, да я так, хочу небольшой автопилот ракетный запилить, универсальный - за счет полуавтоматического режима - часть параметров устанавливать перед запуском конкретного пепелаца. На скрине как раз в процессе))
    Да запили большой объем, если что, вопросами засыпем
    Автопилот самолетный это интересно. Я для начала, хочу сам попробовать, а уже потом, если не сложно, скинешь мне свой, для препарирования?

    Gonzales_Gonzo, Lynx, благодарю вас! Смысл всей этой лабуды понял, почитал много литературы про неявное приведение типа, да остался при мнении, что это бредятина. Понятно, что все в итоге сводится к двум значениям: есть сигнал/нет сигнала, так зачем язык позволяет неявное приведение? Причем без практики работы с языком хрен поймешь логику работы. Должны быть явные операторы, для работы с переменными разных типов, чтобы можно было взглянув на программу знать, каков должен быть результат. Где-то в одной из книжек так и было сказано, что разработчики С превратили баг в фичу. Вот вот.
    Сообщение отредактировал Silver 22 декабря 2015 - 01:49
    22 декабря 2015 - 01:41 / #310
  11. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    Silver, смысл в том, что неявное приведение придумали для более практичных вещей, например чтобы при попытке переменной дробного типа присвоить значение целого типа не получить ошибку на ровном месте, а то что выше это так, побочный продукт и приятный бонус. А без практики работы вообще много хрен чего поймешь и это касается не только программирования.
    22 декабря 2015 - 02:19 / #311
  12. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    Ребят подскажите как быть.
    Задача простая: не превысить апоапсис при взлёте. Скажем на высоте больше чем плотные слои атмосфера РН летит с углом к горизонту 50 град на высоте 30км.

    нужно не превысить аоапсис, скажем 90км. Как запилить зависимость от апоапсиса, высоты крафта и при этом мы не можем выключить двигатель(одноразовый запуск - второго запуска нет) и тягой играться мы тоже не можем (unthroteble) - играемся только с углом к горизонту.

    С чего начать?

    Мне не код нужен, нужен сам смысл.

    Спс заранее)))
    22 декабря 2015 - 03:44 / #312
  13. Оффлайн

    Silver

    Хорошие люди

    Сообщений: 4334

    Ну, предположу что можно установить прямую зависимость от eta:apoapsis. Т.е. достигаем, к примеру апоапсиса 70 км, смотрим eta. Если мы продолжим жечь в прежнем направлении апоапсис и eta будут увеличиваться. Соответсвенно дискретно с небольшим шагом уменьшаем угол до того момента, чтобы eta перестал расти и начал с нужной скоростью снижаться, до нужного значения (я, например, при ручном выводе люблю 10 (макс. 15) секунд, с постепенным снижением до 3-5 с.
    Но это мнение дилетанта.

    Тоже есть вопрос, гораздо более идиотский:

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

    Но мне самому ясно, что это неправильно. (TANGLE - это переменная для heading(90,TANGLE). Изначально равен 90. GTA - высота начала гравитационного поворота, изначально - по условиям конкретно этой задачи - равна 1000)
    Сообщение отредактировал Silver 22 декабря 2015 - 05:03

    "История НАСА выглядит значительно логичнее, если рассматривать ее в обратном порядке. Нет пилотируемых аппаратов — низкие орбиты — Луна" (с) Al Dragon

    22 декабря 2015 - 04:52 / #313
  14. Оффлайн

    lis_vamp

    Посетители

    Сообщений: 71

    Silver, alt:radar зачем используешь? отсчёт атмосферы от sealevel т.е. можно просто altitude использовать
    alt:radar хорош при посадке...
    про твой "идиотский" вопрос
    перепишем немного
    не проверял, я по другому взлетаю.
    22 декабря 2015 - 11:57 / #314
  15. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    Silver, ну мыслишь правильно. Вот попытался попроще накалякать. Я не понимаю зачем ты используешь LOCK, с ним только запутаешься.

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

    Lynx, самое интересное. Прикладное программирование. Контроль Тягой, Тротрлом, Ноды, и всем остальным. К тому же уже можно без всяких циклов это давать тк. все остальной материал уже знают
    Сообщение отредактировал Finn 22 декабря 2015 - 12:26

    Летать и строить. Строить и летать.

    22 декабря 2015 - 12:05 / #315
  16. Оффлайн

    PAPIK-77

    Посетители

    Сообщений: 47

    Спасибо всем, пойду пробовать. )
    22 декабря 2015 - 12:51 / #316
  17. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

    PAPIK-77, кажется это очень серьезный вопрос, который нельзя показать на пальцах. https://ru.wikipedia.org/wiki/Оптимальное_управление

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

    Finn писал:
    Прикладное программирование. Контроль Тягой, Тротрлом, Ноды, и всем остальным. К тому же уже можно без всяких циклов это давать тк. все остальной материал уже знают
    Еще бы тему по алгоритмизации и принципам программирования, ПИД регуляторы там, а потом прикладные задачи.
    22 декабря 2015 - 20:51 / #317
  18. Оффлайн

    Finn

    Хорошие люди

    Сообщений: 1291

    Lynx, что конкретней имеешь ввиду. Больше конкретики и примеров.

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

    Я пока еще сильно не понимаю как работать с тэгами детелей (их ведь можно назначать) что бы их контролировать через кОС, а так же обращаться с этими деталями, т.к. Без этих знаний трудно делать всякие стыковочные вещи. И прочее.

    К тому же раньше помню была простая команда по выводу Дельты аппарата. Щас найти никак не могу... То ли самому писать через формулу Циалковского.

    Летать и строить. Строить и летать.

    22 декабря 2015 - 21:23 / #318
  19. Оффлайн

    Lynx

    Модераторы

    Сообщений: 2844

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

    Finn писал:
    То ли самому писать через формулу Циалковского.
    Ну если есть возможность получить УИ включенных движков, то это не очень сложно, но вот уже с учетом ступеней и несоосных двигателей это будет та еще программа.
    22 декабря 2015 - 21:39 / #319
  20. Оффлайн

    fumlead

    Посетители

    Сообщений: 59

    Finn, насчет тегов - там все очень просто.
    Например, так можно активировать антенну:
    LIST SHIP:PARTSTAGGED("Antenna") IN Antennas. //Все детали с тегом "Antenna" кидаем в новый список Antennas.
    FOR Ant IN Antennas {
    Ant:MODULES[0]:DOEVENT("Activate"). } // на самом деле спорный код, скорей всего не заработает так как мы берем первый попавшийся модуль детали
    Насчет дельты - посчитать по формуле Циолковского без проблем нужно.
    Если что, я могу помочь с написанием туториалов, в программировании шарю)
    22 декабря 2015 - 21:56 / #320

Статистика форума, пользователей онлайн: 1 (за последние 10 минут)

M. Gordon

Администраторы | Модераторы | Хорошие люди | Посетители | Новичок

Создано тем1933 Всего сообщений158043 Пользователей19232 Новый участникСпатик
Loading...

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