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. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Блин, что за невезуха.
    Сегодня решил полетать на стадионе (пока оттуда не попёрли), откалибровался на месте через телеметрию (наверное в этом ошибка была), компассмот делать не стал (или тут ошибка - но вряд ли). Короче попытался взлететь - не канает. Получается жесткая раскрутка по кругу, как монетка крутится.
    Несколько раз пробовал, откалибровал аксели от безысходности - все бестолку. Не то что в стабе - даже в акро взлететь не смог. :confused:
    Пока дежурная версия - глюк РУ. Хотя тогда непонятно, как армилось - дизармилось....
    Значит гироаксель сбрендил...
    Выкладываю всё что есть, сижу сейчас, ковыряю логи - пытаюсь понять что это было.... o_O

    .....
    Как будто получается, что у меня руддер бесился? (я его вообще не трогал) Я правильно прочитал логи?

    .....
    Прикол за приколом. Сейчас подключаюсь к МП - пытаюсь армиться, пишет РУ не калибровано!
    Наверное надо скачать МП какой-нибудь версии 1.3.30, залить через него прошивку и через него же настраивать....
     

    Вложения:

    • logs.zip
      Размер файла:
      103,4 КБ
      Просмотров:
      2
    • rlog_tlog.zip
      Размер файла:
      679,3 КБ
      Просмотров:
      1
    Последнее редактирование: 16 дек 2015
  4. Alexey Kozin

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

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

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Использовал только МП 1.3.25 - им прошивку заливал и им же сегодня калибровал на стадионе.
    Качаю 1.3.30 - буду его использовать.
     
  6. Alexey Kozin

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

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

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    Может виновата мощща? в настройках вчера ставил силу сигнала на максимум.
    Но правда - слетели параметры....
    Просто, когда я его дома включил и заармил, но не подключил к МП - он вообще даже светиками статуса 123 не моргал.... Только индикация передачи по порту шла.... Хотя и модем и ОСД были выдернуты из порта.
    Ладно, посмотрим, может завтра что-то получится...
     
  8. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    пытался найти закономерность наблюдая за курсом получаемым из векторов инерциальной скорости сравнивая его с жпс курсом. из лога полета 11 прошивы.
    пока неутешительно. по крайней мере постоянной ошибки которую можно трансформировать в вычисляемую ошибку компаса нет
    смотрел данные при скорости от 1 мс.
    единственное в среднем за полет вышло значение
    -10.4 градуса разницы т.е. что компас закручен был по часовой на 10 градусов
    скриншот публиковать не буду, диаграмма узкоспециализированна.
    завтра попробую посчитать тоже самое но исходя не из скорости а из ошибки координат инерциалки и жпс
     
    5yoda5 нравится это.
  9. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    сегодня удалось подобрать ключик к логу летаному на 010 прошиве и посчитать среднюю ошибку между курсом жпс и инерциалки
    и на одном интересном месте найти разницу во времени перемена курса инерциалки и жпс (т.е) вычислить задержку жпс.
    по результатом вышла средняя ошибка жпс на тот момент -11 градусов
    задержка данных жпс 0,3сек
    compasserrorcalc.jpg
    красненькое - ошибка компаса
    фиолетовая "пила" курс меняется от 0 до 360 по жпс и инав.
    иногда "выбросы" изза отставания жпс данных от инав
     
    5yoda5 нравится это.
  10. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.229
    Город:
    Абакан
    Имя:
    Вячеслав
    Алексей, а какова точность GPS? Какой радиус погрешности?
     
  11. stenko

    stenko Абитуриент

    Регистрация:
    26 мар 2015
    Сообщения:
    11
    Город:
    Белая Церковь
    Имя:
    Влад
    присоединюсь и я к тестированию если разрешите.
    сегодня полетал на 11 прошивке.
    только прошил ничего не меня. летал только в альтхолде, лоитер не переключался по причине что gps не стабильно работал, хотя на прошивка с МП такого не было.
    прикреплю логи.
    напишите что именно надо настроить для тестов, и что пробовать в полете.
     

    Вложения:

    Alexey Kozin нравится это.
  12. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    по данным производителей величина точности ходовых модулей юблокс 6-8 и мтк 3333 и 3339 составляет 2,5м
    теоретически 2,5 нужно умножать на HDOP , но практически это правило работает наверное только в США и и Израиле
    в РФ иУкраине в практических тестах статическая ошибка в 2,5м может наблюдаться при HDOP 0,6
    по наблюдением за медиатеком навигационные модули комфортнее себя чувствуют на скорости, производители утверждают о присутствии а статике какого то эффекта "наката"
    я пытался разобраться но толковой инфы не нашел.
    --- Сообщения объединены, 17 дек 2015 ---
    сообщите модель навигационного модуля который используете, фотки монтажа приветствуются
    --- Сообщения объединены, 17 дек 2015 ---
    отлично!
     
  13. stenko

    stenko Абитуриент

    Регистрация:
    26 мар 2015
    Сообщения:
    11
    Город:
    Белая Церковь
    Имя:
    Влад
    тут есть http://forum.apmcopter.ru/threads/kopter-na-450-rame-alien.345/
     
    Alexey Kozin нравится это.
  14. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    в логе постоянно ошибки жпс
    11: GPS
    ECode 2: GPS Glitch
    ECode 0: GPS Glitch cleared
    gpsglith.jpg

    если трек справа на карте достоверный то возможно у вас слишком жестко настроен глитч детектор - попробуйте жпс глитч радиус раз 3-5 увеличить.

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

    stenko Абитуриент

    Регистрация:
    26 мар 2015
    Сообщения:
    11
    Город:
    Белая Церковь
    Имя:
    Влад
    в этом и проблема, прошивки такого не было ... не могу понять в чем проблема....ничего не менял, только прошил и такое появилось
     
  16. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    в логе с юблоксом нашел такую штуку у сообщений типа gps параметр TimeMs меняется раз в секунду тоесть на конце всегда 000
    а должно быть 10 раз в секунду тоесть на конце должно быть 100 200 300 ... 900
    к следующей версии прошивки постараюсь добавить строчку инициализации юблокса переключающую его на 115200 с выдачей координат 10 раз в секунду
     
  17. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    сегодня добавил строчку инициализации юблокс нижння
    #define UBLOX_INIT_MSG \
    "$PUBX,40,gga,0,1,0,0,0,0*7B\r\n" /* GGA on at one per fix */ \
    "$PUBX,40,vtg,0,1,0,0,0,0*7F\r\n" /* VTG on at one per fix */ \
    "$PUBX,40,rmc,0,0,0,0,0,0*67\r\n" /* RMC off (XXX suppress other message types?) */ \
    "\181\098\006\008\006\000\200\000\001\000\001\000\222\106\181\098\006\008\000\000\014\048$PUBX,41,1,0007,0002,115200,0*19\r\n" /* 115200 nmea only 5HZ */
    саму строчку перехватил от u-center
    завтра припаяю юблокс и проверю
     
  18. LampGraph

    LampGraph Кандидат наук

    Регистрация:
    16 ноя 2015
    Сообщения:
    1.229
    Город:
    Абакан
    Имя:
    Вячеслав
    Верно ли я понимаю что при такой погрешности (в идеале), мы можем определить вектор перемещения, а соответственно и север, с точностью до 1 градуса пролетев 143 метра? Точность в 10° нам даст расстояние 14 метров. Без использования компаса, опираясь только на GPS
     
  19. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    мнение ошибочно.
    при движении со скоростью более метра в секунду данные о жпс курсе (курс также считается навигационным модулем) приобретают достоверный характер, но немного задерживаются, то есть через 0,3 -0,4 секунды после начала движения пройдя менее полметра мы уже имеем данные о векторе перемещения относительно земли с точностью до нескольких градусов, причем точность растет с увеличением скорости.
    жпс курс считается относительно предыдущей статической ошибки системы к текущей точке, также содержащей статическую ошибку (общее смещение)
    общее смещение бывает меняется, но его скорость обычно мала
     
  20. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    927
    Город:
    Москва
    Имя:
    Алексей Козин
    как утверждает ю-центер максимальная скорость обновления у мультисистемных модулей ublox в режиме глонасс+ жпс 5 гц
    если ставлю период обновления данных 100мс что соответствует частоте обновления данных 10 гц то значение подсвечивается красным
     
  21. Alexey Kozin

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

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