Таблица миксера моторов

Gene
Bluebird:

Интересная тема, Спасибо Евгений. Микшер еще доступен в ДЖИ в Вуконге. В мануале с десяток страниц испещрено формулами, прямо научный подход 😉 Тоже хотелось бы разобраться в этой науке, ибо арадиальные схемы нужны, ну и соосники просто необходимы. Ссылка что скачать мануал.

Если вкратце и ненаучно 😃 принцип, как я понимаю, для радиально симметричных, не соосных, следующий:

  1. Принимаем точку пересечения лучей за центр координатной сетки, морда аппарата смотрит вдоль оси ординат

  2. измеряем расстояние от всех моторов до всех трех осей (D, может быть отрицательным), находим максимальное (Dmax)

  3. Зная максимально допустимое значение управляющего сигнала (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

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

Razek:

Ключевое слово обычному юзеру =)) Обычный юзер разве понимает в этом хоть что-то? чтобы эти настройки делать нужно иметь приличный багаж знаний. Это настройка скорее для эдвансет юзеров.

Ну я бы не сказал, мне кажется это куда проще и понятнее, чем те же PID. А что это будет за коптер, у которого нельзя PID настроить? 😃 Совсем игрушка.

Думаю это попытка разработчиков упросить процесс настройки, пользователю понятней оперировать процентами тяги, чем какими-то попугаями, которые понятны только контроллеру.

Нет, мне кажется дело в чем-то другом. На самом деле там и есть попугаи, это я для лучшего понимания перевел в проценты. Немецкие 64 попугая соответствуют 100%. Но главная непонятка в том, что у МК имеются стандартные наборы миксов под разные конфигурации, которые может загрузить и блондинка. Так почему же эти наборы не расчитаны так, как на Вашей ссылке, или как у меня показано выше, а сделаны, на первый взгляд, совершенно от фонаря, только чтоб не падало, без всякого учета геометрии? И ведь летает совсем даже неплохо, я поэтому и интересуюсь, может этот учет геометрии и не нужен вовсе.

smotors

…у кроля в последней прошивке есть возможность играться геометрией рамы. Там настройка миксеров идет графически. Пользователь выставляет координаты расположения моторов своей рамы.

Gene
smotors:

…у кроля в последней прошивке есть возможность играться геометрией рамы. Там настройка миксеров идет графически. Пользователь выставляет координаты расположения моторов своей рамы.

Это, наверное, самый удобный способ, но с другой стороны, в таком варианте не видны “шестеренки” процесса, пользователь вынужден верить разработчику на слово, что все рассчитано правильно. Кролика я не щупал, но если судить по Вашему описанию, мне больше нравится MK. Таблица выглядит так:

rual

В моей поделке этот выглядит так:

предустановленые наборы:

/* сумматор  */

#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 дискреты.
В квадре канал газа занижен для того чтобы не уперется в ограничение на максимуме и оставить динамический коридор для стабилизатора.

Gene

Интересно! А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа, а тяга настолько больше всех остальных величин?

Gene

Два дня мучил коптер “правильными” миксами. Результат странный. Если учитывать геометрию, коптер летит хуже, чем если ограничиться готовыми таблицами. Объяснения найти не могу 😦

rual
Gene:

А почему у Вас коэффициент рысканья меньше, чем для крена и тангажа

Коэффициены взяты по степени важности для удерждания в воздухе. Основной фактор с которым борется система это сила тяжести, потому тяга имеет максимальный вес, устойчивость определяется каналми тангажа и крена они следующие, ну и рысканье последние по важности для устойчиваости.
По большому счёту это условность, малые коэффициенты можно скомпенсировать ПИДами. Коэффициенты матрицы влияют только на точность присутсвующих в сумме составляющих, чем больше - тем точнее.
Кроме того, матрица при равных ПИДах должна оставлять динамический коридор для регулирования каждого привода, т.е. предотвращает выход канала в нелинейный режим (на отсечку или насыщение).