Activity

Запускаем inav 4.1.0 на STM32F4DISCOVERY + GY-86 (MPU6050/HMC5883/MS5611) + PPM

Решил тряхнуть стариной и запрограммить чего нить полезное. В наше время вряд ли кто-то занимается подобным сексом, но решил выложить на git, если кому будет интересно 😃

На базе таргета MATEKF405 собрал прошивку для STM32F4DISCOVERY + GY-86. UARTs происал на свободные пины, поддержку PPM SUM приемника вернул (которую зачем то убрали пару релизов назад), LEDs прописал для STM32F4DISCOVERY. На столе проверил IMU, GPS, frsky телеметрию, PWM outputs

  • to build hex use MATEKF405 target (in command line: ./build.sh MATEKF405)
  • you can also find pre-builded hex file at “build/” folder: inav_4.1.0_STM32F4Discovery_GY-86_PPM_by_MATEKF405_target.hex
  • if there is an issue with MPU6050 i2c init on 400KHz please make full erase -> upload inav_4.1.0_STM32F4Discovery-upload_if_mpu6050_i2c_400KHz_issue.hex first -> change i2c speed to 800 KHz at INAV Configurator -> upload inav_4.1.0_STM32F4Discovery_GY-86_PPM_by_MATEKF405_target.hex again
  • see src/main/target/MATEKF405/target.h for pinout or type “resource” command at inav CLI

github.com/mahowik/inav/tree/release_4.1.0

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:

Продолжимс! BalancingWii 1.0 - Segway на базе MultiWii

Под осень дошли руки наконец доделать игрушку 😃

Выложил новую версию на гит github.com/mahowik/BalancingWii

Из главного:

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

Начало тут rcopen.com/blogs/83206/18515
или даже тут rcopen.com/blogs/83206/18134 😃

Дочь тоже поучаствовала в проекте и робот заимел себе глаза и густой причесон! 😃

==============================================================

This is stable 1.0 release of balancing robot (based on modified/extended MultiWii 2.3 firmware).

New features:

  • Fall down?! New auto rise (stand up) function! (can be activated via box in GUI).
    Now it’s also possible to stand up manually when it’s fall down.
  • Position hold (can be activated via box in GUI).
    Try to play, how it returns when you are pushing/kicking the robot.
  • Possibility to control/steer from Android device by MultiWii EZ-GUI tool (go to Config -> Advanced -> Model control New)
  • More stability and speed accordingly (see in video!)
  • Predefined PIDs
  • Simple mode for newcomers
  • Set of code refactorings and cleaning.

Hardware:

  • Arduino nano (atmega328p)
  • mpu6050 gyro-accelerometer (GY_521)
  • any RC receiver with CPPM (ppmsum) output OR serial Bluetooth module like HC-05
  • A4988 motor drivers with 1/8 microstepping configuration (see www.pololu.com/product/1182/ for details)
  • Nema 17 stepper motors
  • 1/8 Buggy Wheels
  • Buzzer

www.multiwii.com/forum/viewtopic.php?f=7&t=4787

Enjoy! 😉

BalancingWii - Segway на базе MultiWii

В продолжение темы о балансирующих роботах собрал себе новую игрушку на базе MultiWii 2.3. Конечный пид-регуль и дривер моторов пришлось поменять конечноЖ…

Пока на соплях на макетке, но оч. даже ездитЬ 😃

железо:

  • arduino nano (atmega328p)
  • mpu6050 gyro-accelerometer (GY_521)
  • любой RC receiver with CPPM (ppmsum) output
  • A4988 motor drivers
  • nema 17 stepper motors
  • 1/8 Buggy Wheels

Попозже, кому интересно, выложу на github… 😉

upd: github.com/mahowik/BalancingWii

upd2: продолжение тут rcopen.com/blogs/83206/19661

Выложил порт Baseflight под STM32F4DISCOVERY + GY-86 (mpu6050 + hmc5883 + ms5611)

Так как проект уже почти забросил и что бы не пропали наработки, выложил на github в исходниках с проектом под CooCox CoIDE. Может кто подхватит. Удобно к примеру алгоритмы отрабатывать на мощном stm32F4 проце…

Это порт стабильного BaseFlight-20131126 релиза, который с фишками MultiWii 2.3. По крайней мере так писал товарисЧ Таймкоп
code.google.com/p/afrodevices/downloads/detail?nam…

Подробности тут github.com/mahowik/MahoRotorF4-Discovery

Самобалансирующий робот из подвеса на бесколлекторниках на коленке :)

Да простят меня мечтатели данного подвеса, из чего собственно и был сделан самобалансирующий робот за один присест в воскресный вечер 😃
Давно хотелось попробовать, но планировал делать его на шаговых движках и уже было решил их заказать, как вспомнил что лежит мертвым грузом не опробованный по сути подвес + стало интересно, а получится ли “плавная” установка, в отличии от шаговиков…
Слегка модифицировал brushless-gimbal прошивку, что бы roll ось рулила обоими движками, но оставил раздельную настройку реверсов, силы и т.д. Далее чутка покумекав, что к чему прикрутить, связал пару болтиков, а на моторы надел мотки изоленты в качестве увеличения диаметра колес… Подергал пиды и опля, стоит как вкопанный! На полу правда разгоняется быстро и начинает падать 😃 Мощи двигов, явно маловато…

MahoWii RC3

На данный момент крайняя версия Mahowii 2.4

========================================================================

Добрался вот до описания… За последний месяц было добавлено пару полезных вещей, а также сделано множество тестов. Обзавелся неплохой лого-смотрелкой (3DR modem + EZ-GUI + LiveGraph.2.0.beta01). Многие моменты стало проще понять. К примеру как ведет себя баро при вхождении в воздушную подушку. Все как на ладони теперь 😃

