MultiWii
Полётный контроллер на основе Arduino - аппаратной вычислительной платформе, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wirin (типа С++). Называется так исторически потому, что в первых версиях были задействованы гироскопы из контроллера к игровой консоли Nintendo Wii (Wii Motion Plus и Wii Nunchuk), в данный момент платформа поддерживает большое количество сенсоров.
Платка продается в готовом виде, ничего паять не нужно. Изначально нужно было докупать гироскопы из контроллера Wii Motion Plus ($10) и акселерометр из контроллера Wii Nunchuk ($7), сейчас этого делать не нужно. Последние версии контроллеров Multiwii можно приобрести на rctimer.com или на Hobbyking, цена от 15 до 60$ в зависимости от функций.
Так как проект MultiWii работает на Arduino, то по идее все железо MultiWii совместимо с проектом Ardupilot, собственно есть такая команда ArduPirates которая занимается портированием кода Ardupilot на MultiWii (или наоборот как кому нравится). Что делает железо для MultiWii очень привлекательным вложением.
Контроллеры с процессором Atmega 2560 и датчиками последнего поколения MPU6050 (All In One Pro v1, v2) обеспечивают хорошее качество полета при невысокой цене (около 60$).
Преимущества
- Держит горизонт.
- При наличии магнетометра (компаса) держит курс.
- Обычно на плате уже есть USB порт, так что код заливается с компьютера без программатора и обновляется за секунды.
- Настройка MultiWii происходит через удобный графический интерфейс. Можно настроить чувствительность аппы, вручную оттриммировать акселерометр, тогда в горизонте он вообще будет висеть в точке в безветренную погоду. Для опытного пользователя есть возможность копаться в коде
- Регулярно обновляются прошивки
- Очень универсален, поддерживает практически все существующие виды рам трикоптера. Можно пилотировать 3D в акро-режиме, летать блинчиком вокруг себя и по FPV.
- MultiWii при должной настройке летает очень стабильно как в режиме только с гироскопом, так и со всей компанией датчиков.
- Подходит для аэрофото/видеосъёмки. Если сделать все аккуратно (рама, моторы, пропеллеры, виброзащита), то абсолютно нормально можно летать и снимать. Контроллер прост и надежен, ни разу не было такого, чтобы из-за MultiWii упал коптер. Может работать в качестве автономного контроллера подвеса.
- Возможно подключение Bluetooth или радиомодема для беспроводной настройки.
- При использовании процессора Atmega2560 возможно использование функций GPS.
- Существует версия Multiwii, портированная на процессоры stm: Afroflight (Naze32), однако этот проект поддерживается одним человеком, и его скорость развития под вопросом.
Поддерживаемые системы
- стабилизатор подвеса камеры
- бикоптер (например, как GunShip из фильма Аватар)
- трикоптер
- квадрокоптер
- мультикоптеры Y4 и Y6
- гексакоптер
- октокоптер
- летающее крыло
Требования
- Так как проект бюджетный, то и датчики в ней бюджетные, а значит их надо максимально защищать от вибраций. Насколько аккуратно будет сделана рама, отбалансированы пропеллеры и моторы, настолько и стабильно будет летать коптер.
(с датчиками последнего поколения качество полета заметно лучше)
- Платы продаются без корпуса, желательно как-то защищать плату от влаги, грязи и пр.
- Для использования компаса, его вместе с платой необходимо поднять выше над силовыми проводами, иначе он работать не будет. Возможно вынести компас вверх на отдельной плате (как сделано в Наза), но это менее надежно (в случае сбоя i2c-шины коптер может упасть).
Новое в версии MultiWii 2.0
Теперь вам необходима как минимум Arduino IDE версия 1.0, чтобы открывать *.ino файлы.
Сенсоры
Платы
- CRIUS_SE
- CRIUS_LIGHT
- MONGOOSE
- CHERRY6DOFv1_0
- DROTEK_6DOF_MPU
Процессор
Код сделан на основе ATMega 32U4, который может рассматриваться как промежуточный вариант между 328 и 2560, с кучей плюшек по сравнению с 328, но почти таким же размером. [1]
Портирование на STM32
Возможно портирование MultiWii на 32-битный процессор, в том числе перепрошить некоторые дешевые контроллеры полета на MultiWii, например FreeFlight FC, которую можно найти на сайте goodluckbuy или специально сделанный для этой версии AfroFlight32. [2] [3]
Режим стабильного полета (stable mode)
Настройки BMA180 и BMA020 изменены на 8G (было 2G). Было замечено, что вибрации приводят к переполнению акселерометров, вызывая неверное измерения и, как следствие, неверные углы PITCH/ROLL. Вероятно это было основной причиной "уплывания горизонта", т.е. стабильный режим с этими сенсорами теперь будет немного лучше. Одно из следствий: TRUSTED ACC теперь включено по умолчанию и наверное будет удалено в будущих версиях.
Значение D в PID LEVEL настройках теперь используется для ограничения эффекта коррекции угла. По умолчанию (D=100), поведение стаб. режима не поменялось. С более мелким D будет такой эффект: более плавное изменение уровня, должно убрать смертельные колебания.
Режим удержания высоты
Было много проб и ошибок этого функционала [4] [5]. Режим всё еще не особо хорош, но мы увидели большой шаг вперёд и, вроде бы, удержание высоты работает у большинства. Хотя ещё остались косяки. Velocity PID пока не используется в этом коде.
GPS
Теперь есть поддержка двух типов GPS:
- Serial GPS
- может быть подключен к свободному Serial port контроллера (требуется MEGA платка)
- Настройки в config.h:
#define GPS_SERIAL 2 // тут указываем номер порта #define GPS_BAUD 115200 // скорость
- Удержание позиции и возврат домой работают с Serial GPS.
- I2C Serial
Добавлен код работы с I2C GPS. Можно включить в config.h:
#define I2C_GPS
Позиция старта запоминается, когда GPS приемник "видит" хотя бы 4 спутника.
Имеется 2 режима работы с GPS:
- ReturnToHome: при включении режима коптер возвращается к координатам позиции старта (домой).
- PositionHold: при включении режима коптер остается в текущем положении.
GPS режимы требуют очень хорошо откалиброванного компаса, которому не мешают включенные моторы и хорошо летающий в стабильном режиме коптер.
PID настройки добавленные в GUI:
- P = угол наклона, пропорциональный дистанции до цели (дом или текущая позиция) с P=5.0 в GUI, 1 метр = 0.5 градусов наклона
- I пока не используется
- D = максимальный угол наклона в зависимости от коррекции GPS (15 для новичков)
Выходы на моторы и сервомашинки
Часть output.pde практически переписана с нуля. И теперь есть больше возможностей и комбинаций. Улучшена эффективность pwm: функция arduino digitalWrite arduino была удалена, чтобы обращаться напрямую к портам. Но теперь не так просто настраивать порядок двигателей.
На MEGA платках: первые 6 моторов теперь рулятся таймерами в 16 битном режиме. Разница заметна в полете на квадрике.
Расширен диапазон двигателей (для использования с wii-ESC; разрешение теперь 250 шагов против 125 шагов в стандарте) подробнее тут.
На 328p платках (например promini) у нас теперь следующие конфигурации:
HEX (FLAT X, FLAT +, или Y6)
- со стандартным приемником: 2 последний мотора на PIN A0 и A1 вместо D5 и D6 или использовать PPM SUM
- с 2-мя сервами для подвеса + 1 servo для нажатия на спуск камеры:
- с PPM SUM приемников: последние 2 мотора на PIN D5 и D6 и сервы на PIN A0/A1/A2
- со стандартным приемником: последние 2 мотора на PIN A0/A1 и сервы на PIN A2 и D12 (без сервы для кнопки камеры)
OCTO (FLAT X, FLAT +, X8)
- с любым приемников: на PINах 3, 9, 10, 11, A0, A1, A2 и12
- без серв
VTAIL
Летающее крыло. Успешно оттестировано.
LCD (дисплеи)
На данным момент поддерживаемые LCD:
- LCD_SERIAL_3W: исправлен 3х проводной LCD со Sparkfun, используя rx-pin для передачи на скорости 9600
- LCD_TEXTSTAR: модуль CW-LCD-02 (который имеет 4 кнопки для выбора меню)
- LCD_VT100: vt100 совместимый эмулятор терминала (blueterm, putty и т.д), как альтернатива GUI для любой терминальной программы (опц. и по BT), работает с большинством планшетных ПК, смартфонов и т.д. [6]
- LCD_ETPP: Eagle Tree Power Panel LCD, который использует i2c шину
- LCD_LCD03: LCD03, еще один экран с шиной i2c [7]
Середину положения сервомашинки (по умолчанию сигнал PWM 1500) можно менять через LCD (как триммирование на передатчике) для летающего крыла и трикоптера
LED (светодиоды)
I2C LED Ring устройство с 12 RGB-светодиодами включено как опция в MultiWii чтобы давать больше информации о состоянии сенсоров. [8] [9]
режим HeadFree
Нечто похожее на режим CareFree (Mikrokopter). Впервые представлен Mahowikом как simple mode. Специальный бокс добавлен в GUI, чтобы включать этот режим с передатчикам. Вам нужны будут магнитометр и акселерометр. Принцип работы: "Перед" запоминается при запуске двигателей, т.е. вы можете включать/выключать этот режим во время полета.
Pass-through mode
Это чекбокс в GUI. Отвечает за отключение IMU для некоторых конфигураций, таких как Летающее крыло.
Пищалка
Чекбокс в GUI. Активация пищалки (если она конечно есть), например когда вы потеряли коптер в высокой траве.
Новая комбинация стиков
Для калибровки магнитометра (газ вверх, yaw вправо, pitch вниз)
Улучшена калибровка магнитометра
Калибровка магнитометра стала более точной. Основано на коде. И это должно улучшить работу GPS.
Сглаживание гироскопа
Две опции для сглаживания гироскопа (в основном для летающего крыла):
- по осям, основанное на LPF: #define GYRO_SMOOTHING {20, 20, 3} // средние значения для roll, pitch, yaw
- для всех осей (код Magnetron)
#define MMGYRO #define MMGYROVECTORLENGHT 10
Сглаживание работы подвеса/серв основано на тех же принципах:
#define MMSERVOGIMBAL #define MMSERVOGIMBALVECTORLENGHT 32
Калибровка акселерометра в полете
Это способ калибровки уровня, во время полетных тестов. Должно быть включено в config.h
#define InflightAccCalibration
Некоторые другие улучшения кода
- Используется меньше памяти.
- Теперь без функций работы с последовательный портом Arduino, от этого передача данных стала более эффективна.
- Ориентация платы и сенсоров: это то что было не очень хорошо сделано в начале. Эти изменения не должны влиять на платы сенсоров (смена осей уже была сделана). Про ориентацию раздельных датчиков: теперь всё немного не так и придется пересматривать расположение осей ваших датчиков в коде.
- Изменения в рабочем цикле, для его стабильности.
GUI
- Ошибки I2C шины отображаются в GUI
- Новые чекбоксы для AUX3/AUX4 каналов. Теперь больше возможностей для включения/выкллючения разных функций (4 переключателя в 3 состояниях для 8 каналки)
- Прошлые CAM1/CAM2 каналы (теперь они AUX3/AUX4) все еще можно использовать для управления PITCH/ROLL подвеса, если чекбоксы AUX3/AUX4 не используются.
- Визуальный отклик на все состояния auxN каналов.
- GUI показывает полную версию прошивки контроллера.
- Версия WinGUI от EOSBandi. Она более дружелюбна чем java версия и предоставляет больше возможностей вроде загрузки/сохранения конфигурации.
OSD
rushduino это почти arduino платка с возможностями OSD. Очень гибкое open source решение, и оно подключается к последовательному порту multiwii чтобы забирать данные с сенсоров.
MIS OSD так же обновлен: multiwii может брать GPS информацию с OSD и наоборот.
Crius MultiWii
Популярная плата-контроллер MultiWii, сочетает в себе 328p процессор и набор датчиков.
Существует 2 версии контроллера:
- Crius MultiWii Lite Edition - гироскоп ITG3205 и акселерометр ADXL345
- Crius MultiWii Standart Edition - гироскоп ITG3205, акселерометр BMA180, барометр BMP085 и компас HMC5883L
Так же контроллер может комплектоваться FTDI-переходником для подключения к компьютеру и загрузки новой прошивке.
Настройка
- Скачать исходный код Multiwii (на момент написания текста последняя версия 2.2)
- В файле config.h раскомментировать нужные строки кода, в зависимости от типа имеющейся платы (например #define QUADX, #define CRIUS_AIO_PRO_V1, #define MOTOR_STOP)
- Скомпилировать с помощью Arduino IDE и загрузить прошивку в плату
- Откалибровать акселерометр и (при необходимости) компас
- Смотря на графики, проверить правильность работы датчиков по следующему алгоритму
1) TILT the MULTI to the RIGHT (left side up):
MAG_ROLL, ACC_ROLL and GYRO_ROLL goes up
MAG_Z and ACC_Z goes down
2) TILT the MULTI forward (tail up):
MAG_PITCH, ACC_PITCH and GYRO_PITCH goes up
MAG_Z and ACC_Z goes down
3) Rotating the copter clockwise (YAW):
GYRO_YAW goes up
4) The copter stays level:
MAG_Z is positive ; ACC_Z is positive
- Проверить end-points на аппаратуре, чтобы минимум был около 900мс, максимум 1900 (иначе моторы не запустятся)
Если все нормально, можно лететь.
Если крутит по YAW
Проверить/настроить:
- Регули откалибровать на одинаковый диапазон газа!
- Аппа по yaw ~1500. Проверять в GUI! Находим макс. погрешность. Отводим стик в мин. положение и потом медленно возвращаем его в центр, под действием пружины в аппе, т.е. просто замедляя действие пружины. Запоминаем мин. значение (к примеру 1492). Потом проделываем тоже самое для макс. значения. Далее отводим стик на мин/макс позицию и отпускаем/отстреливаем под действием пружины аппы и также находим мин/макс значения, но они как правило меньше чем с "плавным" возвратом стика... Желательно проделать тоже самое для ролл/питч сразу, чтобы найти оптимальное значение для DEADBAND (мертвая зона стиков для полетного контроллера)...
- Теперь берем максимальное отклонение от центра, добавляем 3-4 единицы и вписываем в DEADBAND в config.h - например, 1500-1492+4 = 12
- После этого тримы не трогаем!
- Далее все процедуры с выключенным магнетометром! Hужно отстроить коптер по механике, чтобы нос не крутило. Временно выставляем yaw I в ноль и взлетаем, если за минуту не крутит более чем на 10-30 град. то все ОК по идее и интегральная составляющая будет держать как надо. Возвращаем yaw I на место (0.04-0.07), взлетаем, должно быть все ок, т.е. кручение не более 10 град. в минуту...
Если крутит сильно (при yaw I=0), то у вас скорее всего: не откалиброваны регуляторы, неравномерно мощные моторы (например, где то износ больше: подшипник или магниты ослабли от перегрева), моторы не строго параллельны горизонту (кривой мотормаунт, круглые лучи рамы с маунтами закрепленными не строго по горизонту и т.д.)... Лечить можно изменением наклона мотора, подгибанием мотормаунта к примеру, если конструкция позволяет... К примеру коптер крутит по часовой стрелке, значит для компенсации подгибаем мотор вправо... Полечили? Возвращаем yaw I на место и т.д.
См. также
Ссылки
- Официальный сайт проекта
- Multiwii - положительный опыт
- Большая тема на RCDesign
- Build log от kinderkram
- Обсуждение на RCGroups
- Инструкция со всеми схемами подключения датчиков, арудин и прочее.
- Репозиторий всех версий кода для MultiWii
- Crius Hobby MultiWii
- Код для использования Акселерометра LIS302DLTR в MultiWii
Видео
Где купить
Есть вариант купить любую Arduino платку (328p,1280 или 2560 чипом, на 168 может очень мало влезть) + датчики.
А есть вариант:
Готовые платы с датчиками
- MultiWii+Gyro+Accel на goodluckbuy.com за $42
- MultiWii+Gyro+Accel+Baro+Compas на goodluckbuy.com за $55
Следует учесть что для подключения к компьютеру часто требуется переходник с UART на USB, на основе FTDI чипа, если он уже не встроен на плату или не входит в комплект. Купить можно, например, тут.
Датчики
Если не входят в контроллер.
Всё в одном
Гироскопы
Акселерометры
- ADXL345 goodluckbuy ebay
- BMA020
- BMA180 ebay
- LIS3LV02
- LSM303DLx_ACC
- Аналоговые (#define ADCACC) adxl335 adxl335 и нонейм
Барометры
Магнитометры