MahoWii 2.4

Всем привет!

Выкладываю проект в открытый доступ github.com/mahowik/mahowii

Работа проведена большая. Налетаны десятки часов. Спасибо всем и отдельно Артему за помощь в тестировании!

Постараюсь коротенько

  1. единая ИНС для расчета вертикальных/горизонтальных скоростей и перемещений по данным акселерометра с коррекцией на баро и гпс

  2. 3-х осевая 6-ти точечная калибровка акселеромета для более точной работы ИНС.

  3. По удержанию/регулировке высоты (альтхолд - АХ):

  • полностью переписан и теперь на основе ИНС
  • SAFE_ALT бокс/режим. Это тоже самое что и пункт 4 из описания RC3, но активацию можно настроить в ГУИ, а высоту задать SAFE_ALT_DURING_AH дефайном.
  • полностью переработан детектор фиксации земли, воздушной подушки и посадки
  • компенсатор воздушной подушки интегрирован с ИНС
  • единый ПИД контроллер для регулировки высоты и ее удержания
  • боле надежный поиск газа висения (И-частью ПИД регуля)
  • на посадке “нежная” скорость спуска, т.к. можно влепить в землю. Где, если высота меньше SAFE_NAV_ALTITUDE (=5м), то скорость ограничена MIN_NAV_VARIO (=0.5м/с), а если высота выше, то скорость спуска уже пропорциональна высоте, где макс. скорость MAX_NAV_VARIO (=2.5м/с) на высоте RTH_ALTITUDE (=25м) и выше.
  • скорость подъема при навигации по точкам и на возврате домой выходит на макс. до MAX_NAV_VARIO (2.5м/с) на высоте большей чем SAFE_NAV_ALTITUDE (=5м), где если высота менее SAFE_NAV_ALTITUDE, то скорость ограничения в 3 раза ниже (т.е. MAX_NAV_VARIO/3), опять же для безопасности.
  1. По ГПС режимам:
  • удержание позиции (position hold - PH) теперь стало более отзывчивым и точным, т.к. использует данные ИНС. Активация по INS_PH_NAV_ON (включено умолчанию)
  • возмозможность полетов в PH, когда roll/pitch стик за границей AP_MODE (=20), где при отпускании стика происходит захват позиции.
  • расчет/предсказание точки останова при полетах в удержании позиции (PH - position hold). Регулируется параметром Pos-I в ГУИ. Когда отпускаем стик, к текущей координате добавляется вектор скорости умноженный на время из Pos-I
  • ожидание набора заданной высоты в точках навигации
  • при активации возврата домой (RTH - return to home) если растояние до точки “дом” меньше чем RTH_RADIUS (=10м), то возврат с набором высоты будет пропущен и включено удержание позиции либо посадка (если она активиривана вместе с RTH).
  • автоконфигурация гпс модулей по MTK протоколу
  • автоконфигурация гпс модулей по u-blox протоколу + новые дефайны
  • запрет АРМа, если какой либо из ГПС режимов включен
  • запрет АРМа, если нет 6-ти спутников (отключается закрытием дефайна ONLY_ALLOW_ARM_WITH_GPS_3DFIX)
  • если RTH активирован, то активация других гпс режимов будет проигнорированна, что бы избежать перезапуска цикла RTH (вийный баг)
  • фикс прыжков координат в ГУИ (вийный баг)
  1. FRSKY телеметрия (в связке с ER9X прошивкой пульта):
  • исправлено отображение координат (вийный баг)
  • исправлено отображение ГПС скорости (вийный баг)
  • удаление не нужных пакетов типа (ax, ay…)
  1. Всякое разное:
  • оптимизированная математика (sin,cos и т.д.) С активированной ИНС влез в 4-5мс без дропов!
  • фильтрация данных магнетометра в процессе его калибровки для избежания попадания шумов в мин/макс значения калибровки
  • 50гц ПИД выход для АХ и ГПС режимов
  • независимый от времени цикла конечный ПИД регулятор и как следствие более точный и не подверженный дрейфу горизонт
  • куча мелкофиксов, оптимизациий и улучшений в сравнении с multiwii

Примечания:

  • параметры в конфиге помеченные как (**) или (EEPROM) хранятся в EEPROM и соот-но берурся из config.h только при первой загрузке.

Рекомендации:

О том как проводилось тестирование (а так же описания к RC1/RC2/RC3) можно почитать тут. А так же на канале Артема куча, видео роликов.

Напомню, прошивка ориентированна на АИОП контроллер (ALL IN ONE PRO Flight Controller), либо любой другой с Atmega1280/2560 + mpu6050 + ms5611 + hmc5883 (но тут уже возможны нюансы распиновки выходных пинов, т.е. на свой риск). По другим контроллерам не гарантирую!