Изменения в сравнении с RC2:

  1. Добавил инерциалку (ИНС) в связке аксель + гпс. Активируется дефайном INS_PH_NAV_ON. Субъективно удержание позиции (PH - position hold) стало более плавным. Но несмотря на то, что времени на эту фишку уже убито просто куча, назову ее бетой (beta), т.к. все еще требуется точная настройка (соотношение аксель/гпс и доп. параметров в интеграторах). С большего конечно подобрал коэф. соотн-я и вроде как радиус удержания стал поменьше. Что уж точно, так это сглаживается мелкая тряска, которая иногда присутствует при удержании позиции на задранных gps пидах… Станет видно по отзывам, т.к. мой тесто-вибро-коптерок уже порядком добит 😃, ну а аксель этого ой как не любит…
    Еще положительный момент: несмотря на то что обсчитывается кучка синусов/косинусов в матрице поворота + куча операций с плавающей точкой, пока в пиках цикл за 5-6 мс не вылазит, что не может не радовать и говорит о том, что есть еще порох у atmega чипов! 😃

  2. Прописаны оптимальные пиды для PH (они же и для ИНС). На моем добитом вибро конфиге в легкий ветер при 8-10 спутниках, коптер не вылазил из окна в 3-4 метра. А на высоте более 20м, при активации удержания высоты (АХ - АльтХолд) + PH, субъективно стабильно висит в точке как привязанный.

  3. Добавил компенсацию прыжков (на основе усредненного горизонтального ускорения из ИНС) при резкой смене направления движения в АХ (т.е. функция относится только к АХ). Когда к примеру летишь вперед и резко даешь тормоз назад наклоном. Без компенсации были прыжки 3-5 метров высоту… а теперь перестал стричь деревья около дома 😃
    Включается дефайном AERODYNAMIC_LIFTING_FORCE_CORRECTION. Сам коэф. этого дефайна обратно пропорциональный, т.е. чем меньше значение, тем больше коррекция. Тут надо осторожно, иногда при больших ускорениях/торможениях коррекция может быть в минус от текущей высоты, соот-но на низких высотах иногда приходится корректировать газом.

  4. Добавил полезную штуку для ФПВ (и новичков), предохранитель мин. высоты. Дефайн LOW_ALTITUDE_PROTECTOR_DURING_AH. Указываем к примеру что мин. высота в АХ будет 4м. Далее взлетаем в АХ, активируется эта функция и при попытке спустится ниже работая стиком газа в АХ, коптер будет пружинить поддерживая мин. высоту. Т.е. выше можно, ниже нельзя…
    Вкл/выкл. этой фишки в полете повесил на активацию/деактивацию МАГ режима (т.е. АХ +/- МАГ), что бы дать возможность садится в АХ. Т.е. отлетали, и перед посадкой выключаем МАГ (соот-но вырубается предохранитель высоты) и садимся как и раньше в АХ…
    Тут важно отметить, что барометр за 5-10 мин. может и подплыть на 3-7 метров (особенно на смену погоды), потому гарантии что эта функция спасет вас на 100% от удара о планету конечно же нет, хотя ни кто не мешает поставить в конфиге мин. высоту 8-10 метров 😉

  5. Попытка динамической компенсации просадки высоты при пролетах (дефайн DYN_AH_THROTTLE_ANGLE_CORRECTION). Главное отличие от просто THROTTLE_ANGLE_CORRECTION, то что это умная дин. коррекция просадки высоты! 😃 И в теории, после настройки, не зависит от конфига, т.е. изменения веса и т.д., т.к. функция работает через ПИД-регулятор АХ (и соот-но вносит свои коррективы только при активированном АХ).
    Ограничение: не стоит активировать одновременно с THROTTLE_ANGLE_CORRECTION, а также AERODYNAMIC_LIFTING_FORCE_CORRECTION. В частности DYN_AH_THROTTLE_ANGLE_CORRECTION и AERODYNAMIC_LIFTING_FORCE_CORRECTION могут усиливать влияние друг друга…

  6. Наконец то избавился от воздушной подушки совсем, отрубая барометр из интегратора скорости, полагаясь лишь на аксель, если высота по баро уходит в минус (выяснилось что на взлете-посадке баро уходит в минус до 4-х метров за 1-2 сек! и это на килограммовом квадре… страшно подумать про тяжеловесов…), и наконец таки получил практически ровный взлет и посадку в АХ. Теперь никаких рывков около земли, даже на мин. вертикальной скорости +/-20-30см!
    Но и тут однако есть минус. При изменении рельефа (либо если просто барометр сильно в минус ушел), на высотах ниже нуля, могут начаться подгазовки/недогазовки, т.к. расчеты по акселю без корректора (баро т.е.) долго не могут быть в стабилизации… Возможно еще придумаю что нить, но пока не нашел очевидного решения, как определить факт нахождения в воздушной подушке, хотя бы с 90%-й вероятностью. После арма, да, однозначно, т.к. баро в нуле, ну и сам факт/момент арма 😃

  7. Дефайн HOVERING_THROTTLE. Тут можно прописать начальный газ висения (далее он корректируется на переходах АХ<=>регулировка высоты) вашего коптера. К примеру если газ висения 40%, то это примерно соответствует значению 1400.
    Если этот дефайн закрыт, то газ начальный висения высчитывается из MID для EXPO THROTTLE в ГУИ (см. подробности в описаниях к RC1/RC2).

  8. Добавил возможность настройки 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.
В этом случае будет выполнена автопосадка на заданной скорости с удержанием позиции по гпс.

  1. Для модулей 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.2 версию, авто-определение скорости гпс модуля по NMEA протоколу работало через раз (по крайней мере с моим 3339). Исправил, дело было в подходе закрытия порта. Добавил переключалки закрытия порта (дефайнами в GPS.ino):

  • если дефайн открыт, то закрытие порта будет по офиц. версии
  • если закрыт, то по моей

 #define NEW_SP_END_UBLOX
 //#define NEW_SP_END_MTK

Т.е. сейчас это работает как в RC2, где для UBLOX офиц. версия (т.к. нет модуля такого на проверку), а для NMEA/MTK моя.

  1. Увеличил скорость возврата при RTH в 2 раза, т.к. уснуть можно пока прилетит 😃

  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
  1. 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, который также легко влезет в приемник.
  1. Привел чтение акселя в порядок. Теперь чтение идет ровно с частотой в 100 гц. Фильтры и интеграторы теперь более правильные. Также соот-но уменьшилось время цикла.

-----------------------------------------------
Обновление RC3.1:

  1. Пофиксил драйвер сонара, а также добавил возможность вешать его на пины D9 (trig), D10 (echo), к примеру для плат, где D11 и D12 пины не выведены или используются для других целей.
    Странное дело, но с переходом на 2.2 оф. версию, поехали тайминги драйвера. Потратил пару вечеров по много часоФ, но до конца пока не разобрался. Подозреваю, что это из за того что 2.2 пользует ресурсы прерываний на всю катушку для работы с uart/serial портами…
    Дело было так. Драйвер на высотах, где сонар “видит”, отдавал корректные данные, НО на пределе его видимости и далее с набором высоты он должен генерить ошибки (чего не происходило) и инициировать переключение на баро в АХ механизме. И т.к. драйвер ошибки не генерил, соот-но на высотах выше видимости сонара переключение на баро не происходило и начинался бред…
    Фикс можно предварительно проверить в ГУИ. На debug4 (как и раньше) высота по сонару, а на debug2 - текущее кол-во ошибок по сонару. И если к примеру закрыть сонар рукой или плотной тканью (коптер в горизонте при этом должен быть), то кол-во ошибок за 1-2 сек должно рости до 10-ти…

  2. Магнитометр на калибровке опрашивается теперь с макс. скоростью (~250гц), а не 10гц как при обычном чтении. Теперь по идее крутить коптер по трем осям на калибровке можно быстро и ни одного мин/макс значения не проскочит 😃

  3. Пожалуй главный пункт в данный момент. Были жалобы на чувствительность к вибро в RC3. Вернулся к старой частоте чтения акселя + соот-но перенастроил НЧ фильтры для этого. Теперь стабильность должна быть на уровне RC2. На моем вибро конфиге (оссобенно после перехода на говно-проп-адаптеры с рцтаймера) это хорошо было видно…

  4. для модуля 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см/с) по прилету. Далее взлет/посадка в АХ (альтход - удержание высоты)…

