1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

Создание собственной прошивки: Ардукоптер на контроллере АПМ

Тема в разделе "Информация и полезные материалы по контроллеру", создана пользователем Alexey Kozin, 17 ноя 2015.

Реклама. Купить это место.
  1. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    Поскольку 3Drobotics отказались от поддержки новых версий ардукоптера для контроллера АПМ - можно сказать что теперь на этом шикарном "железе", используя хорошие части оригинального кода и убирая откровенно лишний функционал можно подчистить, подправить и получить стабильную и функциональную прошивку. Зная особенности и сложные в настройке функциональные модули - исправить и переписать. В результате будет прошивка может быть и не столь напичканая возможностями как Pixhawk но стабильная и надежная.

    Собственно первый шаг я уже сделал, вырезав из прошивки бинарные протоколы навигационных модулей и оставив универсальный NMEA освободил 20кб флеша (и есть еще ряд идей как отжать местечко. если оно понадобится). Это не означает что не будут поддерживаться модули юблокс или сирф. Все навигационные модули умеют работать в протоколе NMEA, нужно их будет только переключить.

    Прежде всего объектом всех бед в версии 3.2 был признан INAV - инерциалка. ардукоптер весьма капризен к настройке компаса, если аппарат собран слегка криворуко и компас показывает с ошибкой градусов в 15 то вместо того чтобы идти к цели по дуге соответствующей этому углу ошибки коптер делает в небе скоростные петли известные как toilet bowl тоесть туалетные воронки. Совместно с моими коллегами по резульатам наблюдений за поведением коптеров сделали предположение, что причиной непредвиденного поведения в удержании позиции может быть инерциалка, поэтому первое то было сделано - возможность ее выключения. Но как показала практика при отключении инерциалки из за разброса точек получаемых от жпс в режиме удержания позиции наблюдаются рывки.

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


    Навигационный фильтр.
    Фильтр называется KPEMF , расшифровывается как Parallel Estimations Median Filter
    состоит фильтр из системы прогнозирования массива вариантов местоположения текущей точки - (составляющих массив данных широты и долготы) и обычного но великолепного медианного фильтра.

    медианный фильтр готовится из алгоритма сортировки
    пример сортировки пузырьковым методом
    http://www.tigoe.com/pcomp/code/arduinowiring/42/
    void bubbleSort() {
    int out, in, swapper;
    for(out=0 ; out < numReadings; out++) { // outer loop
    for(in=out; in<(numReadings-1); in++) { // inner loop
    if( analogValues[in] > analogValues[in+1] ) { // out of order?
    // swap them:
    swapper = analogValues[in];
    analogValues [in] = analogValues[in+1];
    analogValues[in+1] = swapper;
    }​
    } }
    }
    и процедуры извлечения значения элемента оказавшегося в середине.
    в случае нечетного числа элементов
    median = analogValues[numReadings / 2];
    или среднего арифметического серединных элементов если размер массива -четный.

    но для работы этого фильтра нужен массив "параллельных" данных. Данные должны не запаздывать. В противном случае - фильтр будет запаздывающим.

    Итак для приготовления параллельных данных нужен массив навигационных приемников. Штук 10 -15... мда.. это громоздко и дороговато...
    пойдем другим путем... Создадим ряд данных прогноза позиции на основе предыдущих данных.
    к примеру при наличии истории координат за последние несколько секунд и исходя из предположения что коптер в ходе движения имеет непрерывную кривую ускорений
    при этом исходя из точки достоверного прогноза, позиции полученной исходя из округления двух последних сэмплов рассчитываем скорость характерную для этих данных и переносим проекцию перемещения относительно средней точки от среднего двух сэмплов (среднее создает задержку и требует коррекцию на S= Vt) с учетом полученной скорости
    подобным образом вычисляются прогнозы исходя из 3,4,5,6 сэмплов
    таким образом мы получаем массив "параллельных" данных из 6 прогнозов и 1 актуального значения GPS.
    К этим данным применяется медианный фильтр,
    после чего полученная медиана признается "достоверными данными" достоверные данные помещаются в массив и используются для нового цикла построения прогнозов
    собственно реализованный на ардуино алгоритм, при подаче на вход данных навигационного приемника работает примерно так:


    [​IMG]

    тоесть розовый тренд показывает "угловатые" сырые данные. желтым показан результат работы фильтра. Диаграмма указывает на то что фильтр обеспечивает сглаживание. причем при этом не происходит задержки.

    скриншот работы двух АПМ от одного приемника с фильтром и без
    noinav_gpsfilter907.jpg
    (чуть позже уберу под спойлер)

    Специфичные настройки фильтра kpmf.
    в полном списке параметров
    inav_tc_xy = 0 - отключение инерциалки по широте и долготе. не пытайтесь делать тоже самое на других прошивках, значение ноль применимо только к этой версии прошивки.
    GPS_navfilterPE =9 число паралельных пронозов - размер массива. допустимый зиапазон значений 3-19 значение по умолчанию 9. чем больше число прогнозов тем сильнее фильтрация, но больше латентность к ускорениям системы.
    GPS_navfilterSPD=5 число прогнозов при вычислении скорости. скорость используется для приращения расстояния при коррекции прогноза на время задержки. Диапазон 3-9 чем выше значение тем лучше фильтрация но хуже прогноз при ускорениях
    Отключение KPEMF
    отключение может понадобиться для сравнительного анализа, для просмотра сырых данных, поступающих с навигационного приемника.
    для отключения фильтра: GPS_navfilterPE =0

    Что мы имеем сейчас:
    собрана прошивка под апм2, выполнены первые облеты в ходе которых были выявлены приоритетные задачи и интересные комбинации параметров настройки.

    концепция высвобождения места во флеш памяти
    1. делим прошивку на две субверсии, функционал:
    тестовая
    • терминал
    • логирование всего
    • автотюн

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


    Новые фичи.
    После получения стабильной версии дополним функционал наиболее интересными и не затратными с точки зрения расхода флешь памяти новинками от свежих версий ардукоптера 3.3 и выше
    пока на заметке:a) PID scaling for battery voltage (disabled by default, see MOT_THST_BAT_ parameters)

    ps. все описанное выше не значит что я забрасываю проект f4by.
    все лучшее будет перенесено в наш 32 битный контроллер.
    На Pixhawk переносить не будем.
    по вопросу получения актуальной версии прошивки для участия в тестировании и обсуждении пишите на kozin@mail.ru

    Актуальная версия прошивки: 015а

    Актуальный, обновляемый в шапке файл параметров для тестирования:

    https://www.dropbox.com/s/ii5b6rmep8i3j6e/tstparam.rar?dl=0
    архив содержит файл параметров который можно загрузить через мишен планнер вкладка full parameters tree -> compare
    и файл с описанием для чего требуется тот или иной параметр изменить
    LOITER_LAT_D,0.001 -резкость разгона и торможения при борьбе с погодными условиями и воронкой за точность удержания позиции
    LOITER_LON_D,0.001 -тоже самое для долготы должен быть идентичным по умолчанию у ардукоптера значение 0

    WPNAV_ACCEL, 150 -допустимые ускорения 150 означает полтора метра в секунду за секунду. по умолчанию 100 что значит 1 метр в секунду за секунду


    LOITER_LAT_IMAX,40 -максимальный размер накапливаемой ошибки от внешних факторов, при ошибке компаса большие значения способствует возникновению воронки
    LOITER_LON_IMAX,40 -аналогичное по долготе по умолчанию 1000

    LOITER_LAT_P,1 -пропорциональный коэфициент между требуемым перемещением для удержания позиции и углом наклона рамы для этого перемещения
    LOITER_LON_P,1 -аналогичное по долготе по умолчанию 1. При вялости в лоитере возможно потребуется увеличить.

    INAV_GPS_XY_SPD, 5 -интесивность восстановления инерциальной скорости данными от жпс приемника, большие значения приводят к большему доверию жпс
    INAV_GPS_XY_POS, 8 -интенсивность восстановления инерциальной позиции данными от жпс приемника, большие значения приводят к большему доверию жпс

    INAV_GPS_DELAY, 3 - компенсация времени задержки выдачи координат жпс приемником в десятых долях секунды диапазон 1-5

    INS_MPU6K_FILTER, 10 -встроенная фильтрация вибраций силами процессора ориентации, значение по умолчанию 0,
    внимание! при значении 10 требуется перенастройка пидов стабилизации летательного аппарата. Если у вас нет возможности перенастроить пиды стабилизации оставьте этот параметр соотвествующим вашим пидам
     
    Последнее редактирование: 27 апр 2016
    Hanter, Xichnik55, raefa и ещё 1-му нравится это.
  2. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Не взлетел....
    Что-то у меня похоже глючит контроллер - про прошивка не заливается, то "бэд гирохэлт", то "бэд компасс хэлт". Наверное - придется менять контроллер на другой (проверю ещё парочку догадок, прежде чем дать окончательный диагноз).
     
  3. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    небольшое наблюдение
    я переставил на тестовую раму апм вместо f4by
    перенес пиды, оказалось что нужно понизить rate p по ролу и питчу,
    у 32 битных процессоров изза более высокой скорости пересчета держит пиды чуть повыше
     
  4. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Обратил внимание - отключение преармЧека - убрано? (хотел полетать без компаса - фиг)
     
  5. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    не, остальное не трогал
    без компаса совсем в лоитере не полтаешь (по крайней мере пока)
     
  6. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    да я понимаю про компас и лоитер. Хотел просто в стабе чуть-чуть полетать... :)
    Интересно, это только у меня нет отключения преарма - или было убрано в ходе эволюции (надо сходить, поискать версии изменений)
     
  7. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    я летал без компаса! летает так же как в старых прошивах. если правильно повернуть коптер перед включением (носом на север) то он прекрасно летает без компаса! Поэтому мне не совсем понятно Алексей ваша борьба с инерциалкой. Она очень даже нужна! А что нужно- так это обработку показаний компаса переделать! Возможно калибрацию компаса по GPS в полете а не на земле!
     
  8. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    боюсь что только у тебя, у меня есть :)
     
    5yoda5 нравится это.
  9. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    видимо компас энейбл надо выключать чтобы взлететь без компаса.
    летать можно , но недолго в зависимости от качества калибровки и самого мпу6000
    --- Сообщения объединены, 22 ноя 2015 ---
    естественный дрифт до 5 градусов в сек
     
    5yoda5 нравится это.
  10. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    У меня их три, на столе 2 градусa в минуту! Вполоне можно и без компаса летать. а если сделать калибрацию направления по GPS, то нафик компас не нужен!
     
  11. raefa

    raefa Главнокомандующий Команда форума

    Регистрация:
    3 янв 2015
    Сообщения:
    4.324
    Город:
    Zhigulevsk
    Имя:
    Александр
    Большая инертность будет.
     
  12. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    ок, не калибрацию, а постоянную коррекцию во время полета. Копас нужен только если от взлета до посадки коптер не летает а висит. но это специфический случай для которого можно позаботиться о качестве компаса. для всех остальных, полетных случаев компас нужен постольку поскльку. для самолета он не нужен вообще, самолет висеть не может....
     
  13. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    А опция Симпл?
     
  14. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    есть ли у кого планы полетать версию 5А на этой неделе или до выходных можно расслабиться?
    важно испытать поведение в лоитер. по идее должно быть дерганным но автоматически управляемым.
    есть вещь которую нужно будет подправить но для этой правки нужен лог полета 5а
     
  15. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Можешь и расслабиться :)
    Я полетаю на той 5А, которую выложил в субботу, но сначала решу что делать с "бэд компасс" - либо контроллер менять, либо модуль (компас) паять. Я денька на два точно в ауте.
     
  16. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    Я подключусь когда оптик флоу будет. А он вообще будет, Алексей?
     
  17. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Чего лично мне АДСКИ не хватает - так это комбинации стиков для калибровки компаса.
    Как сделано у назы - определенная комбинация - лампочки отморгались, начали танцевать с коптером. Калибровка закончилась, лампочки показали. Никакого компа брать не надо в поле, калибровка компаса на месте полетов - штатная процедура.
    Здесь, даже если есть проблемы с определением достаточности калибровки (я калибровку практически всегда останавливаю после танца, невзирая на предупреждения), опять зажать стики - и пущай контроллер сосчитает новые офсеты...

    Это вкусняшка-хотелка на развитие.


    Нашел :) Не на ту букву смотрел :)
     
  18. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    Так Алексей же хочет сделать так что бы компас можно было вообще не калибровать, что бы системе побарабану на компас было. Только он хотчет вообще инерциалку исключить, а я бы хотел калибровку компаса по GPS во время движения. Однако ктож меня спросит? :)
     
  19. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Облетал.
    Докладываюсь - максимально устойчивого результата, которого мне удалось добиться - это круг радиусом 5 метров.
    Причем наиболее приятные глазу результаты были с INAV_TC_XY (или как там оно правильно называется) - выкрученным на максимум.
    Разница при регулировке GPS_navfilterPE и GPS_navfilterSPD (тоже названия параметров звучат по-другому) была видна, но на фоне общего унитаза - меркла. Выкрутил оба параметра на 15 в итоге.
    Пробовал ставить Compass_use=0 - результат был скорее отрицательным. (вдобавок при следующем коннекте возникла моя "любимая" надпись "бэд компасс хэлт")
    Если INAV(XY) сделать на 0 - то при переходе на Лоитер коптер исполняет джигу как падающая монетка на месте, но потом зависает спокойно, а потом опять за унитаз берется.

    В итоге у меня ОТЛИЧНО держалась высота (но сегодня безветренно,так что тест неполный), но унитаз в горизонтали не был побежден.

    Подозреваю, что мне надо крутить Лоитер_Пид, я это не пробовал делать.

    Уточняющие вопросы? Может что-нибудь скинуть надо (конфиг-файл или лог одного из полетов)

    И ещё есть вопрос у меня. Когда я меняю параметры, мне необязательно перезагружать контроллер? А то я просто армил заново и взлетал каждый раз при смене значений.
     
    Последнее редактирование: 26 ноя 2015
    raefa нравится это.
  20. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Скачал лог на комп. Выкладываю что получилось. Почему-то все мои экспериментальные полеты "слились" в один полет, а я на одном месте летал раза 3-4, потом на другом месте летал раз 5. Программа полета следующая - арминг, взлет в стабе, переход на Лоитер, если куда-то тащит (а это было постоянно, только с разной амплитудой), возможно переход на Стаб. Когда надоедало - Стаб, посадка, дизарм. Тащу коптер на крышу машины, подключаю ноут, правлю что-нибудь, отключаюсь, опять иду летать.
    :) у меня в Стабе коптер висел лучше, чем в Лоитере :)
    Из-за глюка файла автоанализ ругается типа "возможно нарушенный файл лога".
    Посмотрел на автомате (памятуя разборки других логов) - соответствие высоты по баро и высоты по GPS - соответствие двух графиков - отменное (потому и держал хорошо высоту), плюс не было ветра (поэтому барометр не врал).
    ......
    Форум не дает загрузить, файл слишком большой (даже в архиве). Файл лога доступен по этой ссылке.
    И ещё попробую дать ссылку на загруженный файл в Ардуплоттер.

    Если нужен "чистый и красивый" лог - завтра после 16 схожу полетаю, сниму на ноуте лог ОДНОГО полета (чтобы не получилось как сегодня).
    Хотелось бы получить какие-то рекомендации по настройкам параметров.
     
    Последнее редактирование: 27 ноя 2015
  21. Alexey Kozin

    Alexey Kozin APM Guru Команда форума

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    вот версия 6a https://www.dropbox.com/s/4toppth6tscm5oa/ArduCopter V3.2_KPEMF_v6a.rar?dl=0
    нужен такой тест
    фильтры нужно минимизировать GPS_navfilterPE = 5 и GPS_navfilterSPD = 5
    inav_tc_xy = 2,5

    в разделе inav появился новый параметр отдельно регулирующий уход скорости инерциалки (изза которой возникает туалетная воронка)
    inav_gps_xy_spd по умолчанию он 2 это значит что для того чтобы скорость накапливаемая из ускорений не уплывала ее нужно подтягивать к скорости идущей с жпс.
    логично будет попробовать со значениями от 1 до 2 (при больших значениях что то странное, надо еще раз проверить код)
    если изначально будет себя вести адекватно - желательно обратить внимание при каких значениях начнутся рывки

    прошивка не летаная, поосторожнее плиз
    --- Сообщения объединены, 27 ноя 2015 ---
    тут ошибочка. парметры жпс фильтра обновляются после перезагрузки.
    лог перезаписан, нет параметров в начале..
    --- Сообщения объединены, 27 ноя 2015 ---
    это очень интересно
    он джигу делает на одном месте ? его не мотает в радиусе 5м?
     
    Последнее редактирование: 27 ноя 2015
    5yoda5 нравится это.
Реклама. Купить это место.