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

HikeR

народы, подскажите, плиз, по работе сонара.
если заявлена дальность 5 метров, то что выдает сонар на бОльшей высоте?
какой примерный “угол охвата”?
какая средняя по больнице частота опроса?

alexmos
HikeR:

народы, подскажите, плиз, по работе сонара.
если заявлена дальность 5 метров, то что выдает сонар на бОльшей высоте?
какой примерный “угол охвата”?
какая средняя по больнице частота опроса?

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

Частота измерений зависит от расстояния… При нулевом - близко к нулю, +50мс на паузу между измерениями.

Угол охвата также зависит от сонара, на практике градусов 60. В датащите приводится диаграмма направленности.

5 метров это для идеальных условий. Реально в условиях зашумленного питания, ненулевого угла наклона будет меньше. Я ставлю с 2 до 3 метров плавный переход на барометр. При наклонах лимит опускается (я заложил примерную диаграмму направленности в алгоритм).

mahowik
alexmos:

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

Попробовал. По графикам пока очень нравится. Выводил одновременно 2 графика: ускорение “с минус acc_1G” и “c минус 1/InvG”. В ГУИ они практически совпадают.
Профит:

  1. скорость не шумит
  2. высота соот-но шумит меньше, а если повысить коэф. компл. фильтра до 200-300, то вообще меедленно плавает +/-0.2…0.4 м
  3. простота настройки, т.к. нет зависимых параметров типа ПИДы в интеграторе и коэф. компл. фильтра

но это все теория пока 😃 облетать не могу, т.к. еще не починился после последнего краша…

alexmos

Ок, жду тогда твоих тестов и сравнения. У меня задача на ближайшее время - мигрировать на 2.0 и исправить ситуацию с нестабильным временем цикла.

mahowik

На 2.0 перевести не долго, я уже с ним и тестировал… а цикл будешь паузами выравнивать, чтобы сводить время итерации к константе?

alexmos

Нет, в 2.0 вроде сделали некоторое подобие таймслотов для распределения медленных вычислений, вот их заюзаю.

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

mahowik

Когда идеи заканчивались, меня спасали более мягкие ПИД-ы + более зажатые констрэйнты конечного PID регуля, в частности на D часть…

з.ы. Ну все! Желаю удачи! A я собирать чемоданы и лететь туда где не бывает холодно и недоступный интернет, точнее очень дорогой… 😃

soliada
alexmos:

Не знаю, дело в том что мегу я в глаза не видел, и писать для нее код вслепую смысла нет. Trig можно на любую ногу вешать, а вот Echo - только там где есть свободное прерывание. Попробуйте разобраться в Sonar.pde как правильно настроить прерывания на мегу и на каком порту/ноге, а я включу в основной код…

Здравствуйте Алексей. Признаться так и не смог разобраться с этим вопросом.Если чесно,в этом вопросе не совсем разбираюсь,вернее совсем не разбираюсь,а точнее не знаю в каком направлении надо мыслить.
Если не трудно,можете подсказать что конкретно надо посмотреть- проанализировать в Sonar.pde?
Очень хочется попробовать сонар.

alexmos

Я тоже плохо представляю в чем отличия меги от обычной 328/168, а особенно в вашем варанте её включения. Задача - найти свободное прерывание, выбрать ногу, которая ему соотвествует. Далее прописать эту ногу в константе SONAR_READ в конфиге, задействовать прерывание по сигналу на этой ноге:

  #if defined(PROMINI)
   PCICR |= (1<<0) ; // PCINT activated for PINS [D8-D13] on port B
   PCMSK0 = SONAR_READ_MASK; // trigger interrupt on this pin only
  #endif
  #if defined(MEGA)
    // TODO: setup interrupt on MEGA
  #endif

Если прерывание отдично от INT0 - переписать заголовок обработчика:

// Install interrupt  handler
ISR(PCINT0_vect) {

В общем то это все очень просто но я не могу потестить не имея меги.

alex_f73

Подскажите, а HC-SR04 будет работать ? В Config.h такого не нашел.
И если будет, то где посмотреть схему включения ?

Почитал ветку, сонар HC-SR04 работает. Для его включения надо раскоментировать //#define DYP_ME007 ?
Остается открытый вопрос куда его включать.

alexmos

Если вы про мой код - то будет. Он и писался под такой сонар. Раскоментируйте #define SONAR и под ним будут определены ноги, куда его цеплять. Также в Sonar.pde есть пояснения насчет включения.

Но дело в том что у меня нет #define DYP_ME007… Так что, возможно, вы смотрите другую прошивку.

alex_f73

Я смотрел код mahowik, я думал вы совместно одну прошивку допиливаете.Сейчас скачал вашу, для CriusSE, что раскоментировать или закоментировать надо ?И если у меня ESC Plush то мне MINTHROTTLE 1300 устанавливать ?

alexmos

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

8 days later
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 как ноль-земля вектор) не уплывает при резких ускорениях, т.к. вектор акселя по осям будет душиться этим НЧ фильтром, по коророму через КФ корректится гиро вектор. Отсюда меньше погрешность вычислений и т.д.