Создание собственной системы стабилизации

rual
VitaliyRU:

Т.е. НЕ имеет права на жизнь?

Почему не имеет, просто чтобы реализовать правильную компенсацию, нужно разработать методу для калибровки коэффициентов и выполнять эту методу для каждого экземпляра ДУС, т.е. крайне геморойно. Проще выполнять компенсацию на ходу по акселю и магу.

Gapey:

родить модуль типа INEMO только с 4хх проциком …

SergDoc:

f3 для чисто иму будет за глаза - fpu есть и скорости хватит вполне…

inemo ну очень дорого и не чего особенного, главное Аксель ЛСМ, такой же как и 400рублёвой Ф3дисковери.

SergDoc

Александр, а ты куда запропастился? или готовишь что-то грандиозное? 😃

oleg70
Gapey:

модуль типа INEMO

Сама по себе идея отдельного модуля IMU по моему хороша, если б его сделали как один чип с выходом данных в виде углов эйлера (кому нужны угловые скорости и т.п.), а так разницы никакой, только лишний проц…

rual
SergDoc:

Александр, а ты куда запропастился? или готовишь что-то грандиозное? 😃

Учу математику, пытаюсь придумать более полные алгритмы ИНС (учесть все ускорения, моменты, погрещности и отдлить их друг от друга). Пока рисую в матлабе, до железа пока не добрался.

VitaliyRU
rual:

Почему не имеет, просто чтобы реализовать правильную компенсацию, нужно разработать методу для калибровки коэффициентов и выполнять эту методу для каждого экземпляра ДУС, т.е. крайне геморойно. Проще выполнять компенсацию на ходу по акселю и магу.

Видимо все же надо самому попробовать, что бы говорить на одном языке. Пока не сообразил, почему не будет работать на всех ДУС.

rual:

Учу математику, пытаюсь придумать более полные алгритмы ИНС (учесть все ускорения, моменты, погрещности и отдлить их друг от друга). Пока рисую в матлабе, до железа пока не добрался.

Вот такая же фигня(тока физику и термех? вспоминал), написал и отладил стабилизацию без PID. Все никак на железо не перенесу. И вообще забил на это. Буду отлаживать на писюке через серийник, так удобней на порядок(бряки, замедленный просмотр по логам), потом просто библиотеку к пректу подключить.

oleg70
VitaliyRU:

не будет работать на всех ДУС.

Работать будет, Александр видимо хотел сказать что алгоритм для каждой модели чипа будет отличаться, производители чипов любят “разнообразные подходы”, я с L3gd20 так и понял “замысел” такого формата температуры на выходе…

VitaliyRU:

физику и термех

Под эту тему надо ТАУ (теория автоматического управления) штудировать, но там достаточно все мудрено… (дисциплина высшей школы).

VitaliyRU
oleg70:

Работать будет, Александр видимо хотел сказать что алгоритм для каждой модели чипа будет отличаться, производители чипов любят “разнообразные подходы”, я с L3gd20 так и понял “замысел” такого формата температуры на выходе…

Ща же вроде MPU6050 наше все. И по слухам все улчшайзинги в софте, а не по железу(заводская калибровка и фильтры), из MEMS вроде по железу лучше не куда. Сняли аналоговые дачики с производства, еще ныть будем, что аналоговых не осталось, все же софтовые улучшения коробят измеренные данные.

SergDoc
rual:

Пока рисую в матлабе, до железа пока не добрался.

надо и мне разобраться с этой штукой, а то как-то начал изучать и забросил…

Razek
oleg70:

для меня всегда проблематично, считаю