Для скачивания идем на github.com/mahowik/mahowii и жмем сверху справа кнопку “Clone or download” и потом “Download ZIP”. Далее надо распаковать архив и папку “mahowii-upstream_shared” переименовать в “mahowii”. Потом открываем mahowii.ino в Arduino IDE как обычно.

Там же на github не забываем жать кнопочку “Star” 😉 Если нет github аккаунта, то заводим его и жмем “Star” 😃

Blogs:

  • 10012
Comments
BigWheeelS

О, неплохо.

Saire

круто)) Спасибо!

ADF

Спасибо!

Covax

Класс, молодец!

SergDoc

Звёздышку нажал:)

dvd-media

Мне не надо, но тоже нажал. За такое не жалко.

alezalez

Спасибо!

Shuricus

Работа, видимо, колоссальная - вот бы на СТМ ее, типа Ф4 с баро за 25$ - а то все пропадет зря.
Хотя это уже Инав сделал, не знаю как хорошо.

Covax

С силу появления глушилок на ру и гпс нужен хотя бы приблизительный возврат домой по инерциальной системе)

mahowik
Shuricus;bt152028

Работа, видимо, колоссальная - вот бы на СТМ ее, типа Ф4 с баро за 25$ - а то все пропадет зря.
Хотя это уже Инав сделал, не знаю как хорошо.

Сейчас большинство контроллеров и прошивок к ним имеют примерно один и тот же набор функций и режимов. Где avr контроллеры проигрывают в производительности stm-ам и соот-но довольно сложно было оптимизировать и запустить инс на avr, но задача решена и можно вдохнуть новую жизнь в уже пристарелую железку. А в порте смысла нет, т.к. на ф4 уже калманы всякие крутить надо и т.д.

mahowik
Covax;bt152029

С силу появления глушилок на ру и гпс нужен хотя бы приблизительный возврат домой по инерциальной системе)

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

omegapraim

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

SergDoc
omegapraim;bt152047

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

Можно ещё на бабушкин шепот лететь:

  1. и самое вероятное “глушилка” будет подменять координаты GPS и даже кратковременное нахождение в таком состоянии сведёт все показания коту под хвост.
  2. в 90% уверен, что РУ не сразу пропадёт полностью, а сначала начнёт “издеваться” над аппаратом…

И так, всё что мы делаем - это хобби (игрушки) и еже-ли попали в такую передрягу - самое лучшее, что приходит на ум - посадка.
Возможная потеря аппарата - ничто по сравнению с тем, что он может натворить ломанувшись куда попало…
Дима, или ты можешь смоделировать и проверить десятки, а лучше сотни раз такую ситуацию? Что бы быть уверенным что данный алгоритм сработает в 100% случаев правильно?

BigWheeelS

Маховик, а с помощью какой утилиты можно менять параметры в EEPROM , которые добавил ты?

mahowik

новые параметры все в config.h, т.е. в еепром новых параметров нет, хотя многие из них переиспользованы…

mahowik

Если у кого завалялся ненужный АИОП, приму в дар 😃
Мой совсем добытый уже…

BigWheeelS

Александр, ещё несколько вопросиков.

  1. Как отключить пикание buzzer’а при возвышении/снижении в ALT HOLD ?
  2. Нужно ли менять пиды, если я выставил GYRO LPF 42HZ ?
  3. С помощью какого инструмента можно редактировать настройки AUX каналов выше 5-го ? Я в дефайне PPM-SUM заменил 8 на AUX5, но в ez-gui нет настроект для него.
mahowik
  1. #define BUZZER
  2. нет
  3. я не игрался с этим, но в принципе можно легко обойтись и 4-мя каналами и если не хватает 3-х состояний/боксов на каждый, то активируйте #define EXTENDED_AUX_STATES. Тогда на каждый канал будет по 6 состояний/боксов, т.е. на 4 канала 4*6=24 режима можно вешать…

Channel values
1000-1230
1231-1360
1361-1490
1491-1620
1621-1749
1750-2000

BigWheeelS

#define BUZZER это же глобальный ВКЛ/выкл пикалки. а мне нужно убрать только пикание альт холда.

AlexeyStn

Огромное спасибо, Александр!
Как раз пока снег и морозы, гонять на миниках не слишком комфортно, так что сижу восстанавливаю свой старый 450-й камеролёт на АИОП.
Наверняка где-то уже проскакивало, но не нашёл и спрошу ещё раз: AIOP c MahoWii допустимо крепить болтами или обязательно делать виброразвязку на двухстороннем вспененном скотче?
Раньше летал с приклеенным на скотч, но хотелось бы поменять конструкцию.

