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

rual
mahowik:

это вроде как уже есть в арду…

неслышал о таком, надо будет поинтересоваться…

mahowik:

вопрос: как моделирование делаете? какие тулы/проги для этого удобнее… мне этого часто не хватает, но тоже руки не дошли пробить почву… вроде как матлаб можно с некоторыми из симуляторов коннектить?

В матлабе есть Симулинк, в нем есть чтототам “авиакосмос”,вот в нем есть готовые объекты акселей гиро и тд, кроме того туда можно джойстик подключить и рулить матмоделькой).Я отрабатываю чисто математические модели, зачастую примитивные, но позволяющие проверить качество теории, а вот потом при переходе к практике начинается самое интересно)))

mahowik:

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

Всё верно, у меня всё так, ингода правда наоборот ))) всё приводится к бортовой СК, у меня методы вращений сразу в ИНС-объект вставлены

/* ïîëó÷èòü âåêòîð â áîðòîâîé ÑÊ */
vector3 INS::Vect2Bort(vector3 vVg)
{
 Quaternion q(vVg.x,vVg.y,vVg.z,0);
 q = qINS.conjugated()*q*qINS;
 vector3 v(q.x,q.y,q.z);
 return v;
}
/* ïîëó÷èòü âåêòîð â ãëîáàëüíîé ÑÊ */
vector3 INS::Vect2Glob(vector3 vVb)
{
 Quaternion q(vVb.x,vVb.y,vVb.z,0);
 q = qINS*q*qINS.conjugated();
 vector3 v(q.x,q.y,q.z);
 return v;
}

в кватернионах это просто!

HikeR
mahowik:

вроде как матлаб можно с некоторыми из симуляторов коннектить?

я когда-то подключал симулятор AeroSimRC к CopterControl-у и прочим наземным станциям, там железо рулило симуляторной моделькой. однако интерес к опенпилоту как-то угас, но осталась не совсем законченная идейка: подключить к симу простой скриптовый язык, чтобы отрабатывать алгоритмы управления просто переписывая скрипты, без компиляций и прочего железа.

сейчас имеет передача из сима данных от акселя, гиры, GPS в Lua-плагин (данных намного больше, но выбраны только имеющие свои реальные “аналоги”), дальше все зависит только от фантазии. есть стандартные математические функции, чуть-чуть векторно-матричных преобразований, работает простейший ПИД-контроллер. практический минус только один, частота обновления не превышает 60Гц (частота развертки монитора), более синхронизироваться не на чем.

собственно, если есть интерес по отработке именно алгоритмов используя Lua (вернее, LuaJIT 2.0.0), то могу как-то это дело выложить в удобоваримом виде.

p.s.
матлаб это конечно здорово, но самолеты-коптеры модельных размеров более-менее адекватно симулирует только вышеназванный сим.

mahowik
rual:

неслышал о таком, надо будет поинтересоваться…

мне знакомый ардукоптерист говорил, ток вот забыл как это мод называется…

а я вот с матрицами поворотов и кватернионами туплю пока… оссобено со знаками осей… в двух осях заблудиться можно… ))

rual:

Всё верно, у меня всё так, ингода правда наоборот ))) всё приводится к бортовой СК, у меня методы вращений сразу в ИНС-объект вставлены

тогда где демо удержания позиции как у вис.аста? 😃

igor_v_t
mahowik:

а я вот с матрицами поворотов и кватернионами туплю пока… оссобено со знаками осей… в двух осях заблудиться можно… ))

Да не надо блудить. Если понимаете, что такое углы Эйлера ДСМ матрицу могу объяснить на пальцах (не путать с распальцовкой) Квартерионы это просто другое представление. Все очень просто.

mahowik

Игорь, рад видеть! Давновато вас видно не было…

igor_v_t:

Да не надо блудить. Если понимаете, что такое углы Эйлера ДСМ матрицу могу объяснить на пальцах (не путать с распальцовкой) Квартерионы это просто другое представление. Все очень просто.

Накидайте ссылок полезных тогда на статьи/литературу, которая вам помогла 😃
Гуглить то я умею, но интересны именно “полезные” материалы…

HikeR
igor_v_t:

Квартерионы это просто другое представление. Все очень просто.

кстати, я вполне могу объяснить использование кватернионов в 3D-графике и/или в играх, но до сих пор не понимаю, зачем они нужны в “нашем” случае. их использование дает профит только в одном случае, когда нужно повернуть одновременно больше 4-х точек в пространстве либо для построения “гладкого” пути (сплайна) между двумя положениями.

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

Sir_Alex
rual:

неслышал о таком, надо будет поинтересоваться…

Фича называется GeoFence.

Sir_Alex
mahowik:

судя по видосу и отличному качеству удержания в 2.9RC1 прикрутили аксель на удержание высоты?

Там не только для удержания высоты, но и по X Y еще аксель используется, правда по умолчанию отключена…
Попытки использовать аксель для оси Z у них давно в коде были, видимо только сейчас довели до ума…

Ребята там действительно толковые сидят, но распыляются по сторонам… Вот сейчас код адаптируют под платформу PX4. Правда уже давно код вылизывался под компиляцию под разные процессоры. В Версии 2.9 сделали(делают) HAL, правда все равно коряво, т.к. полной независимости все равно нет, например драйвер MPU6000 жестко завязан на интерфейс SPI? ну и т.д. 😃

mahowik
Sir_Alex:

но и по X Y еще аксель используется, правда по умолчанию отключена…

значит скорее всего не работает еще, т.е в альфа зачатках… чую пока Виктор (вис.аста) будет думать, что делать с его наработками, так опен сорсы не хуже летать начнут 😃

