Создание собственной системы стабилизации
Т.е. НЕ имеет права на жизнь?
Почему не имеет, просто чтобы реализовать правильную компенсацию, нужно разработать методу для калибровки коэффициентов и выполнять эту методу для каждого экземпляра ДУС, т.е. крайне геморойно. Проще выполнять компенсацию на ходу по акселю и магу.
родить модуль типа INEMO только с 4хх проциком …
f3 для чисто иму будет за глаза - fpu есть и скорости хватит вполне…
inemo ну очень дорого и не чего особенного, главное Аксель ЛСМ, такой же как и 400рублёвой Ф3дисковери.
Александр, а ты куда запропастился? или готовишь что-то грандиозное? 😃
модуль типа INEMO
Сама по себе идея отдельного модуля IMU по моему хороша, если б его сделали как один чип с выходом данных в виде углов эйлера (кому нужны угловые скорости и т.п.), а так разницы никакой, только лишний проц…
Александр, а ты куда запропастился? или готовишь что-то грандиозное? 😃
Учу математику, пытаюсь придумать более полные алгритмы ИНС (учесть все ускорения, моменты, погрещности и отдлить их друг от друга). Пока рисую в матлабе, до железа пока не добрался.
Почему не имеет, просто чтобы реализовать правильную компенсацию, нужно разработать методу для калибровки коэффициентов и выполнять эту методу для каждого экземпляра ДУС, т.е. крайне геморойно. Проще выполнять компенсацию на ходу по акселю и магу.
Видимо все же надо самому попробовать, что бы говорить на одном языке. Пока не сообразил, почему не будет работать на всех ДУС.
Учу математику, пытаюсь придумать более полные алгритмы ИНС (учесть все ускорения, моменты, погрещности и отдлить их друг от друга). Пока рисую в матлабе, до железа пока не добрался.
Вот такая же фигня(тока физику и термех? вспоминал), написал и отладил стабилизацию без PID. Все никак на железо не перенесу. И вообще забил на это. Буду отлаживать на писюке через серийник, так удобней на порядок(бряки, замедленный просмотр по логам), потом просто библиотеку к пректу подключить.
не будет работать на всех ДУС.
Работать будет, Александр видимо хотел сказать что алгоритм для каждой модели чипа будет отличаться, производители чипов любят “разнообразные подходы”, я с L3gd20 так и понял “замысел” такого формата температуры на выходе…
физику и термех
Под эту тему надо ТАУ (теория автоматического управления) штудировать, но там достаточно все мудрено… (дисциплина высшей школы).
Работать будет, Александр видимо хотел сказать что алгоритм для каждой модели чипа будет отличаться, производители чипов любят “разнообразные подходы”, я с L3gd20 так и понял “замысел” такого формата температуры на выходе…
Ща же вроде MPU6050 наше все. И по слухам все улчшайзинги в софте, а не по железу(заводская калибровка и фильтры), из MEMS вроде по железу лучше не куда. Сняли аналоговые дачики с производства, еще ныть будем, что аналоговых не осталось, все же софтовые улучшения коробят измеренные данные.
Пока рисую в матлабе, до железа пока не добрался.
надо и мне разобраться с этой штукой, а то как-то начал изучать и забросил…
для меня всегда проблематично, считаю
Резонно, самого коробит от кучи проводов и плат никак не могу привести все в прядок, хочется чтоб выглядел аккуратно, а выглядит как комок проводов
dl.dropboxusercontent.com/u/…/IMG_4985s.jpg =((
Чет я запутался (подскажите кто может), : в цикле посчитал три ПИДа (тангаж, крен, вращ.) , а теперь надо их с разными знаками, для каждого мотора, прибавлять к общему ГАЗу и “совать” на движки ??
Правильно ? Может кусок кода у кого под рукой…
А я исходники просто так выкладываю 😃 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 😃
а теперь надо их с разными знаками, для каждого мотора, прибавлять к общему ГАЗу и “совать” на движки ??
Совершенно верно, каждый компонент ориентации матрично приводиться к конфигу рамы, для квадры Х: ++ – -+ ±
Может кусок кода у кого под рукой…
Кода под рукой нет, но на ветке гдето валяется мой проект см. файл 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>АП.СУММАТОР:
матрично приводиться
А что, ограничений по модулю не делается ? А если условно Газ + ПИД вылезет за пределы допустимого (у меня) диапазона 1000-2000 ? (Ваш проект у меня есть, но видать старый, нет там mixer.cpp) просто подскажите, если не трудно, а то хочется полетать уже…
простое ограничение…
Для вас к прочтению обязательно!!! multiwii.p.ht/index.html
rcopen.com/forum/f123/topic267086/582 - вывод напрашивается - мосх должен быть тяжелым…
Вот такая же фигня(тока физику и термех? вспоминал), написал и отладил стабилизацию без PID.
Стабилизация без ПИД это круто, как учитываются в стабилизации ускорения и моменты инерции?
Буду отлаживать на писюке через серийник, так удобней на порядок(бряки, замедленный просмотр по логам), потом просто библиотеку к пректу подключить.
Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.
надо и мне разобраться с этой штукой, а то как-то начал изучать и забросил…
Да я тоже очень поверхностно знаком, отрабатываю только мат.механизмы, с визуализацией бы ещё разобраться получше.
вывод напрашивается - мосх должен быть тяжелым…
Точнее инертный, не должен воспринимать высокочастотную вибрацию некомпенсируемую математикой, но и не должен иметь резонансов на НЧ.
Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.
В принципе ничего сложного нет. Если знакомы с MSVC, то вообще проблем не должно быть, есть кучу сайтов где можно скачать нужные контролы для приложений если лень разбиратся и писать свои. Тем более для наших целей ничего специфичного не нужно. www.codeproject.com
http://codeguru.com
Стабилизация без ПИД это круто, как учитываются в стабилизации ускорения и моменты инерции?
Ускорения так таковые вообще не учитывються(это одно из преимуществ). А так mV=Ft(это только PD, I не делал еще), если на железе заработает потом напишу с картинками, на пальцах не объяснить.
А момент инерции, это коэф пропорциональности между m и F, т.е. соотношение силы тяги к массе. Его проще имперически подобрать,чем приводить к реальным (я в Декартовой системой координат считаю, мне так проще, чем в полярной), в int - ах все равно все попугаях .
Хотя на сферическом кирпиче вполне реальные размерности 😃
Масса 5 кг, сила тяги 100 Н, g=10 м/с*с. Ну т.е. для случая если висим на половине тяги. Отнощение момента к моменту инерции конечно больше, но проще подобрать. Если смотреть замедленно Логи, там прекрасно видно куда врем.
Да много удобней, но нужно владеть инструментами программирования PC, тут я не очень, только консольное что-то могу написать. Кста, на самолётной ветке есть АлексСнег, он свой мухомозг таким жа способом разрабатывал.
Ну а я все жизнь на PCюке 😃, мне проще так. Тем более есть C++ Builder(на нем и делаю) совместим с ansi С и виндовую форму накидать там пара минут еще пара минут COM порт прочитать.
А кажись понял про какие ускорения. От акселя на вираже, подъемах, спусках и т.п.? (ну т.е. от чего аксельный горизонт плывет?). Я просто считаю это элементами автопилота(даже стабилизация в горизонт) по этому сразу не понял о чем речь. Хочу пока сделать именно стабилизацию, то что только от ДУСа. Это намой взгляд пока самое узкое место.
В принципе ничего сложного нет. Если знакомы с MSVC, то вообще проблем не должно быть, есть кучу сайтов где можно скачать нужные контролы для приложений если лень разбиратся и писать свои. Тем более для наших целей ничего специфичного не нужно.
Знаком, но нужно разбираться во многих вещах напрямую к предмету не относящихся, что крайне лень. Вот если б была установленная и настроенная среда с шаблоном проекта куда нужно встроить только предметную часть 😁
А момент инерции, это коэф пропорциональности между m и F, т.е. соотношение силы тяги к массе. Его проще имперически подобрать,чем приводить к реальным (я в Декартовой системой координат считаю, мне так проще, чем в полярной), в int - ах все равно все попугаях .
Не совсем, вы это о линейном перемещениях, момент инерции это о вращательном движении. ru.wikipedia.org/wiki/������_�������
А кажись понял про какие ускорения. От акселя на вираже, подъемах, спусках и т.п.? (ну т.е. от чего аксельный горизонт плывет?). Я просто считаю это элементами автопилота(даже стабилизация в горизонт) по этому сразу не понял о чем речь.
и эти тоже, но я о другом, ПИД выполняет компенсацию возмущений не только пропорциональной, но и дифф. частью (предотвращает резкие эволюции). без интегральной можно обойтись, однако придётся очень точно балансировать летуна, ну и о подвесе чего-то подвижного или асимметрического нужно забыть. В общем всё это в ТАУ достаточно прописано.
Хочу пока сделать именно стабилизацию, то что только от ДУСа.
Это конечно основа всего, но реализация крайне проста, можно вообще никакие матрицы не считать, подать каждую ось на свой ПИД, а результаты помноженные на коэффициент, в соответствии с расположением моторов, сложить между собой и значением тяги. Вот вам и Кук! А вот правильно интегрировать ДУС чтоб получить ориентацию объекта это уже сложнее, примерно так e-maxx.ru/sgu/files/my_kurs.pdf
А ещё сложнее правильно корректировать пространственный интеграл, в этом есть БОЛЬШАЯ проблема.