MahoWii RC3
На данный момент крайняя версия Mahowii 2.4
========================================================================
Добрался вот до описания… За последний месяц было добавлено пару полезных вещей, а также сделано множество тестов. Обзавелся неплохой лого-смотрелкой (3DR modem + EZ-GUI + LiveGraph.2.0.beta01). Многие моменты стало проще понять. К примеру как ведет себя баро при вхождении в воздушную подушку. Все как на ладони теперь 😃
Изменения в сравнении с RC2:
-
Добавил инерциалку (ИНС) в связке аксель + гпс. Активируется дефайном INS_PH_NAV_ON. Субъективно удержание позиции (PH - position hold) стало более плавным. Но несмотря на то, что времени на эту фишку уже убито просто куча, назову ее бетой (beta), т.к. все еще требуется точная настройка (соотношение аксель/гпс и доп. параметров в интеграторах). С большего конечно подобрал коэф. соотн-я и вроде как радиус удержания стал поменьше. Что уж точно, так это сглаживается мелкая тряска, которая иногда присутствует при удержании позиции на задранных gps пидах… Станет видно по отзывам, т.к. мой тесто-вибро-коптерок уже порядком добит 😃, ну а аксель этого ой как не любит…
Еще положительный момент: несмотря на то что обсчитывается кучка синусов/косинусов в матрице поворота + куча операций с плавающей точкой, пока в пиках цикл за 5-6 мс не вылазит, что не может не радовать и говорит о том, что есть еще порох у atmega чипов! 😃 -
Прописаны оптимальные пиды для PH (они же и для ИНС). На моем добитом вибро конфиге в легкий ветер при 8-10 спутниках, коптер не вылазил из окна в 3-4 метра. А на высоте более 20м, при активации удержания высоты (АХ - АльтХолд) + PH, субъективно стабильно висит в точке как привязанный.
-
Добавил компенсацию прыжков (на основе усредненного горизонтального ускорения из ИНС) при резкой смене направления движения в АХ (т.е. функция относится только к АХ). Когда к примеру летишь вперед и резко даешь тормоз назад наклоном. Без компенсации были прыжки 3-5 метров высоту… а теперь перестал стричь деревья около дома 😃
Включается дефайном AERODYNAMIC_LIFTING_FORCE_CORRECTION. Сам коэф. этого дефайна обратно пропорциональный, т.е. чем меньше значение, тем больше коррекция. Тут надо осторожно, иногда при больших ускорениях/торможениях коррекция может быть в минус от текущей высоты, соот-но на низких высотах иногда приходится корректировать газом. -
Добавил полезную штуку для ФПВ (и новичков), предохранитель мин. высоты. Дефайн LOW_ALTITUDE_PROTECTOR_DURING_AH. Указываем к примеру что мин. высота в АХ будет 4м. Далее взлетаем в АХ, активируется эта функция и при попытке спустится ниже работая стиком газа в АХ, коптер будет пружинить поддерживая мин. высоту. Т.е. выше можно, ниже нельзя…
Вкл/выкл. этой фишки в полете повесил на активацию/деактивацию МАГ режима (т.е. АХ +/- МАГ), что бы дать возможность садится в АХ. Т.е. отлетали, и перед посадкой выключаем МАГ (соот-но вырубается предохранитель высоты) и садимся как и раньше в АХ…
Тут важно отметить, что барометр за 5-10 мин. может и подплыть на 3-7 метров (особенно на смену погоды), потому гарантии что эта функция спасет вас на 100% от удара о планету конечно же нет, хотя ни кто не мешает поставить в конфиге мин. высоту 8-10 метров 😉 -
Попытка динамической компенсации просадки высоты при пролетах (дефайн DYN_AH_THROTTLE_ANGLE_CORRECTION). Главное отличие от просто THROTTLE_ANGLE_CORRECTION, то что это умная дин. коррекция просадки высоты! 😃 И в теории, после настройки, не зависит от конфига, т.е. изменения веса и т.д., т.к. функция работает через ПИД-регулятор АХ (и соот-но вносит свои коррективы только при активированном АХ).
Ограничение: не стоит активировать одновременно с THROTTLE_ANGLE_CORRECTION, а также AERODYNAMIC_LIFTING_FORCE_CORRECTION. В частности DYN_AH_THROTTLE_ANGLE_CORRECTION и AERODYNAMIC_LIFTING_FORCE_CORRECTION могут усиливать влияние друг друга… -
Наконец то избавился от воздушной подушки совсем, отрубая барометр из интегратора скорости, полагаясь лишь на аксель, если высота по баро уходит в минус (выяснилось что на взлете-посадке баро уходит в минус до 4-х метров за 1-2 сек! и это на килограммовом квадре… страшно подумать про тяжеловесов…), и наконец таки получил практически ровный взлет и посадку в АХ. Теперь никаких рывков около земли, даже на мин. вертикальной скорости +/-20-30см!
Но и тут однако есть минус. При изменении рельефа (либо если просто барометр сильно в минус ушел), на высотах ниже нуля, могут начаться подгазовки/недогазовки, т.к. расчеты по акселю без корректора (баро т.е.) долго не могут быть в стабилизации… Возможно еще придумаю что нить, но пока не нашел очевидного решения, как определить факт нахождения в воздушной подушке, хотя бы с 90%-й вероятностью. После арма, да, однозначно, т.к. баро в нуле, ну и сам факт/момент арма 😃 -
Дефайн HOVERING_THROTTLE. Тут можно прописать начальный газ висения (далее он корректируется на переходах АХ<=>регулировка высоты) вашего коптера. К примеру если газ висения 40%, то это примерно соответствует значению 1400.
Если этот дефайн закрыт, то газ начальный висения высчитывается из MID для EXPO THROTTLE в ГУИ (см. подробности в описаниях к RC1/RC2). -
Добавил возможность настройки FS (failsafe) на посадку с заданной вертикальной скоростью после возврата домой (RTH - return to home). Точнее сейчас есть несколько вариантов (для FS приемников с памятью на каналы, типа frsky):
а) с отключенным АКБ и подключением по USB, делаем арм, включаем с пульта ANGLE + АХ + RTH + стиком газа задаем скорость снижения -70…100 см/с (знак минус!) по debug1 (debug[0] для программеров) переменной в ГУИ. Запоминаем сост-е каналов для FS. ALT_TO_RTH_FINISH будет проигнорирован в этом случае и посадка будет происходить на заданной скорости.
Доп. плюшка тут еще в том, что если ГПС отвалился (спутников менее 5-ти, либо вовсе гпс фикс. пропал), то при срабатывании FS, просто будет выполнена автопосадка на заданной скорости.
Тут важно помнить, что если включен дефайн LOW_ALTITUDE_PROTECTOR_DURING_AH, то для корректной посадки, МАГ должен быть выключен из FS набора, иначе после снижения коптер упрется в предохранитель высоты.
б) с отключенным АКБ и подключением по USB, делаем арм, включаем с пульта ANGLE + АХ + RTH + стик газа выводим в центр на 50%, т.е. на висение. Запоминаем сост-е каналов для FS.
В этом случае коптер по старинке спустится на высоту ALT_TO_RTH_FINISH по прилету.
в) с отключенным АКБ и подключением по USB, делаем арм, включаем с пульта ANGLE + АХ + PH+ стиком газа задаем скорость снижения -70…100 см/с (знак минус!) по debug1 (debug[0] для программеров) переменной в ГУИ. Запоминаем сост-е каналов для FS.
В этом случае будет выполнена автопосадка на заданной скорости с удержанием позиции по гпс.
-
Для модулей MTK3339 добавил дефайн MTK3339_AIC_ENABLED. Активация встроенной в MTK3339 функции Active Interference Cancellation (AIC). В теории помогает выжать полезный сигнал при плохом приеме - this feature provides effective narrow-band interference and jamming elimination. The GPS signal could be recovered from jammed signal, and let user get better navigation quality.
-
С переходом на 2.2 версию, авто-определение скорости гпс модуля по NMEA протоколу работало через раз (по крайней мере с моим 3339). Исправил, дело было в подходе закрытия порта. Добавил переключалки закрытия порта (дефайнами в GPS.ino):
- если дефайн открыт, то закрытие порта будет по офиц. версии
- если закрыт, то по моей
#define NEW_SP_END_UBLOX
//#define NEW_SP_END_MTK
Т.е. сейчас это работает как в RC2, где для UBLOX офиц. версия (т.к. нет модуля такого на проверку), а для NMEA/MTK моя.
-
Увеличил скорость возврата при RTH в 2 раза, т.к. уснуть можно пока прилетит 😃
-
Прописаны универсальные значения газа для калибровки ESC регулей контроллером. Для уверенного холостого хода при арме ESC_CALIB_LOW = (MINTHROTTLE-100), а ESC_CALIB_HIGH = MAXTHROTTLE. Получим диапзон который нам и нужен.
#define ESC_CALIB_LOW (MINTHROTTLE-100)
#define ESC_CALIB_HIGH MAXTHROTTLE
//#define ESC_CALIB_CANNOT_FLY // uncomment to activate
- FrSky телеметрию (дефайн TELEMETRY_FRSKY) теперь можно вешать на любой из портов. Порт указывается дефайном TELEMETRY_FRSKY_SERIAL. Также нужно выставить соот-й SERIAL {X}_COM_SPEED на скорость в 9600.
#ifdef TELEMETRY_FRSKY
#define SERIAL3_COM_SPEED 9600
#endif
Напомню, можно вывести прямо на пульт turnigy9x + er9x (через теметрийный frsky модуль) след-е параметры с контроллера:
alt - высота,
alt (gps) - азимут/курс,
spd (gps) - скорость по гпс
lan/lot - гпс координаты
T1 - растояние до дома (точки взлета) по гпс
T2 - кол-во спутников
RPM - газ умноженный на 10 с дискретностью 30 (т.е. без последнего нуля дискретность =3). Такое неудобство из-за формата вывода RPM в er9x-frsky прошивке…
Также, по надобности (для отладки к примеру), можно выводить debug[0] и debug[1] параметры на пульт. Дефайн TELEMETRY_FRSKY_DEBUG (подробности в конфиге).
Доработка аппы, модуля и приемника делается так:
- подрубаем rx-tx frsky модуля к Turnigy 9Ch. Тут есть нюанс, чтобы не городить конвертер rs232 в uart уровней, можно вывести прямо из модуля rx-tx uart уровни через свободные пины как тут (вот еще картинки + вот). Тогда двух зайцев сразу убьем: не нужен конвертер уровней и не будут торчать сопли/провода из модуля…
- зашиваем турнигу er9x-frsky прошивкой
- подключаем RX приемникa к TX пину (выбранного порта) полетного контроллера через инвертор. Я на транзисторе спаял, старинном кт3102 😃 и сунул прямо в приемник. Или вот как пример.
А если не охота паять, то подойдет mini max3232, который также легко влезет в приемник.
- Привел чтение акселя в порядок. Теперь чтение идет ровно с частотой в 100 гц. Фильтры и интеграторы теперь более правильные. Также соот-но уменьшилось время цикла.
-----------------------------------------------
Обновление RC3.1:
-
Пофиксил драйвер сонара, а также добавил возможность вешать его на пины D9 (trig), D10 (echo), к примеру для плат, где D11 и D12 пины не выведены или используются для других целей.
Странное дело, но с переходом на 2.2 оф. версию, поехали тайминги драйвера. Потратил пару вечеров по много часоФ, но до конца пока не разобрался. Подозреваю, что это из за того что 2.2 пользует ресурсы прерываний на всю катушку для работы с uart/serial портами…
Дело было так. Драйвер на высотах, где сонар “видит”, отдавал корректные данные, НО на пределе его видимости и далее с набором высоты он должен генерить ошибки (чего не происходило) и инициировать переключение на баро в АХ механизме. И т.к. драйвер ошибки не генерил, соот-но на высотах выше видимости сонара переключение на баро не происходило и начинался бред…
Фикс можно предварительно проверить в ГУИ. На debug4 (как и раньше) высота по сонару, а на debug2 - текущее кол-во ошибок по сонару. И если к примеру закрыть сонар рукой или плотной тканью (коптер в горизонте при этом должен быть), то кол-во ошибок за 1-2 сек должно рости до 10-ти… -
Магнитометр на калибровке опрашивается теперь с макс. скоростью (~250гц), а не 10гц как при обычном чтении. Теперь по идее крутить коптер по трем осям на калибровке можно быстро и ни одного мин/макс значения не проскочит 😃
-
Пожалуй главный пункт в данный момент. Были жалобы на чувствительность к вибро в RC3. Вернулся к старой частоте чтения акселя + соот-но перенастроил НЧ фильтры для этого. Теперь стабильность должна быть на уровне RC2. На моем вибро конфиге (оссобенно после перехода на говно-проп-адаптеры с рцтаймера) это хорошо было видно…
-
для модуля mtk3339 добавил доп. включалки его внутренних фич. в соот-ии с PMTK_commands_A11.pdf документом, а также включалку LOCUS режима (дефайн MTK3339_LOCUS_ENABLED), для логирования данных гпс (координаты и т.д.) встроенными средствами самого модуля с частотой 1гц. Потом лог можно вытянуть из модуля и посмотреть его утилиткой “GlobalTop GPS Viewer v1.7”
Также:
- еще поднял фактор гиры по отношению к магнитометру, тем самым будет выше защита от кратких воздействий силового поля, т.е. его переменой сост-й. И соот-но на прогазовках, кратковременное влияние на расчетные показания курса/азимута будет меньше. У меня с включенным маг_режимом на агрессивных пролетах, коптер заметно подкручивало на газу >70%, а теперь стало лучше.
- еще чутка поднастроил ИНС (аксель + гпс)
- подрефакторил код регулировки высоты в АХ. Надеюсь не сломал ничего 😃
- небольшие изменения в АХ и связанных фичах с целью повышения стабильности
- включил KILL_SMALL_OSCILLATIONS по умолчанию и соот-но немного уменьшил связанные пиды по умолчанию
- высоту возврата при RTH изменил на 20м и по прилету на 2м
-----------------------------------------------
Далее по поводу основных полезностей из офиц. 2.2 версии:
- на любой uart/serial порт можно вешать osd, bluetooth, gps, модем, frsky телеметрию… или хоть 4 ГУИ запустить 😃
- новый режим HORIZON - это микс ACRO и LEVEL (в 2.2 это ANGLE) модов (режимов). Уже хорошо опробовал его, понравилось. Управление более плавное и натуральное. Если коротко, то чем дальше ролл/питч стик от центра, тем больше он акро и чем ближе к центру, тем больше он левел. На оф. форуме, по отзывам, пишут что для ФПВ самое оно, ибо очень плавное управление получается. Также теоретически можно петли крутить, если поднять расходы на аппе + пиды настроить под акро. Т.е. крутить относительно безопасно, т.к. если бросить стики в центр то включится левел мод.
- поддержка MTK_BINARY16 and MTK_BINARY19 гпс протокола от DIYDrones для гпс модулей на базе MTK3329. В частности mtk binary v1.9 дает выше точность на один знак. Уже заказал себе mtk3329 модуль… проверимс 😉
www.multiwii.com/forum/viewtopic.php?f=8&t=649&sta…
code.google.com/p/i2c-gps-nav/downloads/detail?nam… - полная совместимость с minimOSD, т.к. ей желателен 2.2
- авто пере-калибровка гироскопов, если во время калибровки коптер двигали. Дефайн GYROCALIBRATIONFAILSAFE. Включил по умолчанию, т.к. реально полезная фенька.
- Офигенная штука мульти-профайлы настроек (дефайн MULTIPLE_CONFIGURATION_PROFILES). Дает возможность переключаться между страницами настроек (всех три страницы): ПИД-ы, боксы и т.д. К примеру первая страница спокойный FPV, вторая - быстрый акро. Переключаться можно как из ГУИ, так и с пульта:
- 1-я страница: (мин. yaw + мин. газ) + мин. roll (центр. pitch)
- 2-я страница: (мин. yaw + мин. газ) + макс. pitch (центр. roll)
- 3-я страница: (мин. yaw + мин. газ) + макс. roll (центр. pitch)
…googlecode.com/…/MultiWii-StickConfiguration-22_v…
Также отмечу, из 2.2 версии перекочевал один косяк. АлексВПариже (главный разработчик вия и великий аппроксиматор 😃) опять переколбасил размерности пидов, т.к. заменил деления на побитовые сдвиги. Выигрыш в производительности минимален, а гемора много. В принципе изменения на 20-30% всего, но пришлось свои пиды (по умолчанию) пересчитать.
Соот-но, если вам надо перенести настройки из RC2 в RC3, то в RC3 надо уменьшить roll/pitch/yaw P на ~20% и поднять level P на ~20%. А если на стоке (по умолчанию), то все уже пересчитано и прописано, т.е. трогать не надо.
Прошивку рекомендую заливать последней версией Arduino 1.0.5. А также почистить EEPROM скетчем для Atmeta2560.
GUI нужно брать от оф. 2.2 версии code.google.com/p/multiwii/downloads/detail?name=M…
Надо учесть, что прошивка (АХ плюшки в особенности + ИНС) ориентирована на АИОП контроллер с atmega2560 + mpu6050 + ms5611 на борту. Сразу скажу, я не занимаюсь поддержкой других контроллеров, к примеру Crius Lite или Crius SE на atmega328, хотя некоторые летают и на них. Потому, если у вас не АИОП, то тонкости настройки и возможные ограничения ложатся на ваши плечи… как говорят: на свой страх и риск 😃
Ну и демка возврата домой (RTH) на FS (failsafe) приемника с автопосадкой на заданной вертикальной скорости (~70см/с) по прилету. Далее взлет/посадка в АХ (альтход - удержание высоты)…