Таблица миксера моторов
Честно потратил два часа на поиск, соответствующей темы не нашел, поэтому не без волнения создаю новую.
Вопрос в следующем – как оптимально настроить миксер моторов с учетом геометрии коптера? и надо ли эту геометрию вообще так уж сильно учитывать?
Скажем, с квадом все более-менее ясно. Допустим, у нас конфигурация “+”, моторы нумеруются начиная с верхнего по часовой стрелке. Примем, что управляющий сигнал изменяется от -100 до 100. Положительные значения увеличивают обороты, отрицательные уменьшают, 0 означает, что обороты поддерживается в текущем состоянии. Тогда таблица выглядит так:
Газ: 1=100; 2=100; 3=100; 4=100
Тангаж: 1=-100; 2=0; 3=100; 4=0
Крен: 1=0; 2=-100; 3=0; 4=100
Рысканье: 1=100; 2=-100; 3=100; 4=-100
Получая управляющий сигнал по четырем каналам (он идет как от пилота, так и от системы стабилизации), мозг аппарата по таблице легко вычисляет среднее арифметическое для каждого мотора и посылает его на регуляторы. Как легко заметить, здесь мы имеем дело всего с тремя величинами: 100, -100 и 0. Это логично, ибо у квада все двигатели находятся на равном расстоянии от каждой из трех осей, относительно которых он может изменять положение. С конфигурацией типа “Х” все не менее просто.
Но давайте возьмем гексу. Здесь мы уже не имеем такой строгой симметрии. Представим себе конфигурацию х6, нумерация моторов начиная с правого переднего по часовой стрелке, если смотреть сверху. Что получается? Миксер с газом, тангажом и рысканьем проблем не вызывает. Имеем:
Газ: 1=100; 2=100; 3=100; 4=100; 5=100; 6=100
Тангаж: 1=-100; 2=0; 3=100; 4=100; 5=0; 6=-100
Рысканье: 1=100; 2=-100; 3=100; 4=-100; 5=100; 6=-100
А вот что делать с креном? Все шесть моторов, очевидно, могут влиять на него, так как находятся по сторонам от соответствующей оси. В стандартном миксере у МК, например, никто не заморачивается этим, фигачат просто:
Крен: 1=-100; 2=-100; 3=-100; 4=100; 5=100; 6=100
…и оно прекрасно летает. И все (почти) довольны. Но если копнуть? Расстояние до оси крена от моторов 2 и 5 ровно в два раза больше, чем от моторов 1,3,4 и 6. Следовательно, моторы 2 и 5, согласно закону рычага, будут разворачивать раму набок в два раза сильнее, чем моторы 1,3,4 и 6. С другой стороны, моторы 1,3,4 и 6 будут это делать, хотя и в вдвое слабее, зато и вдвое быстрее, если на коптере одинаковые винты. Получается нестыковка прилагаемых к раме сил, которая, расшатывая раму, вероятно, влияет как минимум на стабильность, экономичность и симметричность управления, а вероятно и на вибрации. Как учесть этот момент в миксере, и имеет ли вообще смысл его учитывать? Тот же вопрос актуален для октокоптеров, а также для всех радиально ассиметричних мультироторов, включая и “квадообразных”. (Коаксиальные конфигурации вообще трогать не хочу, это больная мозоль.)
Что думаете по этому поводу, кто-нибудь экспериментировал?
Насколько я помню, mahowik подправлял миксеры в мультивие. Не без сопротивления со стороны разработчиков 😃
вот сама теория code.google.com/p/ardupirates/wiki/motormixing
Насколько я помню, mahowik подправлял миксеры в мультивие. Не без сопротивления со стороны разработчиков 😃
Прошу прощения, а зачем вообще иметь дело с разработчиками, разве это не доступная обычному юзеру настройка? Я задавал свой вопрос на многих форумах, и возникло ощущение, что всем все равно. Однако сейчас (при упоминании о разработчиках) начинаю подозревать, что в большинстве контроллеров миксер юзеру недоступен, иначе было бы больше интереса… Я лично кроме МК имел дело только с “фишками”, у последних миксера нет, но он как бы и не ожидался, а в МК это стандартная пользовательская настройка уже много лет.
вот сама теория code.google.com/p/ardupirates/wiki/motormixing
Ну вот, просто, понятно и логично. Так какого МК использует только нули да сотни?? Неужели у разработчиков не возникало сомнений, странно все это…
Интересная тема, Спасибо Евгений.
Микшер еще доступен в ДЖИ в Вуконге. В мануале с десяток страниц испещрено формулами, прямо научный подход 😉
Тоже хотелось бы разобраться в этой науке, ибо арадиальные схемы нужны, ну и соосники просто необходимы.
Ссылка что скачать мануал.
Прошу прощения, а зачем вообще иметь дело с разработчиками
Большинство людей, тут имеют опен соурсные платформы которые имеют скудный функционал конфигурирования через GUI, многие настройки делаться через код, и изменение миксов в том числе.
разве это не доступная обычному юзеру настройка?
Ключевое слово обычному юзеру =)) Обычный юзер разве понимает в этом хоть что-то? чтобы эти настройки делать нужно иметь приличный багаж знаний. Это настройка скорее для эдвансет юзеров.
Так какого МК использует только нули да сотни??
Думаю это попытка разработчиков упросить процесс настройки, пользователю понятней оперировать процентами тяги, чем какими-то попугаями, которые понятны только контроллеру.
Интересная тема, Спасибо Евгений. Микшер еще доступен в ДЖИ в Вуконге. В мануале с десяток страниц испещрено формулами, прямо научный подход 😉 Тоже хотелось бы разобраться в этой науке, ибо арадиальные схемы нужны, ну и соосники просто необходимы. Ссылка что скачать мануал.
Если вкратце и ненаучно 😃 принцип, как я понимаю, для радиально симметричных, не соосных, следующий:
-
Принимаем точку пересечения лучей за центр координатной сетки, морда аппарата смотрит вдоль оси ординат
-
измеряем расстояние от всех моторов до всех трех осей (D, может быть отрицательным), находим максимальное (Dmax)
-
Зная максимально допустимое значение управляющего сигнала (U) находим значения миксера для каждого мотора по формуле D/Dmax*U.
Допустим, у МК максимальное значение управляющего сигнала 64, оно соответсвует 100%. У нас, допустим, стандартная гекса с расстоянием от моторов до точки пересечения лучей 30 см, нумерация моторов как я написал в заглавном посте. Dmax будет, понятно, 30 см. Для первого мотора:
Газ: 64
Тангаж: SQR(30^2-(30/2)^2)/30*64 = 55.425625842204073392878282928188 (поскольку в миксер можно вписывать только целые значения, округляем до 55)
Крен: 15/30*64=32
Рысканье 30/30*64=64
Полная таблица будет выглядеть так:
Газ: 64,64,64,64,64,64
Тангаж: 55,0,-55,-55,0,55
Крен: 32,64,32,-32,-64,-32
Рысканье: 64,-64,64,-64,64,-64
Если у нас есть ассиметрия по ЦТ, тогда все усложняется… Тогда значения по газу не будут одинаковыми, а по рысканью не будут одинаковыми по модулю, иначе коптер будет заваливаться. Нужно вводить поправку на долю общей массы, приходящуюся на конкретный мотор, а потом, для симметричности управления, учитывать ее же для крена и тангажа.
Ключевое слово обычному юзеру =)) Обычный юзер разве понимает в этом хоть что-то? чтобы эти настройки делать нужно иметь приличный багаж знаний. Это настройка скорее для эдвансет юзеров.
Ну я бы не сказал, мне кажется это куда проще и понятнее, чем те же PID. А что это будет за коптер, у которого нельзя PID настроить? 😃 Совсем игрушка.
Думаю это попытка разработчиков упросить процесс настройки, пользователю понятней оперировать процентами тяги, чем какими-то попугаями, которые понятны только контроллеру.
Нет, мне кажется дело в чем-то другом. На самом деле там и есть попугаи, это я для лучшего понимания перевел в проценты. Немецкие 64 попугая соответствуют 100%. Но главная непонятка в том, что у МК имеются стандартные наборы миксов под разные конфигурации, которые может загрузить и блондинка. Так почему же эти наборы не расчитаны так, как на Вашей ссылке, или как у меня показано выше, а сделаны, на первый взгляд, совершенно от фонаря, только чтоб не падало, без всякого учета геометрии? И ведь летает совсем даже неплохо, я поэтому и интересуюсь, может этот учет геометрии и не нужен вовсе.
…у кроля в последней прошивке есть возможность играться геометрией рамы. Там настройка миксеров идет графически. Пользователь выставляет координаты расположения моторов своей рамы.
…у кроля в последней прошивке есть возможность играться геометрией рамы. Там настройка миксеров идет графически. Пользователь выставляет координаты расположения моторов своей рамы.
Это, наверное, самый удобный способ, но с другой стороны, в таком варианте не видны “шестеренки” процесса, пользователь вынужден верить разработчику на слово, что все рассчитано правильно. Кролика я не щупал, но если судить по Вашему описанию, мне больше нравится MK. Таблица выглядит так:
В моей поделке этот выглядит так:
предустановленые наборы:
/* сумматор */
#include "mixer.hpp"
/* крен тангаж рыск газ */
/*/ квадро +
int16_t servo_conf[4][4] =
{
1250, 0, -500, 1800,
-1250, 0, -500, 1800,
0, 1250, 500, 1800,
0, -1250, 500, 1800
};
*/
// квадро Х
int16_t servo_conf[4][4] =
{
625, 625, 500, 1800, // канал1
-625, -625, 500, 1800, // канал2
625, -625, -500, 1800, // канал3
-625, 625, -500, 1800 // канал4
};
/*
// крыло
int16_t servo_conf[4][4] =
{
2048, -2048, 0, 0,
-2048, -2048, 0, 0,
0, 0, 4096, 0,
0, 0, 0, 4096};
*/
Конфигурация задаётся матрицей 4х4, 4 аргумента и 4 выхода на ШИМ. Математика миксера целочисленная, поэтому чтобы не потерять точность коэффициенты задаются 0-1024 дискрет. Если нужен весь диапазон занчений на выходе сумма коэффициентов в строке должна быть 4096, т.к. сумма делится на 4. Получается точность 1024 дискреты.
В квадре канал газа занижен для того чтобы не уперется в ограничение на максимуме и оставить динамический коридор для стабилизатора.
Интересно! А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа, а тяга настолько больше всех остальных величин?
Два дня мучил коптер “правильными” миксами. Результат странный. Если учитывать геометрию, коптер летит хуже, чем если ограничиться готовыми таблицами. Объяснения найти не могу 😦
А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа
Коэффициены взяты по степени важности для удерждания в воздухе. Основной фактор с которым борется система это сила тяжести, потому тяга имеет максимальный вес, устойчивость определяется каналми тангажа и крена они следующие, ну и рысканье последние по важности для устойчиваости.
По большому счёту это условность, малые коэффициенты можно скомпенсировать ПИДами. Коэффициенты матрицы влияют только на точность присутсвующих в сумме составляющих, чем больше - тем точнее.
Кроме того, матрица при равных ПИДах должна оставлять динамический коридор для регулирования каждого привода, т.е. предотвращает выход канала в нелинейный режим (на отсечку или насыщение).