Sir_Alex:

Там не только для удержания высоты, но и по X Y еще аксель используется, правда по умолчанию отключена…
Попытки использовать аксель для оси Z у них давно в коде были, видимо только сейчас довели до ума…

тут похоже с появлением нормальных сенсоров (mpu6050/6000 + ms5611) стало получаться… у меня с bmp085 + bma020 раньше тоже хрен что получалось, а с mpu6050 + ms5611 почти с первой попытки…

Sir_Alex:

Ребята там действительно толковые сидят, но распыляются по сторонам… Вот сейчас код адаптируют под платформу PX4. Правда уже давно код вылизывался под компиляцию под разные процессоры. В Версии 2.9 сделали(делают) HAL, правда все равно коряво, т.к. полной независимости все равно нет, например драйвер MPU6000 жестко завязан на интерфейс SPI? ну и т.д.

крута! no comment как грится…

Rabbit_Fly

А может нам придумать новую платку под самодельный контролер. Какие датчики счас самые актуальные?

rual
mahowik:

тогда где демо удержания позиции как у вис.аста?

У меня нет “абсолютных” датчиков, т.е. баро и ГПС. Использовал чистый аксель, если посмотреть на серый вектор при включенных моторах, то всё станет понятно

У Виктора аналоговые датчики и ПХ4, которую я в руках не держал…

HikeR:

но до сих пор не понимаю, зачем они нужны в “нашем” случае. их использование дает профит только в одном случае

а я ничего другого не понимаю )))

Rabbit_Fly:

А может нам придумать новую платку под самодельный контролер. Какие датчики счас самые актуальные?

Это к SergDoc, если посмотрите ветку найдете много разных вариантов.

SergDoc

У меня пока не получается VET6 в два слоя уложить 😦 (как ни крути переходные отверстия под процем - как серпом по я…) , вот RGT6 как раз, но, но нету у меня его… мучаю дальше, про автотрассировщик уже забыл (игл - птыц гордый, столько дырок клюёт - мама не горюй) - всё вручную…

Rabbit_Fly
SergDoc:

У меня пока не получается VET6 в два слоя уложить (как ни крути переходные отверстия под процем - как серпом по я…) , вот RGT6 как раз, но, но нету у меня его… мучаю дальше, про автотрассировщик уже забыл (игл - птыц гордый, столько дырок клюёт - мама не горюй) - всё вручную…

а какие датчики ставить будете???

igor_v_t
mahowik:

Накидайте ссылок полезных тогда на статьи/литературу, которая вам помогла 😃
Гуглить то я умею, но интересны именно “полезные” материалы…

Исходно про углы Эйлера почитать нужно. Матрица - это просто удобное представление для преобразования вектора при переходе из одной системы координат к другой
На Диудроне была статейка на английском по DCM матрице. А реализацию алгоритма проще всего посмотреть в ArducopterNG. Дальше ничего по существу не менялось. Вынесли DCM матрицу в библиотеку.

Rabbit_Fly:

А может нам придумать новую платку под самодельный контролер. Какие датчики счас самые актуальные?

Уже видел MPU9150. STM тоже наваял кучу вариантов. Но учитывая что ALL IN ONE PRO Flight Controller v1.0 стоит 35 дол. с хорошими датчиками смысла свое ваять особого нет. Будет намного дороже. Я тут попытался плату датчиков сделать, но к тому моменту, когда платы изготовили стало уже неинтересно. И лежит Навстар с Глонасом - пылятся.

SergDoc
Rabbit_Fly:

а какие датчики ставить будете???

MPU6000, ms5611, HMC5883, GPS MT332, сонар, optical flow…

Rabbit_Fly

MS5611 по SPI? Компас и гпс будете выносить или оставите на основной плате?

igor_v_t
SergDoc:

MPU6000, ms5611, HMC5883, GPS MT332, сонар, optical flow…

А может вместо optical flow ставить матрицу с высоким разрешением и хорошей чувствительностью (день-ночь)?

SergDoc

матрица у меня есть, но понятия не имею, что за она ( может маркировка и есть но снизу, а выпаивать пока не решался) и DCMI уже никак, но она вроде как по spi мало дорожек, проц на котором она висит без маркировки (похоже какая-то ПЛИС)

Rabbit_Fly:

MS5611 по SPI? Компас и гпс будете выносить или оставите на основной плате?

5611 по i2c оставил ибо ну никак не выкручу дорожки, в нынешней интерпретации компас на основной плате (на мелкоплате танцевал с бубном пока не поменял шнурок программатора на экранированый и с компасом более проблем не имел) gps отдельно на верхней плате с батарейкой, там же пищалка и MicroSD…

mahowik
igor_v_t:

Исходно про углы Эйлера почитать нужно. Матрица - это просто удобное представление для преобразования вектора при переходе из одной системы координат к другой На Диудроне была статейка на английском по DCM матрице. А реализацию алгоритма проще всего посмотреть в ArducopterNG. Дальше ничего по существу не менялось. Вынесли DCM матрицу в библиотеку.

собственно везде примерно тож самое… я давным давно разбирался как это в мвие работает… есть вектор, который в каждой итерации цикла ворочается (через матрицу апроксимированную для малых углов, для перформасу) по ролл/питч на на делту угла: произведение из угловой скорости гироскопа и времени итерации цикла… далле этот гиро вектор корректируется через комплиментарный фильтр вектором акселя для удаления дрейфа гиры… пашет быстро и хорошо! 😃

mahowik

нашел занятные статейки ток что и прочитал: