PDA

Просмотр полной версии : Автопилот с помощью DeviceLink



VVV
07.06.2004, 20:13
Товарищи вирпилы.

Я тут забавлялся с DeviceLink и написал простенький автопилот, который может поддерживать постоянный уровень тангажа, или работать как автомат горизонтального полета. Если это кому-нибудь интересно, я мог бы выложить программку.

Виктор ( =SF=BELLA-RUS )
07.06.2004, 20:17
Выкладывай
в хозяйстве всё сгодится )

Satori
07.06.2004, 20:19
Типа, читерим уже? )
Зря МГ автопилот истребителям отключило одной рукой, а другой ДевайсЛинк дало.

Avc
07.06.2004, 21:07
Хех, не только я один от выходных страдаю :)
У меня уже сам взлетает, теперь нужно как раз добавить "держание" курса и тангажа. Так мы быстренько до боев AI дойдем :) Хотя kedik это только на 2006 запланировал: http://sukhoi.ru/forum/showthread.php?t=24435&page=4&pp=25

Жалко только глюков много в протоколе - не работает получение состояния закрылок, триммеров элеронов и prop pitch. Может еще чего, пока все не проверял так как вожусь с одномоторным Яком.

SL PAK
07.06.2004, 21:49
Очень нужен автомат горизонта для истребителей. Для тестов.

Avc
07.06.2004, 22:20
Товарищи вирпилы.

Я тут забавлялся с DeviceLink и написал простенький автопилот, который может поддерживать постоянный уровень тангажа, или работать как автомат горизонтального полета. Если это кому-нибудь интересно, я мог бы выложить программку.
Какой алгоритм используется? Я вот пытаюсь прикрутить простейший PID на крен и рысканье что бы взлетал автопилот сам, но пока никак коэффициенты не подберу.
Как доделаю выложу исходники. Никогой графики не будет - все в консольном окне - у меня второй комп под *nix работает в основном, так что M$ прикручивать нет желания. Доделаю еще возможность писать простенькие скрипт файлы - какой параметр мониторить, управление и тому подобное.

Виктор ( =SF=BELLA-RUS )
07.06.2004, 22:21
Очень нужен автомат горизонта для истребителей. Для тестов.
Точно , далеко не каждый самолёт можно отриммировать так чтобы он продолжительное время ровно летел .

VVV
07.06.2004, 23:36
Выкладываю. Инструкция следует.

VVV
07.06.2004, 23:53
Инструкция.

Имеется два режима: горизонтального полета и постоянного угла тангажа, которые включаются кнопками джойстика (по умолчанию 7-й и 8-й), повторное нажатие выключает автопилот. Во втором режиме автопилот пытается поддерживать угол тангажа, который был на момент нажатия кнопки. Джойстик опрашивается каждые 100 мс, так что слишком короткие нажатия могут быть пропущены.

Порт UDP у Ил-2 должен быть 10000. Никаких предосторожностей при работе с UDP не предпринимается, так что включать автопилот можно только во время вылета и обязательно нужно выключать до его окончания, иначе программа зависнет, ожидая ответа на запрос (исправлено).

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

To AVC:
Алгоритм простой – следящая система с ФНЧ первого порядка в цепи обратной связи. Коэффициент усиления и постоянную времени фильтра подбирал на глаз.

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

SL PAK
08.06.2004, 00:20
Аааа! Мною управляют! :eek: :o :D

SL PAK
08.06.2004, 00:29
А как летать то с этим? Он класно первым делом вводит в штопор :D

SL PAK
08.06.2004, 00:33
Внимание! Это программа опасна для головы! :D Аааа.... :o

UShAG_Energy
08.06.2004, 11:15
Прикольно, только сразу в штопоре :)

ET=Mitya
08.06.2004, 11:19
Инструкция.
To AVC:
Алгоритм простой – следящая система с ФНЧ первого порядка в цепи обратной связи. Коэффициент усиления и постоянную времени фильтра подбирал на глаз.

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

Что за постоянная времени фильтра? Период между замерами? Недопонял.

VVV
08.06.2004, 12:16
Прикольно, только сразу в штопоре :)

