MultiWii на самолете

alezalez

Приемник турнига 9Х8С2 v2, к нему на ардуинке прилеплен ппсум (в мультивие задействовал три аукса, один на арм\дизарм, остальные на выбор режимов). Также собрана простая схемка(после ппсума), отключающая выход ппсума при исчезновении сигнала на 2-м выходе приемника (для отработки фэйлсэйфа).

geniys

В сём привет. Подскажите где в прошивке настраивается угол отклонения по pitch и roll для летательного аппарата.

Scott_Tiger
alezalez:

собрана простая схемка(после ппсума), отключающая выход ппсума при исчезновении сигнала

Зачем? Поставьте на фэйлсейф переключение режима на возврат домой и дело в шляпе.

geniys:

В сём привет. Подскажите где в прошивке настраивается угол отклонения по pitch и roll для летательного аппарата.

Угол отклонения чего от чего и в каких режимах? Сформулируйте вопрос нормально…

alezalez
Scott_Tiger:

Зачем? Поставьте на фэйлсейф переключение режима на возврат домой и дело в шляпе.

В том-то и дело, что у меня ппсум без фэйлсефа настраиваемого… При пропадании каналов он тупо выдает последние значения. А мне нужно как-то дернуть AUX для RTH . В ГУИ этого я не нашел, вот и не могу додуматься, как сделать. При добавлении той схемки, отключающей ппсум, у меня хоть сам мультивий становится в фэйлсэйф и через пару секунд сбрасывает газ до нуля. Может, где-то в коде это можно привязать к возврату домой, но я не настолько силен в понимании этого кода, чтобы не напортачить… 😦 Может, я Вас не совсем понял, тогда объясните, пожалуйста, по шагам, что и куда.

gena_g

Написал небольшое дополнение для тех у кого при пропадании сигнала приемник остается в последнем состоянии на момент пропадания сигнала. Работает и по PPM_SUM и PWM.

MultiWii.cpp

было

int16_t rcData[RC_CHANS]; // interval [1000;2000]
int16_t rcSerial[8]; // interval [1000;2000] - is rcData coming from MSP
int16_t rcCommand[4]; // interval [1000;2000] for THROTTLE and [-500;+500] for ROLL/PITCH/YAW
uint8_t rcSerialCount = 0; // a counter to select legacy RX when there is no more MSP rc serial data
int16_t lookupPitchRollRC[5];// lookup table for expo & RC rate PITCH+ROLL
int16_t lookupThrottleRC[11];// lookup table for expo & mid THROTTLE

добавить

int16_t rcData[RC_CHANS]; // interval [1000;2000]
int16_t rcSerial[8]; // interval [1000;2000] - is rcData coming from MSP
int16_t rcCommand[4]; // interval [1000;2000] for THROTTLE and [-500;+500] for ROLL/PITCH/YAW
uint8_t rcSerialCount = 0; // a counter to select legacy RX when there is no more MSP rc serial data
int16_t lookupPitchRollRC[5];// lookup table for expo & RC rate PITCH+ROLL
int16_t lookupThrottleRC[11];// lookup table for expo & mid THROTTLE

#if defined(FAILSAFE_CHANEL_NO_CHARGE)
int16_t rcData_last[RC_CHANS]; // interval [1000;2000]
#endif

Это нужно вставить

#if defined(FAILSAFE_CHANEL_NO_CHARGE)
int rcData_temp = 0;
static int16_t rx_no_charge[8] = FAILSAFE_RX;

for(i=0; i<RC_CHANS; i++)
{
rcData_temp = rcData_temp + (rcData_last[i]-rcData[i]) ;
rcData_last[i]=rcData[i];
}

if (abs(rcData_temp) < FAILSAFE_NO_CHARGE_DEADBAND)
{
failsafeCnt_charge++;
}else{
failsafeCnt_charge = 0;
}

if ( failsafeCnt_charge > (5*FAILSAFE_NO_CHARGE_DELAY))
{
for(i=0; i<RC_CHANS; i++) rcData[i] = rx_no_charge[i];
}
#endif

после родного FAILSAFE

#if defined(FAILSAFE)
if ( failsafeCnt > (5*FAILSAFE_DELAY) && f.ARMED) { // Stabilize, and set Throttle to specified level
for(i=0; i<3; i++) rcData[i] = MIDRC; // after specified guard time after RC signal is lost (in 0.1sec)
rcData[THROTTLE] = conf.failsafe_throttle;
if ((failsafeCnt > 5*(FAILSAFE_DELAY+FAILSAFE_OFF_DELAY)) && !f.FAILSAFE_RTH_ENABLE) { // Turn OFF motors after specified Time (in 0.1sec)
go_disarm(); // This will prevent the copter to automatically rearm if failsafe shuts it down and prevents
f.OK_TO_ARM = 0; // to restart accidentely by just reconnect to the tx - you will have to switch off first to rearm
}
failsafeEvents++;
}
if ( failsafeCnt > (5*FAILSAFE_DELAY) && !f.ARMED) { //Turn of "Ok To arm to prevent the motors from spinning after repowering the RX with low throttle and aux to arm
go_disarm(); // This will prevent the copter to automatically rearm if failsafe shuts it down and prevents
f.OK_TO_ARM = 0; // to restart accidentely by just reconnect to the tx - you will have to switch off first to rearm
}
failsafeCnt++;
#endif

config.h добавить в любое место