mahowik
BigWheeelS;bt152210

#define BUZZER это же глобальный ВКЛ/выкл пикалки. а мне нужно убрать только пикание альт холда.

Вы первый кому понадобилось это отключить. Это скорее удобство что бы знать что стик вне центра и на слух примерно знать ожидаемую скорость снижения…

mahowik
AlexeyStn;bt152337

AIOP c MahoWii допустимо крепить болтами или обязательно делать виброразвязку на двухстороннем вспененном скотче?
Раньше летал с приклеенным на скотч, но хотелось бы поменять конструкцию.

Я не использую виброразвязку. Из балансировок, только винты и то на отвертке на глазок. Т.е. мотор+винт в связке не балансирую…

SanRomStaV

Спасибо за Ваши труды!
не подскажите какой сонар сейчас наиболее актуален?

mahowik

в последнем релизе его нет, т.к. не нужен уже по сути… если кратко:

  • сонар капризен к различним типам поверхностей
  • точности барометра ms5611 вполне достаточно
SanRomStaV

Спасибо, а реально ли установить сонары по бокам и сзади, для боле безопасных полётов по камере?

LomS

Здравствуйте, в 2.4 версии больше нет возможности управлять серво-стабилизацией? скажем по AUX3?

mahowik
SanRomStaV;bt152441

Спасибо, а реально ли установить сонары по бокам и сзади, для боле безопасных полётов по камере?

Если летать с макс скоростью 50см/c то наверное можно прикрутить, а далее тесты тесты, краши ремонты и опять тесты 😃

mahowik
LomS;bt152614

Здравствуйте, в 2.4 версии больше нет возможности управлять серво-стабилизацией? скажем по AUX3?

Если вы про обычную вишную серво-стабилизацию, то смотрите в config.h секцию Cam Stabilisation (строка 260)

LomS
mahowik;bt152642

Если вы про обычную вишную серво-стабилизацию, то смотрите в config.h секцию Cam Stabilisation (строка 260)

сама стабилизация работает, но возможности покрутить камерой в ручную, не могу найти (крутилкой с пульта). Спасибо

mahowik

а ну да, я вроде прикручивал такую возможность в прошлых прошивах… будет время посмотрю…

SanRomStaV
mahowik;bt152641

Если летать с макс скоростью 50см/c то наверное можно прикрутить, а далее тесты тесты, краши ремонты и опять тесты 😃

У Вас был похожий опыт? Скорости минимальны, для плавной съёмки до 25 км/ч. Был печальный опыт столкновений боком и задом в деревья( Было бы очень здорово установить рабочие сонары по бокам и сзади. Каковы могут быть варианты реализации?

brig

Спасибо, Александр, за вашу работу!
Пара вопросов…
1)

mahowik;bt152198

…активируйте #define EXTENDED_AUX_STATES. Тогда на каждый канал будет по 6 состояний/боксов

А как это использовать практически? GUI ведь не поддерживает по 6 состояний канала управления?

  1. Прочитав все дневники (RC1…RC3 и более ранние), не нашел упоминаний о “custom motor mixing” для случаев, когда рама квадрокоптера представляет собой не чистый Х-крест, а нечто вроде TBS Discovery или Alien. Или в Вашей прошивке здесь нет особенностей и коррекцию можно выполнять стандартно для Multiwii?
brig

С первым вопросом вроде разобрался: как советовали на rcgroups.com, в файле MahoWii.h заменил дефайн #define VERSION 240 на #define VERSION 230, после чего стало возможным использовать WinGUI 2.3, который эту функцию поддерживает. Надеюсь, на функционирование mahowii это не повлияет.

mahowik
brig;bt152736
  1. А как это использовать практически? GUI ведь не поддерживает по 6 состояний канала управления?
  • wingui указав #define VERSION 230
  • ez-gui лучший выбор
brig;bt152736
  1. Прочитав все дневники (RC1…RC3 и более ранние), не нашел упоминаний о “custom motor mixing” для случаев, когда рама квадрокоптера представляет собой не чистый Х-крест, а нечто вроде TBS Discovery или Alien. Или в Вашей прошивке здесь нет особенностей и коррекцию можно выполнять стандартно для Multiwii?

все верно, т.е. как в обычном вие через MY_PRIVATE_MIXING

AlexeyStn

Есть GPS-модуль Crius CN-06 v3.0 (Ublox NEO-6M), работает на 115200 кбит/с.
GPS исправен точно, спутники ловятся, если принимать с него данные на FTDI-адаптер или tBeacon.
Год назад на MahoWii 2.2 работало идеально. С переходом на 2.4 возникли проблемы: полётный
контроллер принимает битые данные. Жёлтый диод на AIOP мигает как попало, а на OSD и телеметрии пульта пишутся или нули, или абсолютно нереальные координаты. В config.h нашёл строку:

