ArduPilot 2.8 beta 1 Тестирование, обсуджение
Предагаю опробовать и у кого есть возможность облетать в симуляторе
В мае 2010 разработчики ардупилота мини забросили проект так и не выпустив релиз 2.8, полностью переключившись на мега версию, но миру они оставили исходники. Собрав исходники и библиотеки удалось сделать сборку которая компилируется и оттестирована по ряду параметров:
- радио (и не дрожит и отзывчиво)
- серво - отрабатывает идеально, не перегружает проц
- работа с ИМУ - принимает данные GPS и сенсров
- стабилизация - четко отрабатывает наклоны иму
- Использована библиотека FastSerial с поддержкой буферизации
полеты в эмуляторе и все что дальше не тестил.
- Особенности: перед заливкой кода сохраните ваши библиотеки в папке arduino и замените их на прилагаемые
- Код построен на основе классов которые легли в основу ИМУ 1.8.2 и Ардупилот МЕГА
- Какой то новый режим “конфиг”
т.к. это бэта то файлы разместил у себя, буду исправлять и дорабатывать
выложено тут
зы. не пишите в личку, ящик очень маленький, быстро переполняется,
замечания и предложения по возможности пишите тут
Да, большая работа! Как будет время обязательно по тестирую, как раз мне Bixler пришел под это дело.
Еще бы в коде ИМУ поменять барометр SCP1000 на более распространенный BMP085.
Была поставлена задача облетать в авиасимуляторе Xplane
Недельные усилия не прошли даром.
Как я полагаю та версия ArdupilotSim которая должна являться мостиком между ардупилотом и симулятором на офф сайте ардупилота была утрачена и на ее место попала битая редакция,
которая некорректно читает получаемые через компорт данные.
По аналогии с ардупилотом 2.8 были откопаны исходники Michael Oborne, но видимо версия была не совсем последняя, найдены и устранены ошибки преобразования байт-в-инт, после устранения которых удалось создать летабельную прогу. Попутно обнаружено что в Ardupilot 2.8 напрасно умножаются значения сервооут на 100, при этом тип инт переполняется и поступательное увеличение отлонения джойстика выдает пилообразную осцилограму
в ардупилоте 2.8, модуле cgs_xplane надо так:
Serial.print(“AAA”); // Message preamble
output_int((int)(rc_1.servo_out)); // 0 bytes 0,1
output_int((int)(rc_2.servo_out)); // 1 bytes 2,3
output_int((int)(rc_3.servo_out)); // 2 bytes 4,5#if CH4_RUDDER == 1
output_int((int)(rc_4.servo_out)); // 3 bytes 6,7
#else
output_int(0); // 3 bytes 6,7
#endif
для полета в xplane понадобится
- сам симулятор,
- приложение googleearth,
- исправленная версия ArdupilotSim
попробовал режим ручного управления, стабилизацию и посадку.
в режиме стабилизации какой то странный эффект при тангаже близком к вертикальному - какоето вращение, но при попытке сорваться из любого положения выравнивает модель моментально и безупречно.
сейчас тестирую на аналоговом приемнике и в состоянии когда у пульта села батарея приемник выдает хаотические запредельные импульсы, а ардупилот не фильтрует, это большая проблема для тех у кого приемник без файлсейф, думаю надо перекопать модуль “радио” и вставить на этот случай программное определение потери передатчика и установку безопасных значений.
Собственно в симуляторе выбрал аэропорт домодедово, взлетел в режиме стабилизации, а затем переключился на Land, ожидая что он вернется откуда взлетел, однако он полетел в сторону подмосковной дачи, эту точку я задал давным давно из миссион планера. Жаль я ожидал что при запуске он определит координаты точки старта и режим LAND приведет его туда ((
тем не менее это дало мне представление о том что не только стабилизация в моей бэте исправна но и навигация.
вобщем, если кому интересно полетать через мини ардупилот и свой пульт в Xplane - обращайтесь, - попробую скомпилировать релиз ARDUPILOTSIM с комплектом библиотек и настроек
сейчас тестирую на аналоговом приемнике и в состоянии когда у пульта села батарея приемник выдает хаотические запредельные импульсы, а ардупилот не фильтрует, это большая проблема для тех у кого приемник без файлсейф, думаю надо перекопать модуль “радио” и вставить на этот случай программное определение потери передатчика и установку безопасных значений.
У себя определил 4 состояния приемника без файлсейва: 1. когда приемник включается раньше передатчика - pwm из модуля radio (как я понял это и есть исходный сигнал с третьего канала, исходнее ничего не нашел) растет от 1100 до 32763 через 5 и дальше по кругу с 0; 2. при выключении передатчика pwm гонит последнее значение; 3. когда передатчик, после выключения, включается с каким то переключателем не в исходном состоянии (передатчик Turnigy 9X, на экране Свитч эррор), pwm начинает считать где то с 500 - 700, всегда по разному, до этого было последнее значение. Судя по 3-му состоянию ардупилот как то определяет факт восстановления связи, хотя передатчик в этот момент ничего еще не передает. Соответственно может определить и момент потери связи; 4. когда передатчик включается штатно pwm принимает текущее значение с передатчика.
Кстати, проблема и с приемниками у которых файлсейв устанавливается по всем каналам одновременно, при файсейве он срабатывает еще и по каналу управления автопилотом и переключает его в состояние которое было при настройке файлсейва, например в Мануал.
А в Xplane полетать конечно интересно!
а это все под какое железо? на мультивий можно поставить этот скетч? где вообще почитать про этот ардупилот мини?
это под маленький вариант ардупилота, тот который предшествовал “ардупилоту мега”
плата выглядит так:
официальная страница проекта code.google.com/p/ardupilot/wiki/ArduPilot
тут мои изыскания в целях сделать толковую инструкцию как все это можно использовать
хорошая новость, дидроновцы не забросили проект
Джорди анонсировал выход платы сенсоров v3 diydrones.com/…/arduimu-v3-is-finally-here
с крутым цифровым процессором движения и 3д компасом
пишет что осталось немного дописать код и вскоре устройство появится в продаже, доступен предзаказ
Слепил Ardupilot 2.8 beta 6, в основном отладка и доработка замеченных в симуляторе “кривостей” полета
пока не разобрался почему не работает алгоритм названный crosstrack, сделал замену ослабление пидов на малом удалении от вэйпоинтов и усиление на маршруте, это позволило избежать “осциляции” на резких маневрах изза высоких пидов, устраняет скачки и резкие маневры вблизи вэйпоинта но в тоже время на маршруте не допускает ошибки по курсу больше нескольких долей градуса и доли метра по высоте (до этого его мало волновала ошибка по высоте в десяток метров и пара - тройка градусов по курсу), что в симуляторе обеспечивает гарантированное проходжение “rc_model” точек маршрута с радиусом 5м (по умолчанию в утилите 20 и старые прошивки умудрялись не попадать)
попробовал цессну, оставил в ардупилоте для нее те же настройки (стоковые пиды и скорость), только усиление по каналам в ardupilotsim увеличил на 20% (800, 8000,8000,8000 обычная rc модель и 600, 6000, 6000, 6000 cessna ) несколько увеличил расстояние между вейпоинтами ибо всетаки он неповоротлив - результат замечательный, взлетает проходит маршрут и мягко садится четко на полосу.
Ах, да сделал нормальный “Ландинг” теперь он для посадки берет не абы-какой курс который у него случился на последней точке маршрута в силу воздействия внешних факторов а взлетный, важно лишь поставить последнюю маршрутную точку на курсе, на глиссаде. убрал подскок, который был вызван единоразовым изменением тангажа на посадочный (+10:+15 градусов) теперь тангаж плюсуется по мере необходимости (при привышении вертикальной скорости 20см/сек)
единственное но, это только симулятор…
изза погоды все никак не решусь летнуть по-настоящему
Алексей, а в прошивке ардупилота 2.8 Remzibi OSD будет поддерживаться?
в принципе единственная проблема - лишь бы памяти хватило, но после удаления термофилов пара килобайт освободилась
Здорово, хотелось бы использовать арудупилот в комплексе с OSD. Пока, если позволит погода, в выходные планирую облет ArduPilot_2_7.1_no_tremor + Remzibi
замечательно, буду благодарен если опубликуете результаты,
а я постараюсь ремзиби интергрировать к этому времени
Из учебника мы о посадке самолёта знаем следующее:
Посадка является завершающим этапом полёта и представляет собой замедленное движение самолета с высоты 25 м до полной остановки после пробега по земле. Посадка самолета, как правило, состоит из следующих этапов :
- планирования (снижения);
- выравнивания;
- выдерживания;
- приземления (парашютирования);
- пробега.
Тут наверное попроще, модель снижается с определённым тангажом до касания земли? А что дальше? Момент касания как-нибудь определяется автопилотом? И ещё интересно двигатель в какой момент отключается?
я слыхал от авторитетных летчиков другую версию, “посадка это прерванный уход на второй круг” 😃)
но применительно к существующим версиям модельных автопилотов это не так
исходя из моего понимания кода и тестов в симуляторе:
логика перекочевавшая из 2.7 в 2.8 beta 1 заключалась в том что выйти на последнюю маршрутную точку по высоте и курсу
при расстоянии до последней маршрутной точки заданной в константе SLOW_RADIUS устанавливается уровень газа из константы THROTTLE_SLOW
при достижении расстояния THROTTLE_CUT_RADIUS вырубается газ
при достижении расстояния “радиус вейпоинта” (задается в configtoolglobal и сохраняется в eeprom) устанавливается кабрирование LAND_PITCH ( по умолчанию 15 градусов) что сначала приводит к подскоку при высокой скорости
далее выдерживается этот тангаж что обеспечивает гашение скорости. если последняя точка слишком высоко то сначала вертикальная скорость минимальна, но потом растет, в момент планирования идет стабилизация по крену, при потере скорости иногда несколько колбасит
что касается курса то его в 2.7 версии автопилот запоминает при достижении последней точки, если в этот момент модель заходила по кривой то посадка будет не на полосу а фиг знает куда.
в разрабатываемой версии 2.8 в бэта 6 сделал запоминание курса для посадки на стадии взлета по курсу home-> 1 точка и убрал подскок при посадке тем что задаю посадочный тангаж не единовременно постепенно а в зависимости от вертикальной скорости по жпс
впоследствии думаю задействовать сонар и интенсивно гасить вертикальную скорость лишь на последних паре метров
устанавливается кабрирование LAND_PITCH ( по умолчанию 15 градусов) что сначала приводит к подскоку при высокой скорости
Ага, понял теперь, что за маневр перед снижением на рисунке из поста #13.
Я вот ещё, что подумал, а можно ввести в код автопилота команду на автоматическое отключение двигателя при условии снижения ну скажем менее 20м? На тот случай, если модель вдруг упадет в кусты, что бы движком не молотила. Точнее это условие должно, наверное, выполняться при удалении от точки старта более 200м и высота ниже 20м.
не, в посте 13 этот бугорок это набор высоты до высоты взлета, потом снижение до первой маршрутной точки, круг и плавный заход на посадку,
на рисунке изображена правильная посадка, без подскока
ясно, т.е. самолет взлетал справа налево, а я думал наоборот 😃
тут hobby.msdatabase.ru/…/ardupilotsim я выложил более подробные картинки исправленного захода на посадку 2.8 версии,
подскок по 2.7 к сожалению не сохранил
летные испытания 2.8 показали что стабилизация работает превосходно,
но полноценно облетать авторежим не удалось, забыл откалибровать газ,
заданное по умолчанию значение 600 в канале газа оказалось крайне мало для используемой нами модели
в процессе испытаний не могли понять почему такой малый газ в авторежимах
при наземном анализе оказалось что заданное по умолчанию значение THROTTLE_MAX 600 дает лишь половину от максимального ручного газа
и возможно стало причиной проблемы.
для пробного полета рекомендую установить следующие параметры:
#define THROTTLE_CRUISE 700 // 1000 = trottle max Default throttle value - Used for central value.
#define THROTTLE_MAX 1000 // 1000 = 100 percent of trottle stick Throttle (lower this if your plane is overpowered)
проверить можно отклонением сервы подключенной в канал газа
она должна отклоняться в режиме takeoff на такой же угол как и в ручном при одинаковом положении стика газа