MultiWii

(Различия между версиями)
Перейти к: навигация, поиск
(Настройки MultiWii для трикоптера)
(Настройка подвеса камеры)
Строка 268: Строка 268:
 
Скорость и направление вращения сервы. Чем выше значение, тем сильнее отклоняется серва пропорционально углу наклона коптера, если изменить знак, например -10, серва будет вращаться в другую сторону.
 
Скорость и направление вращения сервы. Чем выше значение, тем сильнее отклоняется серва пропорционально углу наклона коптера, если изменить знак, например -10, серва будет вращаться в другую сторону.
 
  #define TILT_PITCH_PROP 10
 
  #define TILT_PITCH_PROP 10
 +
Для активация стабилизации подвеса в GUI (для 2.0) надо установить 3 кубика рядом с CAMSTAB (или какой то один, для активации по тумблеру). Каналы AUX3 и AUX4 отвечают за дополнительное отклонение серв.
 +
 +
==== Загрузка прошивки ====
 +
Подключите вашу плату Arduino к компьютеру и выберите порт в меню Tools->Serial port и тип платы в меню Tools->Board.
 +
 +
Затем выберите File->Upload to I/O Board, чтобы загрузить прошивку на вашу Arduino. Загрузка занимает около 30-50 секунд, если увидели надпись Done Uploading (в черном блоке внизу Arduino IDE), то можно приступать к следующему шагу.
  
 
== Настройка ==
 
== Настройка ==

Версия 00:44, 28 апреля 2014

Полётный контроллер на основе Arduino - аппаратной вычислительной платформе, основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wirin (типа С++). Называется так исторически потому, что в первых версиях были задействованы гироскопы из контроллера к игровой консоли Nintendo Wii (Wii Motion Plus и Wii Nunchuk), в данный момент платформа поддерживает большое количество сенсоров.

MultiWii.JPG

Платка продается в готовом виде, ничего паять не нужно. Изначально нужно было докупать гироскопы из контроллера 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), однако этот проект поддерживается одним человеком, и его скорость развития под вопросом.

Поддерживаемые системы

Требования

  • Так как проект бюджетный, то и датчики в ней бюджетные, а значит их надо максимально защищать от вибраций. Насколько аккуратно будет сделана рама, отбалансированы пропеллеры и моторы, настолько и стабильно будет летать коптер.

(с датчиками последнего поколения качество полета заметно лучше)

  • Платы продаются без корпуса, желательно как-то защищать плату от влаги, грязи и пр.
  • Для использования компаса, его вместе с платой необходимо поднять выше над силовыми проводами, иначе он работать не будет. Возможно вынести компас вверх на отдельной плате (как сделано в Наза), но это менее надежно (в случае сбоя i2c-шины коптер может упасть).

Новое в версии MultiWii 2.0

Теперь вам необходима как минимум Arduino IDE версия 1.0, чтобы открывать *.ino файлы.

Сенсоры

  • Акселерометр MMA7544
  • Магнитометр (компас) MAG3110

Платы

  • 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

Crius MultiWii Lite Edition - гироскоп ITG3205 и акселерометр ADXL345
Crius MultiWii Standart Edition - гироскоп ITG3205, акселерометр BMA180, барометр BMP085 и компас HMC5883L
FTDI-переходник

Популярная плата-контроллер MultiWii, сочетает в себе 328p процессор и набор датчиков.

Существует 2 версии контроллера:

  • Crius MultiWii Lite Edition - гироскоп ITG3205 и акселерометр ADXL345
  • Crius MultiWii Standart Edition - гироскоп ITG3205, акселерометр BMA180, барометр BMP085 и компас HMC5883L

Так же контроллер может комплектоваться FTDI-переходником для подключения к компьютеру и загрузки новой прошивке.


Сборка (соединение элементов)

пример соединения элементов трикоптера (3 мотора + 1 серва)
пример соединение элементов для квадрокоптера (4 мотора)

Любые датчики подключаются через 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