Резонно, самого коробит от кучи проводов и плат никак не могу привести все в прядок, хочется чтоб выглядел аккуратно, а выглядит как комок проводов
dl.dropboxusercontent.com/u/…/IMG_4985s.jpg =((

oleg70

Чет я запутался (подскажите кто может), : в цикле посчитал три ПИДа (тангаж, крен, вращ.) , а теперь надо их с разными знаками, для каждого мотора, прибавлять к общему ГАЗу и “совать” на движки ??
Правильно ? Может кусок кода у кого под рукой…

SergDoc

А я исходники просто так выкладываю 😃 github.com/SergDoc/…/mixer.c

static const motorMixer_t mixerQuadP[] = {
    { 1.0f,  0.0f,  1.0f, -1.0f },          // REAR
    { 1.0f, -1.0f,  0.0f,  1.0f },          // RIGHT
    { 1.0f,  1.0f,  0.0f,  1.0f },          // LEFT
    { 1.0f,  0.0f, -1.0f, -1.0f },          // FRONT
};
static const motorMixer_t mixerQuadX[] = {
    { 1.0f, -1.0f,  1.0f, -1.0f },          // REAR_R
    { 1.0f, -1.0f, -1.0f,  1.0f },          // FRONT_R
    { 1.0f,  1.0f,  1.0f,  1.0f },          // REAR_L
    { 1.0f,  1.0f, -1.0f, -1.0f },          // FRONT_L
};

ну и для моей кривой рамы:

static const motorMixer_t mixerQuadXSerg[] = {
    { 0.87f, -1.0f,  1.0f, -1.0f },          // REAR_R
    { 1.0f, -0.47f, -1.32f,  0.75f },        // FRONT_R
    { 0.87f,  1.0f,  1.0f,  1.0f },          // REAR_L
    { 1.0f,  0.47f, -1.32f, -0.75f },        // FRONT_L
};

столбцы соответственно для каждого мотора trotthle, roll, pitch и yaw 😃

rual
oleg70:

а теперь надо их с разными знаками, для каждого мотора, прибавлять к общему ГАЗу и “совать” на движки ??

Совершенно верно, каждый компонент ориентации матрично приводиться к конфигу рамы, для квадры Х: ++ – -+ ±

oleg70:

Может кусок кода у кого под рукой…

Кода под рукой нет, но на ветке гдето валяется мой проект см. файл mixer.cpp, сама матрица в моих настройках выглядит так

...
РусИНС1.0>АП.СУММАТОР:
Матрица управления:(N Канала),Крен,Танг,Рыск,Тяга >:
        Крен    Танг    Рыск    Тяга
KAH1:   625     -625    -500    1800
KAH2:   625     625     500     1800
KAH3:   -625    -625    500     1800
KAH4:   -625    625     -500    1800
...
РусИНС1.0>АП.СУММАТОР:
oleg70
rual:

матрично приводиться

А что, ограничений по модулю не делается ? А если условно Газ + ПИД вылезет за пределы допустимого (у меня) диапазона 1000-2000 ? (Ваш проект у меня есть, но видать старый, нет там mixer.cpp) просто подскажите, если не трудно, а то хочется полетать уже…

Vasilich11

А данные опции расширяемы?
Читаю про АЛТ ХОЛД - его у меня не наблюдается.
Что даёт просто включенный баро датчик?

Упс извиняюсь не в ту ветку сообщение залепил.

rual
VitaliyRU:

Вот такая же фигня(тока физику и термех? вспоминал), написал и отладил стабилизацию без PID.

Стабилизация без ПИД это круто, как учитываются в стабилизации ускорения и моменты инерции?

VitaliyRU:

Буду отлаживать на писюке через серийник, так удобней на порядок(бряки, замедленный просмотр по логам), потом просто библиотеку к пректу подключить.

Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.

SergDoc:

надо и мне разобраться с этой штукой, а то как-то начал изучать и забросил…

Да я тоже очень поверхностно знаком, отрабатываю только мат.механизмы, с визуализацией бы ещё разобраться получше.

SergDoc:

вывод напрашивается - мосх должен быть тяжелым…

Точнее инертный, не должен воспринимать высокочастотную вибрацию некомпенсируемую математикой, но и не должен иметь резонансов на НЧ.

Razek
rual:

Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.

В принципе ничего сложного нет. Если знакомы с MSVC, то вообще проблем не должно быть, есть кучу сайтов где можно скачать нужные контролы для приложений если лень разбиратся и писать свои. Тем более для наших целей ничего специфичного не нужно. www.codeproject.com
http://codeguru.com

VitaliyRU
rual:

Стабилизация без ПИД это круто, как учитываются в стабилизации ускорения и моменты инерции?

Ускорения так таковые вообще не учитывються(это одно из преимуществ). А так mV=Ft(это только PD, I не делал еще), если на железе заработает потом напишу с картинками, на пальцах не объяснить.
А момент инерции, это коэф пропорциональности между m и F, т.е. соотношение силы тяги к массе. Его проще имперически подобрать,чем приводить к реальным (я в Декартовой системой координат считаю, мне так проще, чем в полярной), в int - ах все равно все попугаях .
Хотя на сферическом кирпиче вполне реальные размерности 😃

Масса 5 кг, сила тяги 100 Н, g=10 м/с*с. Ну т.е. для случая если висим на половине тяги. Отнощение момента к моменту инерции конечно больше, но проще подобрать. Если смотреть замедленно Логи, там прекрасно видно куда врем.

rual:

Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.

Ну а я все жизнь на PCюке 😃, мне проще так. Тем более есть C++ Builder(на нем и делаю) совместим с ansi С и виндовую форму накидать там пара минут еще пара минут COM порт прочитать.

А кажись понял про какие ускорения. От акселя на вираже, подъемах, спусках и т.п.? (ну т.е. от чего аксельный горизонт плывет?). Я просто считаю это элементами автопилота(даже стабилизация в горизонт) по этому сразу не понял о чем речь. Хочу пока сделать именно стабилизацию, то что только от ДУСа. Это намой взгляд пока самое узкое место.

rual
Razek:

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

Знаком, но нужно разбираться во многих вещах напрямую к предмету не относящихся, что крайне лень. Вот если б была установленная и настроенная среда с шаблоном проекта куда нужно встроить только предметную часть 😁

VitaliyRU:

А момент инерции, это коэф пропорциональности между m и F, т.е. соотношение силы тяги к массе. Его проще имперически подобрать,чем приводить к реальным (я в Декартовой системой координат считаю, мне так проще, чем в полярной), в int - ах все равно все попугаях .

Не совсем, вы это о линейном перемещениях, момент инерции это о вращательном движении. ru.wikipedia.org/wiki/������_�������

VitaliyRU:

А кажись понял про какие ускорения. От акселя на вираже, подъемах, спусках и т.п.? (ну т.е. от чего аксельный горизонт плывет?). Я просто считаю это элементами автопилота(даже стабилизация в горизонт) по этому сразу не понял о чем речь.

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

VitaliyRU:

Хочу пока сделать именно стабилизацию, то что только от ДУСа.

Это конечно основа всего, но реализация крайне проста, можно вообще никакие матрицы не считать, подать каждую ось на свой ПИД, а результаты помноженные на коэффициент, в соответствии с расположением моторов, сложить между собой и значением тяги. Вот вам и Кук! А вот правильно интегрировать ДУС чтоб получить ориентацию объекта это уже сложнее, примерно так e-maxx.ru/sgu/files/my_kurs.pdf
А ещё сложнее правильно корректировать пространственный интеграл, в этом есть БОЛЬШАЯ проблема.