// avoid using 115200 baud because with 16MHz arduino the 115200 baudrate have more than 2% speed error (57600 have 0.8% error)

Выходит, теперь надо перенастраивать GPS-модуль через U-center?

UPD: Завелось! Надо было указать #define UBLOX вместо #define NMEA.
Теперь полётник нормально принимает и на 57600, и на 115200.
Так что 115200 бит/с всё равно работает, несмотря на то, что это не рекомендованная скорость.

mahowik

Стабильный и достаточный GPS_BAUD это 38400 или хотя бы 57600. На 115200 велика вероятность ошибки передачи пакетов.

Через U-center ничего крутить не надо. Прошива умеет делать автоконфигурацию.

AlexeyStn

Ok. Поставлю 57600. А то мало ли как на морозе или жаре частоты уплывут.

ponch

c GPS влить на 328p вообще не вариант? хотя бы с RTH. Оригинальная mw на моем пк (paris sirius) странно себя ведет - дрифт назад и ничего не помогает. а на этой прошивке все ок) Но без rth как-то стремно.

mahowik

слишком много зависимостей в коде между различными ГПС режимами, т.е. просто так не выпилить…

nemo61

Александр, подскажите. Не могу настроить position hold. Унитазит. Можно ли настраивать режим с помощью ПИДов? Или нужно делать выносной компас? Ещё вопрос. Есть ли различие в прошивках на гитхабе и тех, что Вы высылали пользователям.

mahowik
nemo61;bt154855

Александр, подскажите. Не могу настроить position hold. Унитазит. Можно ли настраивать режим с помощью ПИДов? Или нужно делать выносной компас? Ещё вопрос. Есть ли различие в прошивках на гитхабе и тех, что Вы высылали пользователям.

  1. Компас в идеале не должен врать более чем на 5 град. по всем сторонам
  2. Как настраивать position hold, много обсуждалось в ветке про тестирование. Но из-за завистливых упырей ее к сожалению удалили. 90% получилось достать из гугл кэша, см. тут rcopen.com/forum/f123/topic221574/13225
    Если вкратце, при настроенном компасе, можно пробовать уменьшать Pos-P шагами по 10%. Пиды по умолчанию под ublox, но если у вас MTK модуль (с NMEA протоколом) то можно сразу уменьшить до Pos-P=0.8 и PosR-P=5.0. Для ublox-в если унитазит (но с компасом все ок), тоже можно пробовать лечить уменьшением пидов шагами по 10%…

Отличий по идее нет, но что бы сказать точно можно прогнать каким нибудь merge tool-ом типа araxis merge

nemo61

Спасибо. У меня компас врёт на 15 градусов при 50% газе. Попробую настраивать.

popa15

Здравствуйте! Напомните, пожалуйста, чтобы увеличить расходы(Rate) цифру в конфигураторе надо уменьшать или увеличивать?

Евгений_Зайцев

Александр, добрый день!

Уже давно и успешно использую вашу прошивку на относительно большом коптере, но неожиданно столкнулся со странным поведением маленького аппарата (5" пропеллеры, вес около 200 гр).
При посадке в режиме AltHold коптер подпрыгивает после приземления и его активно тащит в сторону. Обычно через 2-4 секунды успокаивается и снижает обороты. В какую сторону стоит копать? С чем может быть связано такое поведение? Барометр (5611) ведет себя стабильно и точно показывает высоту. В режиме висения высота плавает незначительно, да и вообще, помимо странностей посадки других “глюков” не замечено. Большой трикоптер с той же прошивкой (Версия 2.4)и вовсе приносит только положительные эмоции от управления.

Заранее спасибо!

mahowik

Видимо мелколеты с высокооборотными движками надувают большое отрицательное давление. Коптер думает что попер вниз и пытается это компенсировать увеличением оборотов, отсюда прыжки. Этот эффект есть на всех размерах, но на мелколетах он видимо более выраженный. Ранее я пробовал убирать баро из расчетов при отрицательной высоте, но это не надежно…

strannic

Добрый день Александр. Попала в руки плата Multiwii_Pro от Hextronik mega 2560 копия Ciurus - хочу использовать Вашу прошивку. Скачал ардуино 1.6.7. скачал из директории архив,распаковал.При попытке компиляции вылетает ошибка
GPS.cpp:1282:19: error: flexible array member in union
uint8_t bytes[];
Не подскажите в чем ошибка? в программировании не силен…Заранее спасибо.

Saradon

Понимаю, что ультранекропостинг, но у меня на этой прошивке молчит баро. Почему? на оригинальном 2.4 всё работает.