MultiWii - обсуждаем и отлаживаем Alt Hold

skyrider

Если меняем THROTTLE_HOVER 1400 на другое значение, например 1450, значение SHIFT_HOVER 1400 тоже нужно менять?
//#define OPTFLOW ADNS_5050 - режим OPTFLOW полностью отключен, или нужно отрубать что то еще?

alexmos
skyrider:

Если меняем THROTTLE_HOVER 1400 на другое значение, например 1450, значение SHIFT_HOVER 1400 тоже нужно менять? //#define OPTFLOW ADNS_5050 - режим OPTFLOW полностью отключен, или нужно отрубать что то еще?

SHIFT_HOVER можно менять, можно не менять. Я ставлю 1500 и у меня отрыв всегда на середине газа (по пульту). Если определить в конфиге #define SHIFT_HOVER = THROTTLE_HOVER то будет только экспонента без сдвига.

Закомнтировать //define OPTFLOW достаточно.

mahowik
alexmos:

Полетал сегодня - барометр не нравится как держит. Все равно склонен к осцилляциям. Иногда и до 3 метров прыгал верх вниз. Не то, к чему стремился

привет Алексей!
На последней 2.0 прошивке теже 3 метра или уже улучшил?

alexmos
mahowik:

привет Алексей! На последней 2.0 прошивке теже 3 метра или уже улучшил?

± метр гуляет, но медленно. Думаю, лучше уже не будет.

Я уменьшил влияние ACC, оно фактически теперь только за D отвечает. Чтобы уменьшить шум, добавил LPF на выход алгоритма (по моему раньше ты предлагал это). А также сделал зону DEADBAND, в которой P-составляющая обнуляется. За счет этого барометр меньше дергает, пока внутри этой зоны - стабилизируется только за счет очень медленного I и D, который тормозит любое быстрое перемещение.

Хочу сравнить в поле с алгоритмом из официальной 2.0 - если разницы не будет, то можно вообще на него перейти, он в вычислениях проще.

mahowik
alexmos:

также сделал зону DEADBAND

про деадбенд я тоже писал ранее )), но не для П а для Д…

alexmos:

Хочу сравнить в поле с алгоритмом из официальной 2.0

официальная прошивка с bmp085 вообще не держит нифига… по крайней мере я видел жалкое подобие удержания висоты, толко после того, как коптер приводишь в состояние покоя и только потом включаешь алт холд…

Eщё была мысль поднять дискретность вычисления высоты до уровня точности-погрешности баро (t.е. до 0.5-1м) + добавить НЧ фильтр на выход для более плавных переходов между самплами. Tогда управляющее воздействие на П будет только при переходах между самплами… ну и конечно П сделать как можно более мягким, т.е. низкие значeния… хотя с DEADBAND по П вижу примерно тy же картину, т.e. воздействие только при больших колебаниях высоты…

alexmos
mahowik:

про деадбенд я тоже писал ранее )), но не для П а для Д…

Да, я помню, но и тогда и сейчас считаю, что это не поможет - как раз D работает в зоне малых возмущений и эта часть отрабатывает неплохо и практически не шумит. А вот высота при жетской привязке к барометру (как я сделал в последней версии), шумит сильно, и для нее DEADBAND реально помогает - как только I-часть выставит точно газ, который нужен для висения, коптер застывает на нужной высоте, пока опять не выйдет за пределы DEADBANd - там P немного подрулит и опять висит ровно.

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

Но из-за этого минуса, воспользоваться преимуществами алгоритма сложно - пока все тестеры, кто пытался - так и не смогли правильно его настроить.
А как победить его - не представляю. Разве что отрубать аксель при слишком большой ошибке и переходить на барометр со сглаживанием…

mahowik
alexmos:

Да, я помню, но и тогда и сейчас считаю, что это не поможет - как раз D работает в зоне малых возмущений и эта часть отрабатывает неплохо и практически не шумит. А вот высота при жетской привязке к барометру (как я сделал в последней версии), шумит сильно, и для нее DEADBAND реально помогает - как только I-часть выставит точно газ, который нужен для висения, коптер застывает на нужной высоте, пока опять не выйдет за пределы DEADBANd - там P немного подрулит и опять висит ровно.

так я нe спорил что в деадбенде на П больше смысла, чем на Д… просто вспомнил ))

alexmos:

Но из-за этого минуса, воспользоваться преимуществами алгоритма сложно - пока все тестеры, кто пытался - так и не смогли правильно его настроить. А как победить его - не представляю. Разве что отрубать аксель при слишком большой ошибке и переходить на барометр со сглаживанием…

Пробовал вмерживать твою калибровку. По всем осям дает стабильные аcc_1g. У народа скорее всего неверная полярностъ осей была или ещё чего нить не то…