MultiWii_2_1_base.zip

MahoWii RC2

Прошивка была готова уже месяц назад, но все знают как лень писать доки. Собственно выродил наконец 😃

  1. Потратил много времени на получение мгновенной высоты по акселю. Сейчас модно называть это “предсказанием высоты”, где по сути по акселю выполняется очень быстрое и относительно точное измерение высоты при быстрых перемещениях, а инертный баро корректирует ошибку двойного интегрирования. Пипец, чеб удержать двойной интеграл, пришлось ввести динамические коэффициенты в комплиментарный фильтр…
  • качество удержания высоты (альт холд - АХ) субъективно выросло в 1.5-2 раза
  • дает более точную регулировку высоты, как на мелких корректировках (10-ки сантиметров), так и при изменении в несколько метров. Т.е. мгновенное определение высоты и активация висения в момент, где стик принял центр после резких подъемов/спусков. В RC1 есть лаги/задержка, т.к. высота берется по баро, где сам баро-сенсор довольно инертный…
  • меньше проблем с воздушной подушкой на взлете/посадке, а также с висением в помещении где полно вихревых и отраженных потоков воздуха, т.к. баро только для корректировки акселя.

Ложка дегтя: вибрации на борту могут убить все конфетки…

  1. Уменьшил диапазон регулировки скорости примерно до +/- 3м/с (в RC1 было около +/- 5м/с). Теперь проще задать плавное снижение, к примеру 20-30см/с.

  2. Улучшения в калибровке газа висения. Введена доп. калибровка при переходе из регулировки высоты на висение, либо при активации АХ. Т.е. если летать в АХ, то на переходах “регулировка высоты” => “висение” (и обратно), каждый раз выполняется корректировка.

  3. Добавлена плавная калибровка Z оси акселя в полете (в RC1 только до старта). Поможет от уплывания акселя при смене температуры и связанных с этим глюков в АХ.

  4. Поднял дефолтные пиды на АХ (с повышением точности определения высоты). Потому при заливке RC2, настройки (боксы, пиды) от RC1 сбросятся. Теперь после после резких подъемов/спусков практически мгновенная остановка на висение.

  5. По мотивам комментов RC1 добавил дефайн DISABLE_YAW_ON_MIN_THROTTLE_DURING_AH:

Если арминг НЕ задан с тумблера в ГУИ (т.е. арминг задан при комбинации мин. газ + макс. yaw):
а) и новый дефайн DISABLE_YAW_ON_MIN_THROTTLE_DURING_AH активирован:

  • проверка на “режим AH выключен” перед армингом НЕ выполняется
  • при мин. газе + заведенных движках + включенном АХ, yaw игнорируется (чтобы избежать “макс. газа по YAW” при дизарме стиками)
    б) и дефайн DISABLE_YAW_ON_MIN_THROTTLE_DURING_AH отключен:
  • проверка на “режим AH выключен” перед армингом выполняется
  • при мин. газе + заведенных движках + включенном АХ, yaw НЕ отключается (т.е. останется “макс. газа по YAW” при дизарме стиками), но это для тех, кому нужен свободный yaw в АХ, даже на мин. скорости спуска… пример использования выше…

Если арминг задан с тумблера в ГУИ, то проверка “режим AH выключен” перед армингом НЕ выполняется + yaw на мин. газе свободный. Т.е. DISABLE_YAW_ON_MIN_THROTTLE_DURING_AH в этом случае игнорируется…

/* yaw stick will be disabled (in center, i.e. 1500 value) in case of throttle stick in min/low position during AltHold and copter armed
     * it helps to avoid max yaw-ing before disarm
     *
     * if this define activated: for arming from stick (min throttle + max yaw) it's not required "AH switch OFF"
     * if this define disabled: for arming from stick (min throttle + max yaw) it's required "AH switch OFF"
     * note: if ARM set to switch (ARM box in GUI) this define is ignored
     */
    #define DISABLE_YAW_ON_MIN_THROTTLE_DURING_AH

Примечание (28.02.13): Добавил проверку, если арм выполняется стиками, то дизарм можно будет выполнить только при отключенном АХ. Детали тут.

  1. Более быстрый улучшенный драйвер барометра из арду, который впилили в дев. оф. версию.

  2. Буквально на днях раскопал на просторах инета крутую чтуку - “умный” Headfree, который использует ГПС. В арду такое вроде тоже есть.
    Включается дефайном ADV_HEADFREE (по умолчанию выключен). Работает так:

  1. На взлете запоминает направление/ориентацию головы как в обычном Headfree.
  2. Пока коптер находится в круге радиусом ADV_HEADFREE_RANGE от точки взлета, действует обычный Headfree. Где ориентация может быть сброшена/перезапомнена, используя функцию HEADADJ.
  3. Как только коптер за кругом, headfree ориентация всегда будет от точки взлета. Т.е. виртуалний зад будет смотреть на пилота (точнее точку взлета).
  4. Если 3D фикс от ГПС отвалился, либо спутников меньше 5-ти, то работает как обычный Headfree.

Учитывая точность ГПС, радиус не стоит выставлять менее 10…15м. Сам не пробовал еще, но по отзувам пашет на ура!


/* Advanced Headfree mode.
       When the copter is out of defined range, the headfree orientation will be always towards from home position.
       Generally that means, when pull the pitch stick, copter will come closer. Once copter is inside defined range again,
          it will maintain the last headfree orientation. This  orientation can be still reset using HEADADJ function (only inside  defined range).
       Please note that the default orientation before getting out of range is the armed position (just like before). */

    //#define ADV_HEADFREE
    #define ADV_HEADFREE_RANGE 15          // in m - activation range around home point
  1. Еще немного поджаты фильтры на уменьшение влияния вибраций в левел моде/режиме, а также в АХ.

  2. баги найденные в RC1 (подробности в комментах RC1)

Кстати, рекомендую ГУИ из последней дев. оф. версии. Он совместим с 2.1, более красив и вполне стабилен.

Остальные детали по прошивке читайте в теме RC1, а также в комментариях темы.

Примечание: Надо учесть, что прошивка (АХ плюшки в особенности) ориентирована на АИО контроллер, либо контроллер с atmega1280/2560 + mpu6050 + ms5611 на борту.

MahoWii RC1 ;)

Фишки RC1:

  1. Дабы не путаться с основным проектом, моя ветка по прошивкам будет MahoWii, а не MultiWii 😃

  2. Новый алгоритм регулировки высоты, для режима удержания высоты (альтхолд - АХ).
    Поведение управления высотой пытался скопировать с “наза”, по мотивам комментов в rcopen.com/blogs/83206/15583

По настройке: Единственное что надо сделать, это настроить значение MID для expo throttle в ГУИ. Это середина экспоненты газа, которая задает газ висения. Если расходы на аппе на газ примерно 1000…2000, то к примеру MID=0.40 в ГУИ - это 40% газа что соот-т 1400, где по умолчанию MID=0.50 и это 1500… В принципе этот шаг не обязателен, т.к. алгоритм должен учесть и скомпенсирвать этот момент (уже в полете) при первом переходе из висения к регулировке высоты. Но все же желательно для более “плавной” работы алгоритма, пока он не внес корректировку на газ висения…

Работает так:
а) центр стика газа - это АХ с деадбендом 50 (ALT_HOLD_THROTTLE_NEUTRAL_ZONE в конфиге)
б) вверх/вниз (за деадбенд) стиком задается вертикальная скорость в диапазоне примерно +/-4…5м/с

Теперь можно даже взлетать на АХ:
а) заводим моторы
б) врубаем АХ
в) даем газу плавно/резко… проходим центр стиком газа и на ~60% взлетатем
г) поднялись на желаемую высоту, стик в центр… висим ))

Небольшое примечание: Если при активированном режиме удержания высоты (после завода движков), вам надо взлететь более одного раза (взлетели->сели->опять взлетели и т.д.) не выключая А Х, то просто перед очередным взлетом переведите газ в минимум (хотя это и так делается машинально по идее…) Это не критично, но избавит от рывка/прыжка на взлете. Таким образом вы сообщите контроллеру, что надо пропустить первый АХ при переходе центра стиком газа.
Т.е. газ в мин. -> увеличиваем -> проходим центр (контроллер не врубит АХ) -> задаем скорость взлета (стик > 50%) -> взлетаем -> далее стик в центр (только теперь контроллер врубит АХ) -> висим
rcopen.com/forum/f123/topic283798/1626

Посадка еще проще:
а) висим в АХ (стик в центре)
б) задаем скорость снижения стиком (50см/с к примеру)… садимся…
Около земли, может чутка совсем прыгать на воздушной подушке, потому как приземлится, можно газ в мин. убрать, т.е. задать скорость меньше -3м/с…

Примечание: Если приземлились в активированном АХ и надо остановить движки, то перед остановкой лучше вырубить режим АХ, т.к. от комбинации для дизарма движков (мин.газ+yaw влево) газанут диагональные моторы, что есть правильно, т.к. для АХ режима активен весь диапазон газа и нельзя запрещать управление по курсу (по yaw).
Но если у вас запуск моторов с тумблера, то просто забудьте про это 😃

Если у вас FS приемник с памятью на каналы, то можно настроить fail safe на контролируемое снижение в случае потери сигнала… Для этого: с отключеным АКБ делаем арм, врубаем АХ + level mode, выставляем скорость снижения -50…100см/с (знак минус!) по debug1 (debug[0] для программеров) переменной в ГУИ… запоминаем сост-е каналов для FS…

!!! Также добавил автоконфигурацию АХ по типу барометра ms5611/bmp085 (т.е. ничего не надо выбирать в конфиге). Теперь есть шанс получить точность удержания высоты в +/-0.5…0.7м (учитывая точность в +/-1м) для барометра bmp085 без настройки ПИД-в и ре-конфигурации фильтров алгоритма.
Это касается старых криусов и плат с bmp085 на борту… Но что бы получить ПИДы по умолчанию, надо либо почистить eeprom (в Arduino IDE открываем скетч File->Examples->EEPROM->eeprom_clear), либо предварительно залить стоковую 2.0-2.1 прошивку…

Доп. примечание: По сравнению с b3 было существенно уменьшено время старта АХ алгоритма и сейчас по идее уже не критично, если вышли на улицу, контроллер остыл и подплыл аксель. Все что нужно - это посадить коптер, обождать ~10 сек и летать дальше. За это время будет внесена корректировка для оси Z акселя. Если контроллер на морозе уж совсем начал чудить, перекалибруйте аксель с пульта и обождите около 10 сек перед стартом движков…

  1. Добавил информативный сигнализатор (для баззера/пищалки) на изменение высоты:
    пик-пауза: ~0…60см/с
    пик-пик-пауза: ~60…120см/с
    и т.д.

Оч. удобно! Потому рекомендую подвесить buzzer.

rcopen.com/forum/f123/topic283798/2095
rcopen.com/blogs/22895/17376

Aктивные (с генератором) пищалки (что по ссылке выше с ебэй), можно и без ключа подрубать, т.е. прямо на вывод меги… ток потребления, что то около 10ма при 5в…

Также добавил дефайн BUZZER_GENERATOR (пока пищалки с генераторорм не приехали). Поможет, если у вас спикер/динамик без внутреннего генератора. Работает только на изменение высоты, т.е. полностью не заменит баззер…
пассивный пьезоизлучатель, нужно подключать через ключ/трансистор, иначе можно выпалить пин atmega контроллера…

  1. По GPS:
  • поддержка Ublox GPS модулей, а точнее бинарного U-Blox протокола (из dev версии mwii). Тут надо понимать, что если у вас Ublox GPS, то это вовсе не значит, что данные на выходе в формате U-Blox протокола. Т.е. все зависит от настройки и некоторые ublox модули могут легко выдавать данные в формате NMEA. Поэтому, сперва настройте свой модуль, а потом уже выбирайте соот-е параметры в config.h
//#define NMEA
 #define UBLOX

Примечание: В конфиге нашел упоминание, что если выбран UBLOX, то надо выключить GPS_FILTERING, т.е. закомментировать #define GPS_FILTERING
With UBLOX you don’t have to use GPS_FILTERING in multiwii code !!! Х.з. почему. Нет UBLOX модуля, проверить не могу.

  • автоопределение скорости GPS модулей сo сканированием на скоростях 9600,19200,38400,57600,115200 (для UBLOX включена всегда, для NMEA включается дефайном INIT_MTK_GPS). Теперь в конфиге задается желаемая скорость работы модуля, а не начальная. Т.е. к примеру модуль прошит на скорость 9600 baud, а в конфиге указано 115200, то это значит что контроллер просканирует/найдет его начальную скорость и переведет в 115200. Это по идее избавит от гемора конфигуриривания, оссобенно у новичков…
//#define GPS_BAUD   57600
  #define GPS_BAUD   115200
  • добавил дефайны скорости обновления данных (если активирован INIT_MTK_GPS), по NMEA протоколу, т.к. не все модули держат 10гц.
//#define GPS_NMEA_UPDATE_RATE 5    // 5 Hz update rate
#define GPS_NMEA_UPDATE_RATE 10   // 10 Hz update rate
  • вынес в отдельный дефайн активацию SBAS/WAAS функции (если активирован INIT_MTK_GPS… проверял через MiniGPS_v1.7.1, на mtk3339 активируется норм). Как писал ранее, эта функция по идее увеличивает точность определения координат на 30-50%…
