Таблица миксера моторов
Интересная тема, Спасибо Евгений. Микшер еще доступен в ДЖИ в Вуконге. В мануале с десяток страниц испещрено формулами, прямо научный подход 😉 Тоже хотелось бы разобраться в этой науке, ибо арадиальные схемы нужны, ну и соосники просто необходимы. Ссылка что скачать мануал.
Если вкратце и ненаучно 😃 принцип, как я понимаю, для радиально симметричных, не соосных, следующий:
-
Принимаем точку пересечения лучей за центр координатной сетки, морда аппарата смотрит вдоль оси ординат
-
измеряем расстояние от всех моторов до всех трех осей (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 дискреты.
В квадре канал газа занижен для того чтобы не уперется в ограничение на максимуме и оставить динамический коридор для стабилизатора.
Интересно! А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа, а тяга настолько больше всех остальных величин?
Два дня мучил коптер “правильными” миксами. Результат странный. Если учитывать геометрию, коптер летит хуже, чем если ограничиться готовыми таблицами. Объяснения найти не могу 😦
А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа
Коэффициены взяты по степени важности для удерждания в воздухе. Основной фактор с которым борется система это сила тяжести, потому тяга имеет максимальный вес, устойчивость определяется каналми тангажа и крена они следующие, ну и рысканье последние по важности для устойчиваости.
По большому счёту это условность, малые коэффициенты можно скомпенсировать ПИДами. Коэффициенты матрицы влияют только на точность присутсвующих в сумме составляющих, чем больше - тем точнее.
Кроме того, матрица при равных ПИДах должна оставлять динамический коридор для регулирования каждого привода, т.е. предотвращает выход канала в нелинейный режим (на отсечку или насыщение).