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

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

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

  1. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    Поскольку 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.094
    Город:
    Реж
    Имя:
    Тимур
    Я согласен потестировать. Особенно, если будет регламентировано, что именно более всего интересует в тестировании.
    Потому что унитазинг бывает время от времени на моем коптере, но как-то переменно. Например, встал в лоитер, висит нормально. Надоело, полетал, встал в Лоитер - унитазит. Полетал ещё, встал - не унитазит...
    Когда починю коптер - напишу на почту.
     
  3. raefa

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

    Регистрация:
    3 янв 2015
    Сообщения:
    4.325
    Город:
    Zhigulevsk
    Имя:
    Александр
    Именно с релиза 3.2 это началось? Или уже ранее где-то на половину работало? К 3.1 вообще никак не относится?
    А задача распознавания потери сигнала GPS или изменения координаты на километр/десятки километров где решается? Этот алгоритм поможет только при дергании?
    Может еще и допилить, чтобы обнаружение потери сигнала/резкого изменения координаты более быстро исполнялось и выполнялся Land/AltHold?
    Надо озвучить методику тестирования.
     
  4. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    в тестировании интересует предже всего.
    1. просто облетать. ибо на сегодня только настольные тесты
    2. изменения коснулись исключительно инав и жпс. тоесть теоретически разницу можно почувствовать только в авторежимах использующих жпс.
    первые тесты желательно сделать с особой осторожностью с готовностью вернуться в альтхолд. просто повисеть, затем подвигаться в лоитере.

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

    Особенность медианного фильтра в том что он превосходно отбрасывает шумовые значения.
    предполагаемое поведение фильтра KPEMF таково.
    сначала набирается 20 сэмплов от жпс. при частоте выдачи данных 5 гц на это нужно 4 секунды, в течении этого времни автопилот не получает координат.
    затем если случается резкий разовый выброс жпс в сторону на несколько метров или километров - эти данные не попадают в зону ожидания.
    тоесть есть некая модель обладающая массой и начальной скоростью, алгоритм фильтра имеет вводную что физическое тело не может быть резко, за доли секунды быть перемещено на несколько км и строит ряд прогнозов в спектре ожидания. при этом вылетевшая точка оказывается с одного краю. краевые точки игнорируются. Если навигационный приемник продолжает выдавать что он в новом месте достаточн опродолжительное время то фильтр начнет постепенное приближения своих координат в сторону нового положения
    э это уже есть в прошивке, в основе лежит 3.2 с фаилсэфом по жпс.
    если навигационный приемник перестает сообщать о 3д фиксе то независимо от того каково состояние фильтра - код ардукоптера получит сведения о потере сигнала.
    предложение по формату темы.
    конструктивные вопросы и ответы перемещаем в фак в шапке,
    разговоры за жизнь не запрещаем, но без всяких обид скажем раз в недельку подчищаем
    ?
     
    Последнее редактирование: 17 ноя 2015
    5yoda5 нравится это.
  5. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.094
    Город:
    Реж
    Имя:
    Тимур
    Только не сажайте коптер, если GPS сигнал потерян, но активен полетный режим без использования GPS (стаб например)!

    Легко! У меня уже "само собой" перещелкивается на стаб, чуть что пошло не так :)
     
  6. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    а что нет так?
     
  7. Xichnik55

    Xichnik55 Старший научный сотрудник

    Регистрация:
    10 сен 2015
    Сообщения:
    665
    Город:
    Омск
    Имя:
    Иван
    Прошивка с любым компасом и жпс работать будет?
     
  8. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.094
    Город:
    Реж
    Имя:
    Тимур
    Просто отвал GPS может произойти и в воздухе. Нужно дать возможность пилоту вернуться по визуальным ориентирам самому (FPV), в Стабе.
    Если полет в авторежимах, то при потере GPS сажать - логично.
     
  9. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    протестировал с медиатеком, теоретически должен с любым жпс настроенным на вывод данных в формате NMEA
    если будет замечены проблемы с другими приемниками - буду допиливать.
    остальное железо втч какая версия апм и компаса роли не играет.
    должно все работать на всех версиях апм начиная с 2.0 и выше втч китайских клонах
     
    Последнее редактирование: 17 ноя 2015
  10. Hanter

    Hanter Студент

    Регистрация:
    14 апр 2015
    Сообщения:
    32
    Город:
    Геленджик
    Имя:
    Алексей
    Алексей добрый день!!! Я с тобой! В ближайшие дни соберу аппарат для тестирования!
     
    Alexey Kozin нравится это.
  11. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.094
    Город:
    Реж
    Имя:
    Тимур
    Сегодня понял, что при открытии некоторых тем нужно каждый раз перечитывать шапку!
    Первый пост дополнился со вчера вечером....
    Мой коптер дня через два-три полетит. Нужно только проверить, как чувствует себя модуль GPS после отруба пропеллерами (возможна засада, но есть подмена, которую легко починить), и поменять разъем на плате (а то будет много прошивок/настроек :) )
     
  12. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    прошивку уже раздал всем желающим. интересно кто первый облетает и отпишется.
     
  13. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    видимо особенности яндекс почты которую вы используете.
    скинул в почту вам ссылку на дропбокс
     
    Xichnik55 нравится это.
  14. Alexey Kozin

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

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

    теоретически, в упрощенном виде это будет выглядеть так:
    любому наклону рамы в полете будет соответствовать ускорение по XY соответствующее синусу угла крена помноженному на значение акселя z (тоесть g при отстутствии ускорений по вертикали) это будет ОУ ожидаемое ускорение.
    в ходе ручного управления или автоматической навигации коптер получает команды занять тот или иной угол по питчу и крену и выполняет их.
    при этом если он ощущает уровень ускорений соответствующий ОУ - значит система стабизации турбулентных ускорений действий предпринимать не будет.
    если между ожидаемым ускорением и практическим будет разница - эта дельта будет помножена на коэфициент. В результате получим добавочный угол который позволит скомпенсировать паразитное ускорение. разумеется на стадии первых проб "добавочный угол" ограничу какими нибудь минимальными значениями, например +- 5 градусов.

    на практике этот программный модуль позволит парировать нештатные толчки от ветра ( или в ходе теста от руки) и сделает управление более комфортным
     
    5yoda5, Hanter, raefa и ещё 1-му нравится это.
  15. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.094
    Город:
    Реж
    Имя:
    Тимур
    Написал на почту, вышлите пожалуйста. Коптер почти дособран, если сойдутся звёзды - завтра полечу.
     
  16. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    отправил
     
  17. 5yoda5

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

    Регистрация:
    29 янв 2015
    Сообщения:
    7.094
    Город:
    Реж
    Имя:
    Тимур
    Наверное отвечу тут, а не в почте (возможно и другим будет интересно):
    Летаю на стандартных ПИДах.

    1. Какие настройки в ФуллПараметрЛист критично выставить? (имеется ввиду настройки фильтров или что там)
    Я просто откалибрую датчики, настрою полетные режимы и буду тестировать Альтхолд, Стабилайз с опцией Симпл, Лоитер.
    2. Вибрации в логи писать?
    3. Какой тип прошивки в архиве? (у меня квадро)
     
    Последнее редактирование: 19 ноя 2015
  18. Alexey Kozin

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

    Регистрация:
    26 янв 2015
    Сообщения:
    925
    Город:
    Москва
    Имя:
    Алексей Козин
    в шапке есть описание нескольких параметров, после загрузки бинарника прошивка сама сбросит параметры по умолчанию на те что нужно для начала
    соответственно для начала нужно откалибровать сенсоры, радио, регули, компас и настроить пиды стабилизации .
    по желанию можно загрубить жпс глитч
    для начала тестов если рама более менее нормальная запись логов не нужна, важно оценить летабельность.
    в стабилайзе - альтхолде в текущей v3 версии не должно быть никаких отличий
    в лоитере должен поменяться характер удержания ибо инерциалка отключена - должна появиться склонность подрыгаться как бы охотясь за вооброжаемой приставучей мухой, но этого должен недопустить фильтр жпс данных.
    в ходе последующих тестов можно отключить фильтр или наоборот сделать его сильнее меняя значения
    GPS_navfilterPE от 0 (выкл) до 19 (сильная фильтрация)
    по факту облета если висеть будет прилично - обсудим дальнейшие шаги, например лоитер на скорости резкие остановки, оценка точности возврата в точку взлета. перед тестом точности возврата следует дождаться хорошего фикса жпс перед армингом

    альфа версия прошивки будет только под квадру. ибо не имея статистики надежности рано ставить на более дорогие аппараты
     
    Hanter, Xichnik55 и 5yoda5 нравится это.
  19. Arkady

    Arkady Студент

    Регистрация:
    11 мар 2015
    Сообщения:
    33
    Город:
    Ashdod
    Имя:
    Аркадий
    Можно загружать параметры из предварительно сохраненого файла в версии 3.2.1 или все ручками прописывать? или как вариант делать copmare и только пиды разрешить обновить?
     
  20. 5yoda5

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

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