#define SET_SBAS_ENABLED
  • для AIO контроллеров желтый светодиод может сигнализировать состояние GPS модуля (если включен дефайн GPS_LED_INDICATOR):
    а) диод моргает (примерно 3-4 гц) - модуль успешно определился и пакеты данных идут, но 3D фикса нет
    б) диод потух - спутники найдены, 3D фикс есть, но их кол-вo менее 5-ти
    в) диод стал моргать сериями вспышек - 3D фикс есть. Количествo вспышек соот-т кол-ву найденных спутников/сателлитов:
    1 вспышка => 5 сателлитов
    2 вспышки => 6 сателлитов
    и т.д.

Примечание: Не забываем читать все описания от b1 до b4, что бы не было вопросов “Почему я активировал RTH (возврат домой), а он вроде и полетел, но с резким набором высоты?!”… Ответ тут rcopen.com/blogs/83206/15302 (см. 4-й и 5-й пункты).

Еще один нюанс: Если одновременно включены функции возврат домой (RTH) и удержание высоты (АХ), то контроллер не будет реагировать на газ, иначе если стик газа не в центре, то при выполнении RTH он не будет держать заданную высоту, а подниматься/снижаться, чего быть не должно, особенно если RTH+АХ настроен на FS…

  1. Супер дефайн KILL_VIBRO! Затягивает все возможные фильтры акселерометра и гироскопа по самое не могу! 😃
    Будет оч. полезно начинающим коптеростроителям, либо если нет других возможностей убрать мех-е вибрации, типа отбалансить пропы и т.д.
    Ложка дегтя, скорость реакции системы может уменьшится, но для бедовых пилотов (типа меня 😃) это может быть и не заметно 😃
/* Try this only if there are no way to avoid vibrations! But even if it doesn't help, you should re-balance your copter: motors, props etc.   */
    //#define KILL_VIBRO
  1. Оч. полезный дефайн KILL_SMALL_OSCILLATIONS. Также повышает вибро-устойчивость и cущественно уменьшает мелкую дерготню на концах лучей (например симптом описан тут rcopen.com/forum/f123/topic258132/2373). Может основательно улучшить качество видео на бюджетных подвесах с управлением серв от полетного контроллера (Mihbay оч. хорошо отзывался об этой фишке). НО возможно потребуется корректировка ПИД-ов, т.к. теор-ки это увеличивает D-часть на 20-30% и будет необходимо увеличить (ROLL/PITCH) P-параметр соот-но. Но я пробовал и без корректировки P, все отлично летает… Тут также могу рекомендовать перепрошить регули, т.к. увеличение скорости реакции ESC, дает больше свобод с диапазоном настроек ПИД параметров…
/* It should help to remove small oscillations produced by D-part of main PID regulator.
     * It's also usefull to improve vibro-protection in general, even stability for video cameras (info from feedback ot real user).
     * Note: theoretically it increases D-part for 20-30% and you will need to increase acro P coef. accordingly.
     * E.g. P roll/pitch was 5.2 and should be changed to 6-6.5
     */
    //#define KILL_SMALL_OSCILLATIONS
  1. для AIO контроллеров (и других на atmega1280/2560) полезный дефайн PPM_ON_THROTTLE. Перенос пина для ppm_sum с 19-го (rx1) на А8 пин. Конкретно для AIO это позволяет подрубить приемник стандартным 3-х пиновым проводком (Vcc, GND, signal) к полетному контроллеру.

  2. для AIO перенос пинов стабилизации подвеса с 33,34,35 на предназначенные для этого пины 44,45,46

  3. Для одного из пользователей b1-b4, постоянно освобождал один из каналов AUX, используемых для управления камерой (по roll/pitch) с пульта. Т.е. обычно нужен лишь pitch с пульта и тогда второй AUX свободен. А тут и Егор накатал дефайн rcopen.com/forum/f123/topic221574/6638. Слегка модифицировав, сунул в прошивку:

/*  Camstab pitch control only by one channel, uncomment only one option. Roll control is disabled.
     *  E.g. CAM_STAB_AUX4_ONLY means that signal from AUX4 used to control pitch of the gimbal and AUX3 is ignored.
     */
    // #define CAM_STAB_AUX3_ONLY
    // #define CAM_STAB_AUX4_ONLY
  1. Дефайн задающий корректировку просадки коптера в начале движения. Минусы: требует настройки на каждый конфиг, провоцирует скачки при резкой смене направления движения, но может быть полезен при спокойном стиле управления…
//#define THROTTLE_ANGLE_CORRECTION 10
  1. Сонар (из b4)! Очень ожидаемая многими фишка. Включается дефайном SONAR_GENERIC_ECHOPULSE.
    Драйвер сонара позаимствовал у alexmos (изначально написан для atmega328), расширив его на поддержку atmega1280/2560 (это проверил сам).

Над чистой поверхностью (с отражением без ошибок) высота определятся след-м образом:

  • 0…2м: сонар
  • 2…3м: микс/переход сонар-барометр
  • более 3м: барометр
    Если ошибки отражения на высотах ниже 2м, то начинает подмешиваться баро, т.е. происходит плавное переключение на баро.

Чистая высота по сонару выведена в ГУИ на debug4 (debug[3] для программеров)…

Из своего опыта рекомендую DYP-ME007 rcopen.com/forum/f123/topic283798/1039

Распиновка по сонару прописана в в config.h а также в Sonar.ino в шапке:

* Connections HC-SR04 or DYP-ME007:
* PROMINI:
* VCC <-> VCC
* trig(T) <-> A2
* echo® <-> D12 (or D8, see definitions below)
* GND <-> GND
*
* MEGA:
* VCC <-> VCC
* trig(T) <-> D12
* echo® <-> D11
* GND <-> GND

// for PROMINI
//#define SONAR_PING A2 // PIN that trigger measure
//#define SONAR_READ 12 // PIN to read response pulse, 12 or 8

//for MEGA
#define SONAR_PING 12 // PIN that trigger measure
#define SONAR_READ 11 // PIN to read response pulse

Eще полезный дефайн SONAR_BARO_PID_GAIN. Он задает НА сколько увеличивать ПИДы (P-часть), когда сонар хорошо видит поверхность без ошибок. Если SONAR_BARO_PID_GAIN=1, то ПИДы на “чистый сонар” (над поверхностью без ошибок) будут в 2 раза больше и точность удержания будет выше соот-но.

  1. Добавлена более правильная калибровка компаса от чела Eosbandi www.multiwii.com/forum/viewtopic.php?f=8&t=649&sta…, который собственно привнес адекватную поддержку GPS в mwii и написал Win-GUI. Поэтому надо перекалибровать компас, даже если вы это уже делали в b4…

---------------------------------------------------------------------------------------------------------------

Tакже вы найдете много интересного и полезного в описании дефайнов на английском в самом config.h и еще раз напомню что стоит прочитать описание b1-b4.

