MultiWii на самолете

flygreen

Спросите в профильной теме про мультивий.

lotophagi
zerokul:

Привет,нужна помощ у меня контроллер MultiWii NanoWii ATmega32U4 Micro Flight Controller специально взял для самика. В прошивку я раскоментировал летающие крыло и залил прошивку,после того я подсоединил серво и включил арминг и ничего не происходит,что делать дальше?

Сконфигурированная прошивка www.ex.ua/load/82551548
Сервы вроде на D5 и D11.
Удачи

P.S. только сателлит надо отключить в прошивке или повесить на плату вместо приемника

zerokul

что то не выходит,машинки по прежнему не реагируют:(

lotophagi

А питание на платку идет? Там есть перемычка SJ2, которую надо запаять, если питание 5 вольт от БЭКа, и оставить незапаянной - если от батареи.
Вообще, надо изучить мануал www.hobbyking.com/…/741171780X846863X47.pdf

RTemka
zerokul:

что то не выходит,машинки по прежнему не реагируют:(

В наземке входные каналы шевеляться ??
Если шевеляться, то какой полетный режим стоит ? И те ли каналы шевелятся.

И вообще наземка то коннектиться ?

zerokul

В том то и дело что каналы молчат

lotophagi

Виктор, нам будут трудно догадаться, что там у вас происходит, если вы не дадите никакой информации. Хотя бы надо подключить вий к компьютеру и открыть гуи, наклонить в разные стороны платку… и снять все это на видео.

uwrtey

А как можно сделать стабилизацию только по курсу?
Если например стабилизировать другие оси не нужно… ( ну для катера например )
И самым главным условием является то, что нельзя использовать магнитометр…

Но если быть откровенным, то мне хочется третью ось ( ось курса ) для ГИМБАЛА камеры отвязать от магнитометра…

RTemka

Гиру с вертолета поставить.
Где то пробегало насчет установки вертолетного гироскопа в машинку.

uwrtey

забыл сказать, нужно это все не плате multiwii 328 p сделать…
Гироскоп с вертолета не канает…

zerokul
RTemka:

В наземке входные каналы шевеляться ??
Если шевеляться, то какой полетный режим стоит ? И те ли каналы шевелятся.

И вообще наземка то коннектиться ?

Ребята посибки всем за помощ,все получилось.
Причина была в непропае некоторых раземах

flygreen

Народ вот интересно, на коптерах мультивий используют совместно ОСД миним . Там те и курс и горизонт и прочие прелести в виде возврата. Можно ли все это присобачить на самик ? Может я кстати чёт пропустил . Цена мультивия с ГПС и миним ОСД минимальна и сравнима со Шторм ОСД , даже может дешевле. А, потенциальных возможностей в ней заложено изначально больше. В виде акселя,гирика,компаса,баро,ГПС,ОСД с горизонтом…

lotophagi
flygreen:

Народ вот интересно, на коптерах мультивий используют совместно ОСД миним . Там те и курс и горизонт и прочие прелести в виде возврата. Можно ли все это присобачить на самик ? Может я кстати чёт пропустил . Цена мультивия с ГПС и миним ОСД минимальна и сравнима со Шторм ОСД , даже может дешевле.

Можно [rcopen.com/forum/f90/topic289242]rcopen.com/forum/f90/topic289242/38](rcopen.com/forum/f90/topic289242/38). На одном самолете у меня стоит MultiWii Light+baro+GPS+MinimOSD (Rushduino), на втором - Циклоп Шторм. В плане возможностей и простоты подключения, Циклоп пока впереди. Он может даже и посадить самолет. Но с моим конкретным Циклопом есть проблемы, и на Вие получается чаще и безпроблемней летать.

flygreen:

А, потенциальных возможностей в ней заложено изначально больше. В виде акселя,гирика,компаса,баро,ГПС,ОСД с горизонтом…

А датчики и в Шторме стоят. Компас только самолету не нужен. Ему нет ниобходимости зависать на одном месте.

uwrtey
uwrtey:

Плата мультивий 328 P.
А как можно сделать стабилизацию только по курсу?
Если например стабилизировать другие оси не нужно… ( ну для катера например, или для автомобиля )
И самым главным условием является то, что нельзя использовать магнитометр…

Но если быть откровенным, то мне хочется третью ось ( ось курса ) для ГИМБАЛА камеры отвязать от магнитометра…

По моему вопросику, кто нибудь подскажет?

varvar
lotophagi:

на Вие получается чаще и безпроблемней летать.

Вы с возвратом домой разобрались? На какой высоте он возвращается - на какой застигнут был или все-таки заставили его снижаться/подниматься до разумной высоты? Увеличение #define GPS_WP_RADIUS не позволяет заставить его кружить над домом?

flygreen:

ожет я кстати чёт пропустил . Цена мультивия с ГПС и миним ОСД минимальна и сравнима со Шторм ОСД , даже может дешевле.

Считайте сами - с полнофаршевая (по датчикам) плата с 328 - 25 баксов, i2c_gps - 3.5, GPS 5Гц - можно за 16-18 найти, миним ОСД - 17. Можно добавить OpenLRSng - ардуино 3.5 + модуль SI4432 - еще около 4. Улетит все нафиг - долго плакать вряд ли станете. Особенно если религия не мешает использовать видео передатчик на 2.4ггц 1вт ценой в районе 14 баксов.

uwrtey

я попробовал отключить режим MAG
соответственно магнитометр отключился.
Ось курса стабилизируется за счет гироскопа.

Но есть пару нюансов которые мне не нравятся.

  1. нужна точная калибровка при каждом включении
  2. В режиме MAG нейтраль стабилизации по курсу задается с пульта…
    то-есть достаточно шевельнуть ручкой курса, и плата принимает положение в котором находится за нейтральное…
    В этом режиме нейтраль с пульта задать не возможно…
    Более того, нейтраль вычисляется сама каким-то странным способом:
    если плату повернуть на угол больше угла стабилизации, то этот угол будет считаться крайним положение и плата не стабилизируется в исходное положение… ( Другими словами - гироскоп не видит все 360 градусов… )
lotophagi
varvar:

Вы с возвратом домой разобрались? На какой высоте он возвращается - на какой застигнут был или все-таки заставили его снижаться/подниматься до разумной высоты? Увеличение #define GPS_WP_RADIUS не позволяет заставить его кружить над домом?

Высота на развороте не меняется. Немного проседает, но потом снова набирает свою высоту. Вроде этот момент настраивается (сильно с настройками не эксперементировал). Не нравится, что самолет, вернувшись, продолжает лететь дальше пока не передернешь тумблер. Но были моменты, когда он снова разворачивался. Пробовал ставить последнюю измененную прошивку на основе прошивки 2.2. Там есть один момент: при включении функции RTH надо настроить, чтобы включался дизарм, а при выключении происходил арминг. Так вот, в последних прошивках не включишь арм пока включена функция Horizon. Вий просто залипает. А при потере связи не получится передернуть режимы.
Вообщем пока хватает предыдущей версии. Мне главное включение режима возврата при потере связи. С ней намного спокойнее летать ФПВ, можно лететь “до упора”. А около себя уже рулю ручками.

varvar

Для любителей поизвращаться - Multiwii 2.3 на летучее крыло

Может, кому сгодится или кто добавит чего. Кому не нравится - читать не нужно.

Конфигурация -
Crius Multiwii v.2.5 за 25 баксов
OpenLRSng сконфигурированный на SPPM
I2C_GPS и блохастый 5 гц NEO6M
MinimOSD

Motor D3, D11 - rigth, D12 – left
жужжалку ставим на D9
У меня напряжение батарейки на ноге A0, 2S

для начала править багу (иначе i2c имеет большой шанс загнуться при старте):
EEPROM**.**cpp
было

 #if GPS
      GPS_set_pids();    // at this time we don't have info about GPS init done
    #endif
  

надо:

  #if GPS
      if (f.I2C_INIT_DONE) GPS_set_pids();    // at this time we don't have info about GPS init done
    #endif

для мотора ставим 50 гц вместо 500
config.h

#define USE_THROTTLESERVO // For use of standard 50Hz servo on throttle. - motor still on D9 but 50Hz

Gyro smoothing
config.h

      #define MPU6050_LPF_20HZ

по умолчанию задействовано 5 серв - перебор, нужно 2 сервы и мотор
правим
def.h
было

#elif defined(FLYING_WING)
    #define PRI_SERVO_FROM   4
    #if defined (USE_THROTTLESERVO)
      #define NUMBER_MOTOR   0
      #define PRI_SERVO_TO   8 // use servo from 4,5 and 8
    #else
      #define NUMBER_MOTOR   1
      #define PRI_SERVO_TO   5 // use servo from 4 to 5
    #endif

поменял

#elif defined(FLYING_WING)
    #define PRI_SERVO_FROM   4
    #if defined (USE_THROTTLESERVO)
      #define NUMBER_MOTOR   0
        #define PRI_SERVO_TO   6 // use servo from 4,5 and 6
    // VLT #define PRI_SERVO_TO   8 // use servo from 4,5 and 8
    #else
      #define NUMBER_MOTOR   1
      #define PRI_SERVO_TO   5 // use servo from 4 to 5
    #endif

а так же
Output.cpp
было

  #elif defined( FLYING_WING )
      /*****************************             FLYING WING                **************************************/
      if (!f.ARMED) {
        servo[7] = MINCOMMAND;  // Kill throttle when disarmed
      } else {
        servo[7] = constrain(rcCommand[THROTTLE], conf.minthrottle, MAXTHROTTLE);
      }
      motor[0] = servo[7];
      if (f.PASSTHRU_MODE) {    // do not use sensors for correction, simple 2 channel mixing
        servo[3] = (SERVODIR(3,1) * rcCommand[PITCH]) + (SERVODIR(3,2) * rcCommand[ROLL]);
        servo[4] = (SERVODIR(4,1) * rcCommand[PITCH]) + (SERVODIR(4,2) * rcCommand[ROLL]);
      } else {                  // use sensors to correct (gyro only or gyro+acc according to aux1/aux2 configuration
        servo[3] = (SERVODIR(3,1) * axisPID[PITCH])   + (SERVODIR(3,2) * axisPID[ROLL]);
        servo[4] = (SERVODIR(4,1) * axisPID[PITCH])   + (SERVODIR(4,2) * axisPID[ROLL]);
      }
      servo[3] += get_middle(3);
      servo[4] += get_middle(4);

поменял

  #elif defined( FLYING_WING )
      /*****************************             FLYING WING                **************************************/
      if (!f.ARMED) {
        servo[5] = MINCOMMAND;  // Kill throttle when disarmed
      } else {
        servo[5] = constrain(rcCommand[THROTTLE], conf.minthrottle, MAXTHROTTLE);
      }
      motor[0] = servo[5];
      if (f.PASSTHRU_MODE) {    // do not use sensors for correction, simple 2 channel mixing
        servo[3] = (SERVODIR(3,1) * rcCommand[PITCH]) + (SERVODIR(3,2) * rcCommand[ROLL]);
        servo[4] = (SERVODIR(4,1) * rcCommand[PITCH]) + (SERVODIR(4,2) * rcCommand[ROLL]);
      } else {                  // use sensors to correct (gyro only or gyro+acc according to aux1/aux2 configuration
        servo[3] = (SERVODIR(3,1) * axisPID[PITCH])   + (SERVODIR(3,2) * axisPID[ROLL]);
        servo[4] = (SERVODIR(4,1) * axisPID[PITCH])   + (SERVODIR(4,2) * axisPID[ROLL]);
      }
      servo[3] += get_middle(3);
      servo[4] += get_middle(4);

теперь имеем мотор - D3, D11 - rigth, D12 - left
В начале несколько импульсов неправильной длины устанавливают неправильный уровень для ESC
правим
Output.cpp

#if defined(SERVO)
  // volatile uint8_t atomicServo[8] = {5,5,5,5,5,5,5,5};
    #if defined(HW_PWM_SERVOS)
      // hw servo pwm does not need atomicServo[]
    #elif defined(PROMINI) || (defined(PROMICRO) && defined(HWPWM6))
      #if defined(AIRPLANE) || defined(HELICOPTER)
        // To prevent motor to start at reset. atomicServo[7]=5 or 249 if reversed servo
        volatile uint8_t atomicServo[8] = {125,125,125,125,125,125,125,5};
      // VLT begin
              #elif defined(FLYING_WING)
                // for ESC - 1ms is lowest throttle
        volatile uint8_t atomicServo[8] = {125,125,125,125,125,5,125,125};
              // VLT end
              #else

                volatile uint8_t atomicServo[8] = {125,125,125,125,125,125,125,125};
      #endif
    #else
      #if defined(AIRPLANE)|| defined(HELICOPTER)
        // To prevent motor to start at reset. atomicServo[7]=5 or 249 if reversed servo
        volatile uint16_t atomicServo[8] = {8000,8000,8000,8000,8000,8000,8000,320};
      #else
        volatile uint16_t atomicServo[8] = {8000,8000,8000,8000,8000,8000,8000,8000};
      #endif
    #endif
  #endif

жужжалку ставим на D9
config**.**h

  #define OVERRIDE_BUZZERPIN_PINMODE pinMode (9, OUTPUT);
    #define OVERRIDE_BUZZERPIN_ON PORTB |= 0x02;
    #define OVERRIDE_BUZZERPIN_OFF PORTB &= ~0x02;

измеряем напругу
config.h

    #define VBAT              // uncomment this line to activate the vbat code
      #define VBATSCALE       131 // (*) (**) change this value if readed Battery voltage is different than real voltage
    #define VBATNOMINAL      84 // 12,6V full battery nominal voltage - only used for lcd.telemetry
      #define VBATLEVEL_WARN1  71 // (*) (**) 10,7V
      #define VBATLEVEL_WARN2  66 // (*) (**) 9.9V
      #define VBATLEVEL_CRIT   62 // (*) (**) 9.3V - critical condition: if vbat ever goes below this value, permanent alarm is triggered
      #define NO_VBAT          16 // Avoid beeping without any battery
 

куда ж без GPS?
config**.**h

    #define I2C_GPS
      #define MAG_DECLINATION  9.82f  // правьте под свое!

передатчик далек от идеала, посему
config**.**h

    #define SERIAL_SUM_PPM         ROLL,PITCH,THROTTLE,YAW,AUX1,AUX2,AUX3,AUX4,8,9,10,11 //For Robe/Hitec/Futaba
      #define DEADBAND 25

полезно:
config.h

#define GYROCALIBRATIONFAILSAFE

Возврат домой делается OpenLRSng – просто установить все настройки и нажать бинд на передатчике

В общем, можно пробовать - я не тестировал, только что с мотором разобрался 😦 - теперь следующих выходных ждать и надеяться на погоду.

zerokul:

В прошивку я раскоментировал летающие крыло и залил прошивку

Маловато будет 😃 - там достаточно много чего раскомментировать надо, хотя бы тип платы.

Кстати, в моем варианте это будет
#define HK_MultiWii_SE_V2 // Hobbyking board with MPU6050 + HMC5883L + BMP085

lotophagi

Возврат домой делается OpenLRSng – просто установить все настройки и нажать бинд на передатчике

Я не в курсе по поводу OpenLRSng, но неужели приемник может возвращать модель домой?
И зачем городить огород? Прошивка под MultiWii с RTH уже есть, испробована и со своей функцией полностью справляется.

Может, кому сгодится или кто добавит чего. Кому не нравится - читать не нужно.

Вот что могу добавить в целом для крыльев и самолетов:

  1. Есть известная проблема с gps по i2c со сбросом расстояния домой после 655 метров (www.rcgroups.com/forums/showpost.php?p=25545123&po…). Показания обнуляются, и приходиться считать количество сбросов и постоянно держать в голове во время полета.
    Тут описывается решение проблемы
    www.multiwii.com/forum/viewtopic.php?f=8&t=2817&p=…
    Или от сюда заливаем в конвертер модернизированную прошивку github.com/disq/i2c-gps-nav
    Надо раскомментировать строку в прошивке i2c-gps-nav:
    config.h
#define DISTANCE_TO_HOME_IN_METERS // WARNING! IF YOU DEFINE THIS YOU MUST MODIFY MULTIWII SOURCE!!!

…и закомментировать в прошивке Multiwii:
GPS.ino

//GPS_distanceToHome = GPS_distanceToHome / 100;      //register is in CM, we need in meter. max= 655 meters with this way
  1. Хорошо убирает вибрации на гирах эта функция:
    config.h
      /* GYRO_SMOOTHING. In case you cannot reduce vibrations _and_ _after_ you have tried the low pass filter options, you
         may try this gyro smoothing via averaging. Not suitable for multicopters!
         Good results for helicopter, airplanes and flying wings (foamies) with lots of vibrations.*/
      #define GYRO_SMOOTHING {20, 20, 3}    // (*) separate averaging ranges for roll, pitch, yaw

Есть еще особенности по настройкам модернизированной самолетной прошивки с RTH, но про них расскажу отдельно, если кому интересно.

varvar
lotophagi:

Я не в курсе по поводу OpenLRSng, но неужели приемник может возвращать модель домой? И зачем городить огород? Прошивка под MultiWii с RTH уже есть, испробована и со своей функцией полностью справляется.

Она и используется, приемник только говорит, что пора домой, когда сигнал потерян 😃

lotophagi:

Есть еще особенности по настройкам модернизированной самолетной прошивки с RTH, но про них расскажу отдельно, если кому интересно.

Да что уж, рассказывайте 😃