В зависимости от используемого вами оборудования (датчики, контроллеры скорости, количество моторов) требует настроить прошивку.

  1. Раскоментируйте (удалив //) одну из строк #define MINTHROTTLE с указанием минимального значения газа, при котором вращаются пропеллеры - это очень важно! Значения могут варьироваться в зависимости от марки ваших регуляторов скорости.
  2. Аналогичным образом выберите тип вашего летательного аппарата, раскоментировав одну из строк после The type of multicopter
  3. Укажите направление разворота (очень важно задать для трикоптера, иначе будет крутиться как бешеный) - #define YAW_DIRECTION
  4. Скорость I2C шины (в ней подключены датчики) - #define I2C_SPEED, обычно достаточно оставить стандартное значение.
  5. Если вы используете 3.3 сенсоры - закоментируйте (добавив/оставив // перед строкой) строку #define INTERNAL_I2C_PULLUPS, если 5в, то раскоментируйте.
  6. Ниже, в разделах 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 отвечают за дополнительное отклонение серв.

Загрузка прошивки

Подключите вашу плату Arduino к компьютеру и выберите порт в меню Tools->Serial port и тип платы в меню Tools->Board.

Затем выберите File->Upload to I/O Board, чтобы загрузить прошивку на вашу Arduino. Загрузка занимает около 30-50 секунд, если увидели надпись Done Uploading (в черном блоке внизу Arduino IDE), то можно приступать к следующему шагу.

Настройка

  • Скачать исходный код 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

Проверить/настроить:

  1. Регули откалибровать на одинаковый диапазон газа!
  2. Аппа по yaw ~1500. Проверять в GUI! Находим макс. погрешность. Отводим стик в мин. положение и потом медленно возвращаем его в центр, под действием пружины в аппе, т.е. просто замедляя действие пружины. Запоминаем мин. значение (к примеру 1492). Потом проделываем тоже самое для макс. значения. Далее отводим стик на мин/макс позицию и отпускаем/отстреливаем под действием пружины аппы и также находим мин/макс значения, но они как правило меньше чем с "плавным" возвратом стика... Желательно проделать тоже самое для ролл/питч сразу, чтобы найти оптимальное значение для DEADBAND (мертвая зона стиков для полетного контроллера)...
  3. Теперь берем максимальное отклонение от центра, добавляем 3-4 единицы и вписываем в DEADBAND в config.h - например, 1500-1492+4 = 12
  4. После этого тримы не трогаем!
  5. Далее все процедуры с выключенным магнетометром! Hужно отстроить коптер по механике, чтобы нос не крутило. Временно выставляем yaw I в ноль и взлетаем, если за минуту не крутит более чем на 10-30 град. то все ОК по идее и интегральная составляющая будет держать как надо. Возвращаем yaw I на место (0.04-0.07), взлетаем, должно быть все ок, т.е. кручение не более 10 град. в минуту...

Если крутит сильно (при yaw I=0), то у вас скорее всего: не откалиброваны регуляторы, неравномерно мощные моторы (например, где то износ больше: подшипник или магниты ослабли от перегрева), моторы не строго параллельны горизонту (кривой мотормаунт, круглые лучи рамы с маунтами закрепленными не строго по горизонту и т.д.)... Лечить можно изменением наклона мотора, подгибанием мотормаунта к примеру, если конструкция позволяет... К примеру коптер крутит по часовой стрелке, значит для компенсации подгибаем мотор вправо... Полечили? Возвращаем yaw I на место и т.д.

См. также

Ссылки

Видео

Где купить

Есть вариант купить любую Arduino платку (328p,1280 или 2560 чипом, на 168 может очень мало влезть) + датчики.

А есть вариант:

Готовые платы с датчиками

Следует учесть что для подключения к компьютеру часто требуется переходник с UART на USB, на основе FTDI чипа, если он уже не встроен на плату или не входит в комплект. Купить можно, например, тут.

Датчики

Если не входят в контроллер.

Всё в одном

Гироскопы

Акселерометры

Барометры

Магнитометры

См. также

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты
Группа ВКонтакте