VARIO (velocity) controlled altitude ascend/descend for Alt-Hold mode (function).

Звучит страшно наверное, но в общем то получилась довольно крутая штука! Это то, как на самом деле должна работать регулировка высоты, для режима удержания высоты.
По простому: отклонение стика задает вертикальную скорость подъема/снижения (отдельный ПД контроллер). И именно скорость, а не высоту. Это позволяет не зависеть от платформы, т.е. веса коптера, открывает путь к управляемым авто-режимам и конечно же к “правильной” автопосадке, где даже сонар уже не нужен, т.к. режим на 99% держится на акселерометре и лишь 1% - это барометр (для коррекции ошибок акселя), соот-но эффект “воздучной подушки”, чего так боялся барометр (и начинал врать на низких высотах), уже почти не ощутим. По слухам, именно по такому принципу работают крутые контроллеры, типа немцы и наза 😉
Есть нюансы пока, типа что считать центром, 50% газа или точку активации режима удержания высоты, но для начала у меня получилось отлично думаю! То что алгоритм работает правильно, говорят ПИДы подобранные с первого тычка и то в GUI 😃

Сам не облетал, т.к. до сих пор не добрался до ремонта, но народ на оф. форуме уже и видео заснял 😉

MultiWii_2_1_b2: продолжимс :)

Фишки:

  1. контролируемое снижение/набор высоты на новом althold’е.
    Медленно увеличивает/уменьшает высоту заданную при активации аlthold-а, пропорционально отклонению стика газа от точки, в которой althold был включен. (+100 единиц газа (учтывая настройки экспоненты) дает примерно +50см в секунду. при цикле 3-4 мс… в ГУИ 3000-4000)
    позаимствовал у alexmos 😃

2)предустановленное начальное значение газа для altholda будет вычислено из средней точки (MID) экспоненты газа, заданной в GUI. (т.е. значение газа не берется в момент активации холда, а высчитывается).
примечание: есть компенсация на просадку аккумулятора, т.е. к высчитанному значению газа по MID, будет добавлено значение из дефайна ниже
//#define INITIAL_THROTTLE_HOLD_FROM_MID_EXPO_POINT 40

3)коррекция газа в зависимости от наклона коптера (по умолчанию 100. не ставьте более 200).
по идее дает компенсацию по высоте (убирает просадку) в начале движения коптера
//#define THROTTLE_ANGLE_CORRECTION 200

4)установка высоты автовозврата. Если Althold активирован во время возврата домой (или возврат во время altholda) будет удерживать данную высоту.
#define ALT_TO_RTH 1000 // in cm… = 10m

5)высота после завершения возврата домой, т.е. автоснижение.
не устанавливать менее 200 (2 метра) так как ниже работает нестабильно.
#define ALT_TO_RTH_FINISH 350 // in cm… = 3.5m

  1. когда крен или тангаж превышает заданную величину, удержание позиции (PH) отключается и включается с новыми координатами когда стик возвращается в центр. Это делает возможным летать в PH.
    #define GPSHOLD_DEADBAND 30

7)остальные отличия от 2.1_b1 тут и тут

инструкция, если не летит альт холд
www.multiwii.com/forum/viewtopic.php?f=8&t=2371&p=…

upd: для Crius SE пришлось отрубить GPS_FILTERING и SBAS, иначе не влазит… вроде как писали, что у некоторых без фильтра даже лучше работает 😉

MultiWii_2_1_b1: ПА-ЛИ-ТЕ-ЛИ!!! :)

Решил наконеЦ выложить прошивку.
По умолчанию выбраны: QUADX и CRIUS_AIO_PRO_V1

Изменения в сравнении со стоковой 2.1:

  1. новый Alt Hold! Детали тут.

  2. Новая фишка удержание заданной высоты при возврате домой (RTH). Наконец заработала адекватно… с адекватным алт холдом 😃 Раньше при наборе высоты с 2-х до установленных 10-ти метров, просто пролетал на 7-10 метров выше и потом уже в течении 20-30 сек возвращался на заданные 10 метров… а иногда выше на воздушных потоках вообще не хотел снижаться…
    Чтобы включить ищите дефайн в конфиге:

// set altitude to RTH. If Alt-hold activated during the RTH it will keep specified altitude.
#define ALT_TO_RTH 700 // in cm... = 7m

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

Для исползования с FS (fail safe) приемника нужно соот-но врубить: alt hold, RTH, stab/level mode, газ установить на газ висения + 30…50 единиц для компенсации просадки батареи. Т.е. алт холд эти 50 единиц компенсирует на свежей батарее, а на просадке это даст нужный уровень газа для удержания высоты…
В планах поковырятся с GPS.ino и добавить авто снижение после выполненного RTH…

  1. если у вас frsky телеметрия и аппа аля Turnigy 9x, то есть возможность видеть все необходимые параметры (высота, азимут, гпс координаты, скорость по гпс, кол-во спутников, растояние до дома) прямо на пулте…
#define TELEMETRY_FRSKY 

Детали тут.

на пулте будет:
alt - высота,
T1 - растояние до дома,
T2- кол-во спутников,
RPM - газ умноженный на 10 с дискретностью 30 (т.е. без последнего нуля дискретность =3)
spd (gps)- скорость по гпс
alt (gps) - азимут/курс,
lan/lot - гпс координаты

  1. Для ГПС добавлена активация SBAS/WAAS по МТК протоколу (на mtk3339 активируется норм… проверял через MiniGPS_v1.7.1). Эта функция по идее увеличивает точность определения координат…
    Также если ГПС модуль не прошит на 115200/10гц с выбором соот-х фреймов в MultiWii_2_1_b1.ino можно найти GPS_INIT_BAUD дефайн и раскоментировать нужный код…

  2. более правильные миксы для HEX6 и HEX6X
    Детали тут.

Доп. изменения по мелочи:

  • функция защиты включения моторов, если активирован альт холд… чеб не наломать дров, a то может и прыгнуть, если стартовать на альт холде 😃
  • калибровка магнетометра 50 секунд вместо 30-ти
  • фильтр на гиру 42гц
  • вес гиры к магнетометру в IMU = 400, чтобы уменьшить шум магнетометра…
  • акро пиды, альт холд пиды + рцрэйт
  • DEADBAND = 15
  • MAG connected to the AUX I2C bus of MPU6050
Aльт-холд с использованием акселерометра!

У меня опять зачесались руки и накопив уже небольшой багажик знаний переписал таки алть-холд с использованием акселерометра! 😃
Результат хорош, держит ветер неплохо и компенсирует сильные пинки руками вниз-вверх, также держит высоту при пролетах (на длительных скоростных пролетах могут быть провалы до 2-3м). В среднем скачет +/-20…40см в покое (в соот-ии с точностью барометра) и до метра в пролетах.

  • все тесты проводить на высотах от 1.5, а лучше 2 метров дабы избежать эффекта воздушной подушки, когда баро очень не стабилен и начнает врать на минус 1-2м…
    a ниже - только сонар даст стабильное удержание…

  • аксель нужно откалибровать, т.к. все вычисления главной компоненты удержания высоты (скорости) по нему…
    и если у вас шумный аксель, аля ADXL345, то желательно чтобы он был задемпфирован от вибраций, иначе чуда не будет 😉

  • баро необходимо закрыть паралоном от солнца и поместить в колпак от ветра. Т.к. наблюдал изменения высоты (ms5611) от 3-х до 10-ти метров (!) за 2-3 сек. при прямом попадании солнца из-за тучи!

  • пиды 5.2-0.020-30, a вот примерно как их крутить

  • после подачи питания надо обождать 10-15 сек что бы все фильтры и интегратор устаканился, после этого в гуи дебаг1 (ускорение) и дебаг3 (скорость) могут плавать около нуля… на дебаг3 (скорость) шум до +/-10-ти допускается, но шуметь должно около нуля…
    note: для программеров дебаг1 это дебаг0, и дебаг3 это дебаг2 cоот-но 😉

  • если не адeкватно себя ведет, то тут и тут как проверить в GUI

  • если у вас bmp085 и не выходит настроить точность удержания хотя бы +/-1 метр, сперва попробуйте ПИДы 3.0-0.015-25 либо по инструкции выше… не помогло? попробуйте заменить IMU.ino на IMU.ino.bmp085 (взять из MultiWii_2_1_b1… предварительно переименовав в IMU.ino)… там зажаты фильтры чутка, спецом под bmp085… но я тестил только в ГУИ… пробуйте!

www.multiwii.com/forum/viewtopic.php?f=8&t=2371&p=…
www.multiwii.com/forum/viewtopic.php?f=8&t=2371&p=…

Факи по вию.

Т.к. приходится часто писать одно и тоже, попробую начать писать факи на популярные вопросы:

- Коптер крутит по YAW. Что делать?

Что нужно проверить/настроить?

  1. регули откалиброванны на одинаковый диапазон газа!

  2. Аппа по yaw ~1500. Проверять в GUI вия! Находим макс. погрешность. Отводим стик в мин. положение и потом медленно возвращаемего в центр, под действием пружины в аппе, т.е. просто замедляя действие пружины. Запоминаем мин. значение (к примеру 1492). Потом проделываем тоже самое для макс. значения. Далее отводим стик на мин/макс позицию и отпускаем/отстреливаем под действием пружины аппы и также находим мин/макс значения, но они как правило меньше чем с “плавным” возвратом стика… Желательно проделать тоже самое для ролл/питч сразу, чтобы найти оптимальное значение для DEADBAND (мертвая зона стиков для полетного контроллера)…
    Теперь берем макс-е отклонение от центра, добавляем 3-4 единицы и вписываем в DEADBAND в config.h
    например 1500-1492+4 = 12

После этого тримы не трогаем!

  1. Тут все процедуры с выключенным магнетометром!
    Hужно отстроить коптер по механике, чтобы нос не крутило. Временно выставляем yaw I в ноль и взлетаем, если за минуту не крутит более чем на 10-30 град. то все ОК по идее и интегральная составляющая будет держать как надо. Возвращаем yaw I на место (0.04-0.07), взлетаем, должно быть все ок, т.е. кручение не более 10 град. в минуту…
    Если крутит сильно (при yaw I=0), то у вас скорее всего: не калиброванны регули, не равномерно-мощные моторы (где то износ более к примеру: подшипник или магниты ослабли от перегрева), моторы не строго параллельны горизонту (кривой мотормаунт, круглые лучи рамы с маунтами закрепленными не строго по горизонту и т.д.)… Лечить можно изменением наклона мотора, подгибанием мотормаунта к примеру, если конструкция позволяет… К примеру коптер крутит по часовой стрелке, значит для компенсации подгибаем мотор вправо… Полечили? Возвращаем yaw I на место и т.д.

Далее компас. Если учесть все его “слабости” и после этого откалибровать (крутить по 3-м осям в течении 30 сек.), то проблемы уйдут… вот тут перетерли:
rcopen.com/forum/f123/topic221574/5502
rcopen.com/forum/f123/topic258132/463

MultiWii_2_0_a0 порт a2 в 2.0 прошивку.

Как и писал тут, пока ничего нового. Улучшения из а2 добавлены в 2.0 прошивку.
Сделал только чутка резче ПИДы и немного изменил настройки НЧ фильтра акселя + поднял вес гиры в КФ.

з.ы. в 2.0 поменяли оси itg3200 гиры, потому проверьте все основательно в ГУИ.

MultiWii_1_9_a2: Обновление.

Всем привет!

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

Изменения в сравнении с MultiWii_1_9_a1 незначительные но полезные:

  • еще уменьшил частоту среза НЧ фильтра для акселя и поднял гиро фактор до 400. Субъективно вроде еще лучша стало…
    размышлизмы тут:
    www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
    www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
  • чутка уменьшил level I… теперь взлетает практически как по рельсам в акро моде…
  • внутренние НЧ фильтры акселей выставлены в соответствии с [/COLOR]интегратором который в ALT HOLD (40hz update rate - 20hz LPF on acc):
    ADXL345 => 25hz
    BMA180 => 20hz
    BMA020 => 25hz
    Если барометра нет и стаб. мод всеж пидалит, то можно поиграться с НЧ фильтром на понижение (только для ADXL345 и BMA180, т.к. для BMA020 25гц это мин.). Смотрите Sensors.pde, там закомментированы строчки для различных частот:
    для ADXL345

//i2c_writeReg(ADXL345_ADDRESS,0x2C,0x06); // rate=6.25hz, bw=3.13hz (see table 7 of the spec)
  //i2c_writeReg(ADXL345_ADDRESS,0x2C,0x07); // rate=12.5hz, bw=6.25hz (see table 7 of the spec)
  //i2c_writeReg(ADXL345_ADDRESS,0x2C,0x08); // rate=25hz, bw=12.5hz (see table 7 of the spec)
  i2c_writeReg(ADXL345_ADDRESS,0x2C,0x09); // rate=50hz, bw=25hz (see table 7 of the spec)
  //i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0A); // rate=100hz, bw=50hz (see table 7 of the spec)
  //i2c_writeReg(ADXL345_ADDRESS,0x2C,0x0B); // rate=200hz, bw=100hz (see table 7 of the spec)

для BMA180


  //control = control | (0x00<<4); // set low pass filter to 10Hz (bits value = 0000xxxx)
  control = control | (0x01<<4); // set low pass filter (or bw) to 20Hz (bits value = 0000xxxx)
  
  • добавлен драйвер пират-сонара DYP_ME007, а таке попытки ПИД регуля к нему… статус: не летает пока 😃
    все изменения в архиве ниже… есть идеи? велкам!!!

з.ы. для удобства и статистики отзывы пишите сюда плз.

MultiWii_1_9_a1: Лечу на стоке :)

Имея уже не малый опыт в MultiWii рискну выложить модифицированную 1.9 прошивку, которая по идее поднимет вашу птЫчку на стоке.

Были поставлены (и достигнуты) цели:

  1. Плавная динамика коптера в полете (предустановленные ПИДы), а также умеренный отклик с аппы (предустановленные рэйт и экспо). Т.е. это больше для новичков и FPV, чем для крутых АКРО перцев.
  2. Низкая чувствительность к вибрациям, а потому борьба с ними мат. путем, т.е. на резинках плату с сенсорами вешать не хотелось.
    Возможность использования не дорогих пропов соот-но. Сейчас вполне себе летаю на этих hobbyking.com/hobbyking/store/uh_viewItem.asp?idpr… (не без балансировки конечно же).
  3. Компенсация косяков дешевой аппы (аля HK6). Типа отсутствие экспо-тротл и уплывание от центра/нуля.
  4. Предсказуемый стаб. мод.
  5. Рабочий альт-холд как мин +/-1…1.5м
  6. Хелп мод если зарулился - simple mode (head free mode) от меня 😃 www.multiwii.com/forum/viewtopic.php?f=7&t=925

Предварительные требования/условия:

  • гира ITG3200/3205 (хотя по идее и WMP прокатит т.к. гиры менее чувствительны к вибро)
  • аксель bma020/180, ADXL345 либо любой другой имеющий диапазон как мин.+/-8g (если нунчак, то придется скорее всего вешать на резинки)
  • знаки осей сенсоров корректны
    www.multiwii.com/faq#How_should_be_the_sensor_axis…
  • аппа по всем стикам настроена на диапазон ~1100…1900
  • стики в центре на 1500
  • регули калиброваны (при прямом подключении с приемника)
  • MINTHROTTLE установлен в значение при котором моторы уверенно вращаются на мин. оборотах

Отличия от родной 1.9 прошивки:

  • THROTTLE_EXPO (от alexmos) для апп которые его не имеют, либо имеют но кривой. По умолчанию отключен. Для настройки нужно замерить тротл при отрыве от земли и вписать в THROTTLE_HOVER. При корректной настройке легко позволяет держать высоту с пульта. Подробности в коде, либо смотрите поиск по теме.
  • DEADBAND = 30 - помогает держать ролл/питч/яв в нуле. Опять же для апп типа HK6. Для хорошо отстроенных турниджи, спектрумов и т.д. подозреваю что хватит 10-ти, но при перепадах температур в 20-30 градусов не в курсе как они держат ноль.
  • MAXTHROTTLE = 1900 вместо 1850, т.к. регули калибруются с аппы на 1900 и выше как правило и чтобы не иметь “недомощности” на движках ставим хотя бы в 1900.
  • для более простой настройки аппы и возможности триммов особенно зимой на морозе:
    MINCHECK = 1150, MAXCHECK = 1850
  • ПИДы и рейт установлены для плавных мягких полетов как в акро, так и стаб. модах. Увеличен “I” (с нуля) для YAW, отлично держит нос!
  • прописал свои ПИДы для альт холд. Удавалось держать высоту +/-50см 1-2мин. не трогая тротл… а летать вообще песТня! 😃
  • ITG3200_LPF_42HZ - НЧ фильтр на гиру 42гц (на моем вибро-коптере дает лучший результат)
  • GYR_CMPF_FACTOR увеличен в 340.0f - ИМУ тогда больше смотрит на гиру чем на аксель, в итоге уменьшаем чувствительность к вибро.
  • MG_LPF_FACTOR = 4 - сглаживаем шум магнетометра
  • добавлен float LPF (~2…3hz) для акселя
  • т.к. на диапазоне +/-8g для акселя проблема с вибро решаема, TRUSTED_ACCZ включен по умолчанию для правильной калькуляции в ИМУ и использования асс Z для увеличения точности ALT HOLD.
    Тут можно сделать простой тест. Прижмите коптер к полу и плавно увеличивая газ до максимума, проверьте не просдает ли Z ось. Только берегите пальцы плз., т.к. тест надо проводить с пропами на борту. У меня (при +/-8g) просядает примерно на 70-80% газа, но это уже не рабочая зона, потому не страшно. Если же просядает в рабочей зоне, надеюсь у вашего акселя есть +/-16g, т.е. курите даташит, либо остатся резинко-демпфирование 😉
    www.multiwii.com/forum/viewtopic.php?f=8&t=849&sta…
  • для BMA020 выбран диапазон +/-8g, внутренний LPF 25hz, acc_1G тотже (255), но дискретность в 4 единицы, НО флоат ACC НЧ фильтр позволяет поднять разрешение, т.е. уменьшить дискретность на малых промежутках времени, что нам и нужно для стабилизации… одним словом BMA020 оказался крепким орешком, но мы его победили 😃
  • для BMA180 диапазон изменен на +/-8g, а внутренний LPF с 10hz на 20hz (т.к. 10hz мало для для интегратора который в ALT HOLD)
    #define UPDATE_INTERVAL 25000 // 40hz update rate (20hz LPF on acc)
    note: ДЛЯ BMA180 ИЗМЕНЕНИЯ ДЕЛАЛ ПО ДАТАШИТУ, НО ЗА НЕИМЕНИЕМ СЕГО СЕНСОРА НЕ ТЕСТИЛ! Но пока собирался выложить, примерно тоже самое уже появилось в дев прошивке, т.е. проверено 😉
    code.google.com/p/multiwii/source/…/Sensors.pde
  • для ADXL345 надо бы понизить внутренний LPF до ~20hz… надо смотреть даташит
  • добавлен head free mode подвешен на GPSHOME бокс в UI www.multiwii.com/forum/viewtopic.php?f=7&t=925
  • калибровка магнитометра с пульта: trottle(max) + yaw(max) + pitch(min)
  • калибровка акселя в полете (закоментированна т.к. висит хардкодом на AUX1>1700). Полезно зимой, т.к. при перепадах температур в 20-30 град. все безбожно уплывает.
  • мелочи типа калибровка магнитометра 50сек вместо 30…

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

Стаб. мод:

  • все аксели плывут при перепадах температур. bma020 к примеру на 20% при выходе на улицу в -10С, потому дайте птиЧке остыть мин 10-15. Отлетайте один пак в акро к примеру, периодически выполняя калибровку гиры.
    К bma180 это не относится, либо относится в меньшей степени, т.к. у него внутрях есть температурный сенсор и соот-но компенсация по нему…
  • остыли? калибруем и триммируем аксель

Альт-холд:

  • для корректной работы (точнее для компенсации невысокой точности барометра) также требует ACC, потому ACC должен быть откалиброван.
  • если барометр не под колпаком, чтобы защитить от ветра и потока от винтов наклейте на него пористый кусочек паралона. Только чур клей в дырку не лить )))