А при отключенном автопилоте нормально управляется? В штопор должен сваливаться при большом угле атаки и малой тяге. В режиме горизонтального полета валиться не должен.

VVV
08.06.2004, 12:37
Что за постоянная времени фильтра? Период между замерами? Недопонял.

Частота дискретизации Fs=1/100ms=10Hz. Фильтр синтезировался с нормированной полосой пропускания wc=0.1, отсюда полса пропускания фильтра в герцах: Fc=wc*Fs/2=.5Hz. Следовательно характерное время переходных процессов в фильтре T=1/Fc=2s.

aeropunk
08.06.2004, 12:58
включать автопилот можно только во время вылета и обязательно нужно выключать до его окончания, иначе программа зависнет, ожидая ответа на запрос.


А нафига вообще такие программы нужны?
Оно у тебя работает синхронном режиме запрос-ответ?
Ты что-нибудь слышал о неблокирующих сокетах?
Ты внимательно читал описание DeviceLink?

"The external application sends a query packet, in reply, IL2 sends back one (or several) packets containing the query result."

Куда ни плюнь, попадешь в праграместа. :(

aeropunk
08.06.2004, 13:13
Как только не стыдно выставлять подобную халтуру на всеобщее обозрение? :(

grun
08.06.2004, 13:24
интересно а в самой игре автопилот работает честно? я имею в виду стабилизация движения происходит только из-за воздействия на управляющие поверхности? уж больно он хорошо из всяких штопоров выводит - если это не так - то твой VVV единственный честный ;)

ЗЫ можешь выслать исходники приватом?

aeropunk
08.06.2004, 13:40
Всем великим программистам открываю страшную-престрашную тайну. Эту тайну не знают только в яслях, в детском саду это уже известно всем.

UDP не гарантирует доставку пакетов.

UShAG_Energy
08.06.2004, 14:06
А при отключенном автопилоте нормально управляется? В штопор должен сваливаться при большом угле атаки и малой тяге. В режиме горизонтального полета валиться не должен.
Похоже, он по-дефолту включен, когда вылетаешь в простом редакторе...

UShAG_Energy
08.06.2004, 14:08
UDP не гарантирует доставку пакетов.
От Алеза приблуда-то работает нормально... Хоть и без гарантии доставки пакетов :)

aeropunk
08.06.2004, 14:12
От Алеза приблуда-то работает нормально... Хоть и без гарантии доставки пакетов :)

Исходников UDPSpeed я не видел, но судя по поведению этой программы, ее автор (я так и не понял кто это Алез или Хрюкс) не настолько наивен, чтобы блокировать выполнение всей программы в ожидании UDP-пакета.

Alezz
08.06.2004, 14:22
Исходников UDPSpeed я не видел, но судя по поведению этой программы, ее автор (я так и не понял кто это Алез или Хрюкс) не настолько наивен, чтобы блокировать выполнение всей программы в ожидании UDP-пакета.
Оба :)
Нет пакета, ну и фиг с ним, пришел- обрабатываем

aeropunk
08.06.2004, 14:33
Оба :)
Нет пакета, ну и фиг с ним, пришел- обрабатываем

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

tahorg
08.06.2004, 15:41
А вот по мне правильней было б всеже такие режимы
1) Удержание высоты
2) Удержание курса
3) Удержание вертикальной скорости
4) Автомат тяги (удержание приборной скорости)

А может я просто привык к Ту154Б в МСФС %)

VVV
08.06.2004, 16:20
А нафига вообще такие программы нужны?
Оно у тебя работает синхронном режиме запрос-ответ?
Ты что-нибудь слышал о неблокирующих сокетах?
Ты внимательно читал описание DeviceLink?
(

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

И вообще какой смысл сейчас ковыряться с программой, если алгоритм управления работает кое-как? Меня сейчас гораздо больше интересует, работает ли система управления на других компьютерах, как она себя ведет с разными самолетами и т. п.

VVV
08.06.2004, 16:22
Похоже, он по-дефолту включен, когда вылетаешь в простом редакторе...

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

aeropunk
08.06.2004, 16:51
Чего кричать-то. Для тестовых целей этого достаточно, а исправить проблему - несложно.

И вообще какой смысл сейчас ковыряться с программой, если алгоритм управления работает кое-как? Меня сейчас гораздо больше интересует, работает ли система управления на других компьютерах, как она себя ведет с разными самолетами и т. п.

Обмен данными по UDP с DeviceLink неизбежно является частью петли обратной связи. У тебя принципиальная ошибка в организации петли обратной связи, т.е. именно в твоем алгоритме управления. Т.о. ты и тестирование строишь неграмотно. Читаешь только первый ответный пакет. Второй возможный ответный пакет на первый запрос считаешь ответом на второй запрос. Получается полная лажа. То, что это частично сработало - удачное стечение обстоятельств. В следующем патче могут возвращать каждый параметр отдельным пакетом - имеют право, описанию протокола это не противоречит. Пока не организована асинхронная работа с сокетами, ни о каком грамотном использовании/тестировании DeviceLink не может быть и речи.

SL PAK
08.06.2004, 17:23
Да нет, выключен. Если все настроено правильно, то если программа не запущена, самолет вообще джойстиком управляться не должен. Запускаешь программу - появляется управление. Нажимаешь кнопку - включается автопилот.
Всё так и делал. С bf109e4 вытворяет такое:
Если автопилот в "нормал", то сразу после загрузки миссии рвёт РУС насебя-влево - штопор.
Если успеть (доли секунды после загрузки миссии) нажать "левел", то медленно но верно переворачивается и похоже пытается держать горизонт вверх ногами. Земля стремительно приближается.
Настройки сложности "как в жизни", оси х и y пустые.

:: В меню сеть у меня: 9600.

VVV
08.06.2004, 17:59
Читаешь только первый ответный пакет. Второй возможный ответный пакет на первый запрос считаешь ответом на второй запрос. [/i]

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

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

VVV
08.06.2004, 18:00
Всё так и делал. С bf109e4 вытворяет такое:
Если автопилот в "нормал", то сразу после загрузки миссии рвёт РУС насебя-влево - штопор.


Кажется понятно, неправильно определяю центральное положение джойстика. Сегодня переделаю.

aeropunk
08.06.2004, 20:17
Легко проверить, сколько возвращается ответов на каждый вопрос. Но похоже все-таки один, потому что у меня последовательно опрашиваются углы крена и гангажа, и если бы возращалось несколько ответов, значения перепутались бы.

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

Ребенок! Какой ребенок! Чистый, невинный, непорочный!
Он еще не знает, чем заканчивается программирование, основанное на особенностях конкретных реализаций. Уверен, он даже не проверяет коды ошибок. Его мир прекрасен и безоблачен.

Прости, дитя мое, старого занудного воробья. Ступай по избранной тобой дороге. Всему свое время.

Radik
08.06.2004, 23:36
Воробей, ты не ругайся, а подскажи как надо. Не губи начинание на корню. Так и охоту можно отбить.

SL PAK
08.06.2004, 23:50
Нашёл в чём проблема была. Надо DeviceLinkAutopilot запускать после Ила. Тогда всё работает даже с неотключёнными осями - тока прожка пугается немного когда я РУС шевелю :D Правда чтоб запустить автопилот надо из Ила на рабочий стол выпрыгивать - тут то моему фитбеку и капут приходит.. :( Ну да и ладно - для тестов мне этот фитбек по-барабану. СПАСИБО! :D

:: Если запускать до Ила, то целеустремлённо ведёт самолёт к земле, хоть и не так остервенело как в предыдущей версии :D

Avc
09.06.2004, 03:05
Вот моя попытка использовать DeviceLink: http://www.avcsite.ru/bin/il2dl.zip

Вкратце чего эта штука делает. При запуске il2dlD.exe читает файл dlpars.il2 в котором должны быть описаны ключи протокола DeviceLink (вот написал и сразу подумал что умолчательное имя нужно будет в dlkeys.il2 переделать). Потом читает файл il2.ai - это скрипт чего программе делать с самолетом. Если умолчательные имена не нравятся, то можно задать их через параметры в командной строке, как - скажет il2dlD.exe если запусить ее с параметром -?. (по секрету скажу что это il2dlD.exe script_file keys_file).
В скрипте поддерживаются многие команды - все подробности описаны в комментариях самого скрипта (звиняйте что на аглицком, если кому-то программа будет интересна, а с аглицким напряг, то скажите - сделаю и по-русски).

В качестве примера прилогаются два скрипта:
il2.ai - пытается "взлететь" самолет стоящий на взлетной полосе. В архиве лежат две миссии - TakeOff Yak-9 и TakeOff La-7. Добавте любую миссию себе в IL2FB, запустите ее, установите камеру сзади самолета чтобы было лучше видно, а потом на втором компе запустите "il2dlD.exe il2.ai". Если в il2.ai вы выставили IP адреса и порт правильно, то по идее самолет должен завестись и взлететь. Я в основном отлаживался на Як-9. Примечание - из-за того, что не все еще пока в скриптовом движке реализовано, этот скрипт жестко привязан к прилагаемым миссиям, а именно к альтитуде, на которой убирать шасси, закрылки и передавать управление настоящему автопилоту IL2FB.

monitor.ai - запустить в IL2FB любую миссию, поставить самолет на автопилота и потом запустить "il2dlD.exe monitor.ai" - опять же, если в monitor.ai адреса и порт указаны правильно, то начнет выводить каждую секунду на экран значения, указанные в скрипте.

Если кого-то это заинтересует и будут замечания-предложения, то пишите. Просьба ногами сильно не бить - писалось за полтора дня из кусков различных программ так что глюки просто обязаны быть. Если будет интерес и время - программа будет развиваться. Уже есть куча идей по расширению скриптов, например, загрузка внешних PID алгоритмов из dll. У меня работало на XP Pro, на остальном не проверял.

VVV
09.06.2004, 19:13
Обновление. Теперь работает в неблокирующем режиме.

zigzag74
02.08.2004, 19:16
Господа , AVC , особенно , ради бога , расскажите , можно ли , и если можно - то хотя бы в общих словах как ? организовывать подобный обмен данными используя стандартные средства Дельфи 5..6 ? Блин , я хочу свой тренажёр запустить под Ил - 2 . А лепил его под FSUIPC MSFS 98 ..2004 . Там всё так просто описанно было , и примеры даже на дельфях ....

Hruks
02.08.2004, 23:03
Господа , AVC , особенно , ради бога , расскажите , можно ли , и если можно - то хотя бы в общих словах как ? организовывать подобный обмен данными используя стандартные средства Дельфи 5..6 ? Блин , я хочу свой тренажёр запустить под Ил - 2 . А лепил его под FSUIPC MSFS 98 ..2004 . Там всё так просто описанно было , и примеры даже на дельфях ....
Можно. UDPSpeed (где-то в соседней ветке) именно на дельфях и написан. Я в аську стукнулся. Если что - пишите приватом или мылом - помогу чем смогу.

zigzag74
03.08.2004, 13:11
:-)
Ещё бы на исходники одним глазом глянуть .....
Дело в том , что мне графическое представление вообще не нужно , а вот протокол обмена , работающий к томуже :-) - бесценное подспорье в создании собственной программки
Помогите пожалуйста , люди добрые.....

zigzag74
03.08.2004, 13:13
Хрюкс , мы с тобой ещё и одногодки.... если что - может на ты перейдём ?
Жаль только что далековато живём друг от друга , а то бы приехал ты ко мне , поюзал тренажёр , пивка бы попили :-)

Avc
24.08.2004, 18:01
Господа , AVC , особенно , ради бога , расскажите , можно ли , и если можно - то хотя бы в общих словах как ? организовывать подобный обмен данными используя стандартные средства Дельфи 5..6 ? Блин , я хочу свой тренажёр запустить под Ил - 2 . А лепил его под FSUIPC MSFS 98 ..2004 . Там всё так просто описанно было , и примеры даже на дельфях ....
Я тут уезжал на месяц, даже как-бы частично в отпуск, поэтому и не ответил сразу, а сейчас уже наверное поздняк метаться :p Только вот с Дельфи у меня практически никак - сам пишу все на Visual C++. Если что - стучитесь в аську, я обычно доступен с 9 до 18 по Гринвичу.