#define FAILSAFE_CHANEL_NO_CHARGE
#define FAILSAFE_NO_CHARGE_DELAY 50 // Guard time for failsafe activation after signal lost. 1 step = 0.1sec - 1sec in example
#define FAILSAFE_NO_CHARGE_DEADBAND 10
// #define FAILSAFE_RX {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500}
#define FAILSAFE_RX {1500, 1500, 1500, 1300, 1500, 2000, 1000, 1000}
// ROLL PITCH YAW THR AUX1 AUX2 AUX3 AUX4

FAILSAFE_NO_CHARGE_DELAY время срабатывания файлсейфа 1 это 0,1 с .
FAILSAFE_NO_CHARGE_DEADBAND проверка на небольшое изменение сигнала .

alezalez

Гена, приветствую. Попробовал скомпилировать, ругается на необъявленную переменную failsafeCnt_charge++ . Какой тип нужен для этого?

gena_g

Да забыл написать . Сюда добавить
multiwii.cpp

int16_t failsafeEvents = 0;
volatile int16_t failsafeCnt = 0;
volatile int16_t failsafeCnt_charge = 0;

alezalez

Спасибо, скомпилил, ошибок нет. Завтра залью в мультик и буду настраивать

alezalez

Что-то не понимаю… Прошил с этими изменениями. Когда армлю, газ управляется с пульта, но через секунд 5-10 начинаются хаотичные включения возврата домой, газ сам увеличивается до максимума, потом сбрасывается до середины и опять в максимум… При ручке газа в ноль газ уменьшается до нуля, но тоже примерно через 5-10 сек самостоятельно включается на 50 процентов… Т.е. поведение, как будто бы выключился пульт и сработал фэйлсэйф, но мультивий “видит” сигналы с пульта… Может, что-то коряво вставил в коде?

Если нужны мои файлы мультивия с исправлениями, то я выложил их на my-files.ru/uga6jp . Может, я чего-то начудил с фэйлсэйфом…

gena_g

Я кое что подправил . Позвони мне завтра

John_Locke

Вопрос. На руках две arduino pro mini , модули neo-6m и gy-87. Вопрос, по какой схеме собирать все вместе, дабы получить полный автопилот для самолета, нужен полет по точкам, возвращение домой при потере связи и прочие плюшки. Прошивать надо простым вием 2.4, или пойдет только прошивка Патрика?

1 month later
fat_hamster

Как выходной, так и дождь - так что я себе от нечего делать придумал мороку:
Втулил на тренер ардуину и 2 датчика, компас и акселерометр; спаял датчики как проще, друг над другом на общие “штырьки”, но из-за этой простоты плата компаса получилось повернутой на 90 и " вверх ногами" 😃

Не я то помнил что дефайн есть и можно переназначить оси, но дошло до дела и я в каком то затыке 😄

Ни у кого опыта не было такого? Ссылки которые нашёл по быстрому как то не очень помогают

Вообще говоря компас то не очень и нужен сейчас, емнип это для жпс важно, а для жпс места уже все равно нет, да и самолёт не тот, чтоб жпс нужен был… Так что буду испытывать без компаса - но просто из интереса уже интересно…

kostya-tin

multiwiifaq.ts9.ru/3----------------------.html
внизу страницы. оси можно не только переназначать с + и -, но и менять их местами (предупреждаю, т.к. когда то долго с этим мучался, пока не дошло, что их тоже можно переназначать.
www.multiwii.com/wiki/index.php?title=Config.h#sen… - тут описано, как должны себя вести датчики при изминении положения платы

fat_hamster

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

хз, вчера позапускал “тренер” с мультивием (практического смысла нет, вот просто приспичило… ну если настроить, то можно ребенку давать полетать) - в “пасстру” он какой-то тормозной, рули/элероны за стиком “вдогонку” двигаются, из-за чего получается хрень а не полет 😃
это 2.4… может что-то поменялось, надо попробовать будет пред. версии

kostya-tin

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

fat_hamster

чтото в этот раз с мультивием и его настройкой у меня фигня полная; как такое может быть:

  • самолет стоит на ровной поверхности, делаю “калибровать АСС”, ролл/питч в гуе на 0;
  • включаю англе/горизон - и значение в канале элеронов начинает медленно плыть с 1498 до 1470 - и там останавливается; но самолет то не шевелился, показания акселерометра/гироскопа не меняются, какого ж?? элероны от этого естественно пытаются накренить самолет…

что это могло бы быть? на 2.4 и 2.3 пробовал; даже пробовал - кренил на 45 примерно градусов, калибровал асс, потом включаю angle - и опять “подкренивание”

в config.h изменений минимум - только тип датчика там, стоп_моторс и все

alezalez

У меня были похожие проблемы (дерганье машинок из-за самопроизвольного изменения угла в гуи). При этом к регулю не был подсоединен двигатель. Запитал от обычного блока питания на 5 В - все проблемы исчезли!!! Потом на осциллографе посмотрел на регуль - без нагрузки в виде двигателя его бэк “засирает” по питанию так, что мама не горюй 😉

fat_hamster

Вообще это происходит даже при “лабораторном” питании, когда мотор не работает (питание вообще от юсб)… Не думаю, что это из за питания 😕

В гуе видно, что датчики ничего не показывают; ни аксель, ни гироскоп…а цифирки в канал элеронов почему то растут

kostya-tin

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

fat_hamster

Руддер понемногу поворачивается -это известная “фича” вроде, уменьшением I до 0 лечится

А калибровка акселерометра и должна же учесть кривизну установки датчика?

Похоже openpilot раньше приедет, чем я поборю эту фигню 😦