MultiWii
Описание
MultiWii - Полётный контроллер на основе Arduino - аппаратной вычислительной платформе, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wirin (типа С++). Называется "MultiWii" исторически потому, что в первых версиях были задействованы гироскопы из контроллера к игровой консоли 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
- CRIUS_AIOP V2
- 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-переходником для подключения к компьютеру и загрузки новой прошивке.
Сборка (соединение элементов)
Любые датчики подключаются через I2C интерфейс. Для arduino с 328 чипом это 4 провода GND (земля/общий провод), VCC (5 или 3.3в в зависимости от вашего типа датчиков) SDA (A4) SCL (A5).
Прошивка
Рекомендуется использовать Arduino IDE версии 0023 и выше - в зависимости от версии вашей прошивки (ВНИМАНИЕ 2.0 версия требует Arduino IDE 1.0, версии ниже работают с Arduino IDE 0023)
Скачайте последнюю стабильную прошивку (в названии которой нет dev) и откройте через Arduino IDE.
Настройка прошивки
Сверху вы увидите несколько вкладок, нас будет интересовать только config.h
В зависимости от используемого вами оборудования (датчики, контроллеры скорости, количество моторов) требует настроить прошивку.
- Раскоментируйте (удалив //) одну из строк #define MINTHROTTLE с указанием минимального значения газа, при котором вращаются пропеллеры - это очень важно! Значения могут варьироваться в зависимости от марки ваших регуляторов скорости.
- Аналогичным образом выберите тип вашего летательного аппарата, раскоментировав одну из строк после The type of multicopter
- Укажите направление разворота (очень важно задать для трикоптера, иначе будет крутиться как бешеный) - #define YAW_DIRECTION
- Скорость I2C шины (в ней подключены датчики) - #define I2C_SPEED, обычно достаточно оставить стандартное значение.
- Если вы используете 3.3 сенсоры - закоментируйте (добавив/оставив // перед строкой) строку #define INTERNAL_I2C_PULLUPS, если 5в, то раскоментируйте.
- Ниже, в разделах I2C gyroscope, I2C accelerometer, I2C barometer, I2C magnetometer, ADC accelerometer расскоментируйте используемые вами датчики. Если вы испольуете готовую плату с датчиками, например AllInOne или FFIMU, то выберите соответствующую плату из списка выше (при этом обязательно оставить закоментированными строки про отдельные датчики).
Расширенные параметры
Ориентация датчиков
Если ваши отдельные датчики ориентированы не верно или вам так удобнее, то порядок и направление осей можно поменять в конце файла, раскоментировав нужные строки
#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = X; accADC[PITCH] = Y; accADC[YAW] = Z;} #define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = -X; gyroADC[YAW] = Z;} //#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = Z;}
Настройки MultiWii для трикоптера
Для трикоптера следует настроить параметры отклонения сервы (поворотный механизм), для этого с помощью стика YAW отклоняется поворотный узел и запишите максимальное и минимальное (пока не упрется во что-то) отклонение сервы в GUI
#define TRI_YAW_CONSTRAINT_MIN 1340 #define TRI_YAW_CONSTRAINT_MAX 1855
Попробуйте взлететь, если коптер немного крутит, оттриммируйте YAW на пульте, посмотрите на значение сервы во время симуляции полета (реально моторы не крутятся, но в GUI заведите коптер и газ на серединку) и запишите в параметр TRI_YAW_MIDDLE
#define TRI_YAW_MIDDLE 1630
Настройка кривой газа
Включение кривой газа
#define THROTTLE_EXPO
Значение газа в момент отрыва от земли, следует смотреть в GUI при полной нагрузке коптера
#define THROTTLE_HOVER 1490
Сдвиг кривой газа, если оставить 1500, то взлет и зависание будет примерно по середине стика газа
#define SHIFT_HOVER 1500
Настройка FAILSAFE
Раскоментируйте эту строку, если хотите чтобы FAILSAFE работал (внимание! проверьте всё перед реальным полетом, failsafe не всегда срабатывает при потере сигнала)
#define FAILSAFE
Время ожидания активации. 1 шаг = 0.1 сек, т.е. 10 - означает, что при потере сигнала через 1 секунду включиться faisafe
#define FAILSAVE_DELAY 10
Время до полного отключения моторов после посадки. 1 шаг = 0.1 сек, т.е. 200 - означает что через 20 секуд после включения faisafe моторы будут отключены
#define FAILSAVE_OFF_DELAY 200
Уровень газа, при котором коптер медленно снижается, можно задавать относительно значения MINTHROTTLE (как тут)
#define FAILSAVE_THR0TTLE (MINTHROTTLE + 100)
Настройка подвеса камеры
Раскоментируйте эту строку, чтобы активировать выходы на сервы подвеса камеры
#define SERVO_TILT
Настройки серв (аналогично для ROLL и будьте готовы что 1500 не центр сервы)
#define TILT_PITCH_MIN 1020 // минимальное значение сервы, не ставьте меньше 1020 #define TILT_PITCH_MAX 2000 // максимальное значение сервы, не ставьте выше 2000 #define TILT_PITCH_MIDDLE 1500 // центральная позиция сервы (параллельно плоскости горизонта)
Скорость и направление вращения сервы. Чем выше значение, тем сильнее отклоняется серва пропорционально углу наклона коптера, если изменить знак, например -10, серва будет вращаться в другую сторону.
#define TILT_PITCH_PROP 10
Для активация стабилизации подвеса в GUI (для 2.0) надо установить 3 кубика рядом с CAMSTAB (или какой то один, для активации по тумблеру). Каналы AUX3 и AUX4 отвечают за дополнительное отклонение серв.
Если регуляторы слишком медленные
То есть если не получается нормально летать, то стоит попробовать понизить частоту датчиков, для этого внутри кода самих датчиков закомментировать (добавить //) строку
TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz*
а в config.h выставить
#define I2C_SPEED 100000L //100kHz normal mode, this value must be used for a genuine WMP
Проверено, стабильность полета возрастает в разы даже на дешевых 8kHz регуляторах.
Загрузка прошивки
Подключите вашу плату Arduino к компьютеру и выберите порт в меню Tools->Serial port и тип платы в меню Tools->Board.
Затем выберите File->Upload to I/O Board, чтобы загрузить прошивку на вашу Arduino. Загрузка занимает около 30-50 секунд, если увидели надпись Done Uploading (в черном блоке внизу Arduino IDE), то можно приступать к следующему шагу.
Настройка через GUI
После загрузки в Arduino, программное обеспечение устанавливает стандартные настройки во время первого старта. Эти настройки могут не подойти для вашего коптера, так как автор проекта настроих их под себя (моторы / ESC / пропеллеры / вес).
Как и у большинства мультироторных контроллеров, в MultiWii используется ПИД-регулятор (PID-регулятор), который включает в себя 3 отдельные параметра: Пропорциональная, Интегральная и Дифференциальная составляющая. Изменения в этих параметрах влияют на стабилизацию (более подробно читайте в теории настройки ПИД).
Графический интерфейс (GUI) это java программа которая может быть запущена на любом ПК с windows, linux или mac.
- MultiWiiConf 1.9 без opengl под 32 и 64 битные версии ОС, так же работает на arm архитектуре.
- MultiWiiConf 1.9 без opengl под 57600 кбит/с.
- MultiWiiConf 1.9 без opengl под 9600кбит/с.
- MultiWiiConf_2.4
Arduino следует подключить к компьютеру через USB кабель (или Bluetooth, или любой другой доступный вариант).
Процедура настройки
- Подключите Arduino к ПК
- Запустить GUI и выберите COM-порт, соответствующий вашей плате Arduino (тот же что выбирался при загрузке ПО в контроллер).
- Подождите несколько секунд, пока ПО будет запущено. (мигание светодиода)
- Когда светодиод погаснет, нажмите кнопку START и посмотрите на график (должны появится значения).
- Перед редактированием параметров, нажмите READ.
- Для сохранения параметров нажмите WRITE.
- Для изменения числовых параметров - нажмите на поле мышкой и двигайте вверх/вниз или влево/вправо(не помню).
Стандартные значения могут быть сброшены если залить старую версию ПО, а затем новую.
Описание параметров
- RC rate задает чувствительность мультикоптера на PITCH и ROLL стики. Если вы чувствуете что ваш коптер слишком резвый, уменьшите это значение. А если хотите увеличить реакцию на стики, увеличьте этот параметр.
- RC expo задает плавность зоны возле центра стиков PITCH и ROLL. Значение меняется от 0 (без экспоненты) до 1.
Если вы не понимаете эти значения, то рекомендуется прочитать документацию к вашей аппе (аппаратуре управления), часто эти функции уже встроены. Лучше использовать multiwii вариант так как точность будет выше.
- P и I Level указывает влияние акселерометра в режиме стабилизации. Если коптер не стабилен после активации - уменьшите значение P.
- PITCH/ROLL/YAW PID и rate Для очень стабильного коптера, PID значения должны быть высокими. Но если вы захотите делать что-то акробатическое с этими значениями, мультикоптера начнет сильно дрожать/раскачиваться. Решение - уменьшить PID, в ущерб стабильности системы.
- Поэтому чтобы переключаться между двумя настройками PID, теперь есть 2 опции в GUI чтобы определить способ уменьшения PID, в зависимости от ROLL/PITCH/YAW отклонений стиков.
- Два поля для ввода справа устанавливают скорость уменьшения нормальных значений PID (который используется на нейтральных позициях ROLL/PITCH/YAW) в отношении отклонений стиков ROLL/STICK/YAW. На самом деле только P и D параметры подвержены этому преобразованию. Цель этого параметра не увеличить стабильность, а сделать коптер более маневренным. 0 = минимальное значение (для FPV или новичков); 0.4 = простенький акро; 0.7 = быстрый акро; 1 = мгновенный акро. Если вам не понятно, то оставьте это значение стандартным (0).
- См. также Теорию настройки ПИД
- THROTTLE rate Значение скорости уменьшения номинальных значений PID (которые используются при нейтральных положениях ROLL/PITCH) в отношении стика Throttle (газ). Цель этого значения - получить больше стабильности в ситуации использования больших значений газа, чем нужно во время подъемов. Как правило дело в быстром смещении (стиков?). Если вам не понятно, то оставьте это значение стандартным (0).
Как активировать функции MultiWii
В зависимости от вашей конфигурации, вы можете легко менять функции MultiWii, используя 2 переключателя на вашей аппе на каналах 5 (AUX1) и (AUX2).
- LEVEL - выравнивание в горизонт (требует наличия акселерометра)
- BARO - дает возможность удерживать высоту (требуется барометр)
- MAG - позволяет удерживать курс (требует магнитометр(компас))
- CAMSTAB: если включено, PITCH и ROLL сервы следуют за отклонением коптера, позволяя держать подвес камеры в требуемом положении.
- CAMSTRIG: если активировано, серва переходит между минимальным и максимальным значением с нужность скоростью (например для нажатия кнопки фотографирования).
Чтобы активировать эти функции, вы должны нажать на серый блок, чтобы он стал белым в нужном положении переключателей на требуемом канале.
Если вы хотите чтобы опции были включены всегда - нужно отметить все квадратики белыми (так же полезно если у вас нет или заняты AUX1 AUX2 каналы)
Сенсоры (датчики)
Левая колонка показывает подключенные сенсоры. Правая колонка - активированные в данный момент опции.
Калибровка датчиков
Для калибровки акселерометра, выставите коптер параллельно горизонту и нажмите кнопку CALIB_ACC, GUI ненадолго подвиснет или странно поведут себя графики, после этого убедитесь что оси ROLL и PITCH параллельны.
Для калибровки магнитометра (компаса), нажмите на кнопку CALIB_MAG и вращайте коптер по всем осям или поочередно ставьте коптер на ребра в течении 30 секунд.
Смотря на графики нужно проверить правильность работы датчиков по следующему алгоритму
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
Запуск
Подразумевается что вы уже установили JAVA, Arudino IDE работает (рекомендуется использовать версию 0022), прошивка залита, запущен конфигуратор и он работает (после выбора порта и нажатии кнопки START график ожил и отобразился тип вашего коптера). Так же, если указано что требуется раскомментировать (убрать // перед строкой) или закомментировать (добавить // перед строкой), то эти действия выполняются в файле config.h (если не указан другой файл).
Калибровка аппаратуры управления
После успешного соединения программы конфигуратора с вашим коптером, справа сверху вы увидите голубые полоски, показывающие каналы вашего пульта, подвигайте стиками, чтобы убедится что все работает верно (ручка газа меняет значение throttle и т.д.).
Установите стики вашего пульта в центральное положение (включая газ и крутилки, если они используются для переключения режимов), значения во всех полосках должно быть близкое к 1500 (допускается небольшое подрагивание, которое следует убрать, раскоментировав в коде строку #define DEADBAND 5 и увеличив значение с 5, например до 10), если это не так - оттримируйте ваш пульт.
Теперь отклоняйте стики до максимума и минимума (end-points), значения должны находится в пределах 1000мс...2000мс (900мс..1900мс), если это не так - настройте ваш пульт согласно инструкции к нему. На всякий случай проверьте что по центру у вас 1500.
Помните что полоски должны двигаться в соответствии с движениями стиков, т.е. если вы поднимаете ручку газа вверх, то и полоска должна идти вверх (аналогично для других каналов), если это не так - сделайте реверс каналов вашего пульта.
Немного о безопасности
Когда проводите эксперименты или предварительные испытания - снимайте пропеллеры, во избежании случайных увечий, так же крайне не рекомендуется подключать одновременно аккумулятор и USB кабель от компьютера.
Использование стиков для управления
Перед подключением батареи убедитесь что ручка газа в минимальном положении.
Запуск моторов для трикоптера.
Остановка моторов для трикоптера.
Калибровка гироскопа (сперва отключите двигатели).
Калибровка акселерометра (сперва отключите двигатели).
Калибровка магнитометра(компаса) (сперва отключите двигатели).
Триммирование акселерометра (сперва отключите двигатели).
Если крутит по 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 на место и т.д.
Если коптер "дрожит" даже при маленьких значениях P, не держит высоту (без барометра), не держится на месте даже после триммирования пульта, акселя
Необходимо уменьшить вибрации от пропеллеров и двигателей (выбирайте качественные двигатели). Отбалансируйте пропеллеры. Ни в коем случае не пытайтесь закрепить полетный контроллер на виброизолирующую платформу, т.к. это внесёт задержку в управление, а также если она войдет в резонанс, то будет только хуже. Рекомендую крепить полетный контроллер на двухсторонний тонкий скотч на поролоновой основе. К сожалению, идеально отбалансировать пропеллеры не получится. Но можно программно ослабить высокочастотный шум (из-за вибраций) в показаниях гироскопа/акселерометра. Как это сделать (актуально для версии MultiWii 2.3):
- Открываем config.h
- Ищем по CTRL+F: Gyro filters
- Находим строки для своего сенсора (для контроллера Crius All In One это MPU6050)
- Частота среза по-умолчанию установлена на 256 Гц. Это идеальный случай, подходит только для микрокоптеров.
Для 10" пропеллеров частота вибраций от 140 Гц и выше. Следовательно выбираем частоту среза меньше, чем 140 Гц. В нашем случае это 98 Гц. Раскомментируем соответствующую строку, убрав // из начала строки. Рекомендуется подбирать частоту среза пошагово, от большей к меньшей. Как правило большинство коптеров начинают летать при частоте среза 42 Гц. Видео, в котором показано как уменьшая частоту среза можно внизить влияние вибраций на показания датчиков: https://www.youtube.com/watch?v=xgmYGK5GDDw
Если плата расположена под углом
При повороте платы на 45° нужно раскомментировать определение одной из следующих переменных
//#define SENSORS_TILT_45DEG_RIGHT // поворот платы на 45° вправо (по часовой) //#define SENSORS_TILT_45DEG_LEFT // поворот платы на 45 влево (против часовой)
При повороте платы на угол, кратный 90°, нужно в файле def.h поменять местами X и Y, а также пользоваться + или - перед ним.
#define ACC_ORIENTATION(X, Y, Z) {imu.accADC[ROLL] = -X; imu.accADC[PITCH] = -Y; imu.accADC[YAW] = Z;}
Видео
Где купить
Есть вариант купить любую 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 и нонейм
Магнитометры
Ссылки
- Официальный сайт проекта
- Multiwii - положительный опыт
- Большая тема на RCDesign
- Build log от kinderkram
- Обсуждение на RCGroups
- Инструкция со всеми схемами подключения датчиков, арудин и прочее.
- Репозиторий всех версий кода для MultiWii
- Crius Hobby MultiWii
- Код для использования Акселерометра LIS302DLTR в MultiWii
- Калькулятор миксов для MultiWii/Cleanflight/Baseflight
- Настройки MultiWii с пульта
- Настройка PID для GPS на Multiwii