Кстати почему ты не хош использовать НЧ флоат фильтр 0.5-1.5Hz на аксель в IMU (см. мою а2 прошивку)?
профиты:

  1. существенная помощь для левел мода. Доп. защита от вибраций и т.д.
  2. гиро вектор (который также используется в твоем альт холд алгоритмe как ноль-земля вектор) не уплывает при резких ускорениях, т.к. вектор акселя по осям будет душиться этим НЧ фильтром, по коророму через КФ корректится гиро вектор. Отсюда меньше погрешность вычислений и т.д.
alexmos
mahowik:

Кстати почему ты не хош использовать НЧ флоат фильтр 0.5-1.5Hz на аксель в IMU (см. мою а2 прошивку)? профиты: 1. существенная помощь для левел мода. Доп. защита от вибраций и т.д. 2. гиро вектор (который также используется в твоем альт холд алгоритмe как ноль-земля вектор) не уплывает при резких ускорениях, т.к. вектор акселя по осям будет душиться этим НЧ фильтром, по коророму через КФ корректится гиро вектор. Отсюда меньше погрешность вычислений и т.д.

Не хочу категорически, по всему выходит от этого филтьра только хуже. Для начала, чем страшен шум акселя сейчас? Да ничем:

  1. В Level-моде аксель напрямую не влияет на моторы, только через комплементарный фильтр с фактором 500. Это уже достаточно хорошо фильтрует его шум.
  2. В определении высоты он дважды интегрируется, что также хорошо сглаживает его шум.
    Что будет с LPF=1Hz (это достаточно сильный филтр):
  3. гироскоп при резких маневрах начнет врать (сдвиг фазы в акселе). Для FPV не страшно а для акро плохо.
  4. Интегратор в определении высоты выдаст сильно искаженную скорость, с выбросами в минус.
    На мой взгляд никакого смысла сильно фильтровать аксель нет.

Аксель вреден тем, что гира уплывает именно в момент набора скорости, а это далеко не резкие ускорения, эта фаза как раз 1-5 сек в полете. Её не офтилтруешь. Ещё, если аксель плохо окалиброван, гира уплывает при продолжительном равномерном движении из-за смещения точки нулей. С моей калибровкой это решается. А шум акселя - не проблема вообще, пока нет хард-клиппинга в самом сенсоре.

mahowik:

p.s. и именно в такой конфигурации (с НЧ флоат фильтром 0.5-1.5Hz на аксель в IMU) можно использовать длину вектора EstG вместо acc_1G Код: accZ = (accADC[0] * EstG.V.X + accADC[1] * EstG.V.Y + accADC[2] * EstG.V.Z) * InvG - 1/InvG;т.е. потому и графики (“с минус acc_1G” и “c минус 1/InvG”) почти совпали тогда

Если развернуть скобки, подставив InvG - получим тот же НЧ-фильтр на аксель. Я уже писал, что по тестам в ГУИ это работает, но результаты интегрирования хуже, чем калибровка нуля.

Хотя я сейчас думаю, что если доверять больше барометру, а аксель оставить только для D-части, то тогда можно упрощать алгоритм и такая точность, которую я хотел получить (и получал) от акселя, уже не нужна. И тогда это решение надо тоже попробовать. Опять же, сейчас многие платы стали комплектоваться барометром MSxxxx и там точность 10см - народ говорит что отлично работает алгоритм из 2.0

DVE
alexmos:

Опять же, сейчас многие платы стали комплектоваться барометром MSxxxx

А это какие?

alexmos
DVE:

Сообщение от alexmos Опять же, сейчас многие платы стали комплектоваться барометром MSxxxx А это какие?

Да в гуле наберите MS5611 flight board, MS5611 imu - там их десятки. А в криусе - не будет, это да, но за 40$ это было б уже альтруизмом 😃

Сергей_Вертолетов
alexmos:

А в криусе - не будет, это да, но за 40$ это было б уже альтруизмом

Сделали бы версию Crius MultiWii Pro, с датчиками по-лучше, и с супер-барометром, пользовалась бы спросом!

8 days later
mahowik

Подрубил сегодня сонар (прошивка r23). Держит хорошо +/-10…20см на высоте до 1.5.-2м. Если выше, начинает переходить на баро и тогда дергаться как параноик… Надо фиксить вибрации на акселе, т.к. в IMU аксель фильтрованный, а вычислении ускорения/скорости для “D” сырые raw данные с акселя.

Если кому интересно, вот изменения для сонара на mega1280 (совместимые с пиратом). Т.е. триггер на 9-й пин, эхо на 10-й:
config.h

#define SONAR_PING 9 // PIN that trigger measure
#define SONAR_READ 10 // PIN to read response pulse, 12 or 8

Sonar.pde

...
#if (SONAR_READ==10)
    #define SONAR_READ_MASK B00010000
#endif
...
#if defined(MEGA)
    // TODO: setup interrupt on MEGA
    PCICR |= 1; // PCINT activated for PORTB
    PCMSK0 = SONAR_READ_MASK; // sonar port B4 - d10 echo
#endif

НО работать будет только при использовании PPM SUM, т.к. сонар висит на том же прерывании (PCINT0_vect) что и в конфигурации для PROMINI. Если кто поможет перевесить на другое прерывание, ВЕЛКАМ! 😉

p.s. Не везет мне в последнее время с крашами. Раньше с 10м падал и лишь ломал пропы или лучи гнул не критично, а сегодня блинн на ровном месте, на высоте в пределах метра чет крутануло, сбросил газ и вписался в забор металлический … итог: минус 2 пропа, сломал ось, выломал ротор живьем… подшипник так и не нашел ((

alexmos
mahowik:

Подрубил сегодня сонар (прошивка r23). Держит хорошо +/-10…20см на высоте до 1.5.-2м. Если выше, начинает переходить на баро и тогда дергаться как параноик… Надо фиксить вибрации на акселе, т.к. в IMU аксель фильтрованный, а вычислении ускорения/скорости для “D” сырые raw данные с акселя.

В моей прошивке переход на барометр вроде нормально работает - я не могу определить момент, когда сонар перестает работать. Летал над травой в полметра - сонар там фигово работал, но висит ровно хорошо на любой высоте, и пр быстрых полетах тоже сонар не сбивает.

mahowik:

НО работать будет только при использовании PPM SUM, т.к. сонар висит на том же прерывании (PCINT0_vect) что и в конфигурации для PROMINI. Если кто поможет перевесить на другое прерывание, ВЕЛКАМ!

На форуме мультивия вроде есть для меги решение. Я не стал копировать так как все равно потестить не смогу, меги нет. Но ты можешь попробовать.

mahowik
alexmos:

В моей прошивке переход на барометр вроде нормально работает - я не могу определить момент, когда сонар перестает работать. Летал над травой в полметра - сонар там фигово работал, но висит ровно хорошо на любой высоте, и пр быстрых полетах тоже сонар не сбивает.

Я не сомневаюсь что работает 😉 Потому и говорю, что у меня скорее всего из-за вибраций на плате не правильно D считается, т.к. raw дата используется с акселя для этого…
У тебя, недавно прочитал, демпфер установлен, а у меня по старинке аксель на скотче висит, что для левел мода ок, но не для альт-холд… И как я раньше до этого не допер ))

alexmos:

На форуме мультивия вроде есть для меги решение. Я не стал копировать так как все равно потестить не смогу, меги нет. Но ты можешь попробовать.

www.multiwii.com/forum/viewtopic.php?f=7&t=1033&st…
Если ты про это, то пробовал. Та же проблема в итоге, т.к. тот же вектор прерывания там…

#define HCSR04_EchoPin_PCINT_vect    PCINT0_vect  // PCINT0-7 belog PCINT0_vect
alexmos
mahowik:

www.multiwii.com/forum/viewto...tart=80#p11815 Если ты про это, то пробовал. Та же проблема в итоге, т.к. тот же вектор прерывания там…

Да, про него. В меге вроде побольше прерываний, в том коде хорошо все в дефайны вынесено - можно попробовать там указать другой вектор… Только надо покурить датащиты и нати, что свободно.

А у тебя какой приемник? Ищу сейчас с 8-ю каналами и sum-ppm, есть такие?

Dimm168pin

c ppmsum frsky d4f сжег, он был 8 канальный, очень чувствителен к питанию, на трешке вообще не применительно т.к шум от сервы на дает даже армнуть т.к все каналы хаотично скачут

mahowik
alexmos:

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

в том и дело что просто вектор прерывания поменять недостаточно, а надо еще править регистры какие то и понимать что делаешь ))

alexmos:

А у тебя какой приемник? Ищу сейчас с 8-ю каналами и sum-ppm, есть такие?

у меня аппа турниги 9х с 8 канальным приемником лежит уже 3 месяца… все руки не доходять )) надо проверить мот там есть…
а вообще, если тебе банально не хватает тумблеров для активации режимов, то можно многопозиционник впихнуть и будет счастье ))

TimAU
mahowik:

А можно отвлеченный вопрос задать? Вы вот на multiwii форуме рекомендовали пиды для YAW 8.5-0.045, а D каким ставить надо? Я себе поставил YAW 8.5 - 0.045 - 0 и у меня слегка крутится против часовой стрелки, не знаю как победить…

skyrider
alexmos:

Моя прошивка как раз для CriusSE настроена, на ней и тестирую. Вообще по основным настройкам - выставляйте все так же, как и в обычной 1.8, 1.9. Если есть вопросы - то смотрите в стандартных руководствах как что настроить. Мои настройки в конце, там надо убрать OPTFLOW и настроить SONAR (фактически только его подключить надо и все оставить по умолчанию). И установить THROTTLE_HOVER на покаатели газа в момент отрыва, или закоментировать вообще этот блок.

Сегодня отлетал два пака на r18, по сонару все просто супер, оба полета на высоте ~1метр (газ не трогал вообще!), выше подлетнуть и попробовать барометр не смог т.к. лил дождик и летал под деревьями.
Респект Алексей!