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

HikeR

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

вопрос: почему так никто не делает?

SergDoc

Я тут на люк канализационный присесть хотел (чугун же вроде) расколбас и минус два пропа 😃

Вот проект без гир, сейчас уже и не помню откуда, но видео было…

rual
HikeR:

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

Мысль здравая, но не додуманная. Предствь себе магнитный вектор в пространстве, а теперь используя его как ось, поверни коптер? Показатели магенитометра не изменились, а как изменилась ориентация леталки?

SergDoc:

Вот проект без гир, сейчас уже и не помню откуда, но видео было…

Сергей, вот как раз без гир можно, вилка из двух независимых векторов чётко определяет ориентацию по всем плоскостям, но вот только аксель будет мотать как попало (и компас тоже, если с ЭМС не всё хорошо). В том проекте видимо рулит волшебство калмана. А в моей системе ДУСы самый достоверный датчик, остальные его интеграл только доруливают через очень мелкие коэффициенты.

HikeR
rual:

вилка из двух независимых векторов чётко определяет ориентацию по всем плоскостям

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

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

у меня есть телефон с GPS, акселем и компасом для проверки (кстати, свое положение он замечательно определяет без гироскопов), но все никак не добраться до экспериментов.

DVE

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

Идеальный вариант - это наоборот, брать данные с как можно бОльшего числа датчиков, усредняя и объединяя их. Ну по крайней мере, если ставить целью сделать хорошо а не дешево 😃

HikeR
DVE:

экономия пары баксов на акселерометре имхо того не стоит.

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

DVE:

бОльшего числа датчиков, усредняя и объединяя их.

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

SergDoc
HikeR:

летают ведь системы на одних гироскопах с сильным интегрированием,

Там нет интегрирования, а стабилизация осуществляется по угловой скорости, и запускать можно из любого положения, КУКу, например, фиолетово, как вырулишь так и полетит (ну естественно не к верху лапами), завешивается без проблем, как и вии в акро режиме - только по ветру плавает, да газом подрабатывать надо, одной рукой (если моде2 то правой) можно чесатся во всех местах - никуда не денется 😃

я сейчас экспериментирую с PPM, если всё срастётся то на новой платке останется только 1 вход, 8 выходов на моторы и 4 на сервы и получается довольно простая (в плане изготовления) платка - сделаю и дома и верхняя с магнитометром, GPS ( MT3329, батарейку ставить?) и пищалкой, тоже легко разведётся…

HikeR
SergDoc:

Там нет интегрирования

Flymentor 3D с удержанием горизонта на одних гирах недоумевает на эту фразу.

SergDoc

Ну так как я не вижу что у него в нутрях, то могу только предположить, что гирами он таки меряет угловые скорости, а камерой как мышкой горизонтальные смещения и всё это микширует с каналами управления, примерно как тот же КУК, возможно я и заблуждаюсь, но не вижу смысла в интегрировании в данной системе - только вносить ошибку?

HikeR

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

SergDoc

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

rual
HikeR:

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

Это всё хорошо, но ,Дмитрий, ответь на поставленный мной выше вопрос.
Воткни спицу (иглоку) под углом вниз в ластик, расположенный строго горизонтально. Затем воткни эту спицу в землю, чтобы ластик сохранял своё положение, определи кородинаты вектора-спицы относительно ластика, затем поверни ластик вокруг спицы на 180гр. А теперь проверь координаты этого вектора относительно ластика. Что ты видишь? Координаты вектора останутся прежними,т.е. “магитометр” ластика будет его видеть так же как в начале эксперимента, а положение ластика измениться так, что полетит он боком в землю!
Эт я к тому сказал, что ОДИН ВЕКТОР (3 координаты) НЕ МОЖЕТ однозначно определить положение тела в 3хмерном пространстве (если корординаты не углы)!!! Из этого факта совершенно понятно, почему плывёт курс систем БЕЗ компаса, но летают эти системы потому что летучесть не зависит от курса. А от тангажа и крена ой как зависит!

А насчёт систем на одних ДУСах, Сергей абсолютно прав, там ТОЛЬКО СТАБИЛИЗАЦИЯ, т.е. 3 ПИДа, которые пытаются удержать угловую заданную скорость. Роль абсолютного датчика положения выполняет пилот, отпусти он стики, и коптер через некоторое время завалится.

Musgravehill
HikeR:

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

Я пробовал библиотеку “FreeIMU library”, которая построена на code.google.com/p/imumargalgorithm30042010sohm/ без коптера, в руках. Во FreeIMU был косяк с присвоениями, который давал броски по курсу.
M - 3 оси магнетометра, А - 3 оси акселерометр. ДУС всегда включено.

  1. mx=0; my=0; mz=0; Коррекция ДУС только по акселерометру. Работает, но сильнее “ловит” линейные ускорения и дает несуществующие наклоны.
  2. ax=0; ay=0; az=0; Коррекция ДУС только по магнетометру. Работает, но заторможеннее, чем в комплексе с акселерометром.
  3. mx=0; my=0; mz=0; ax=0; ay=0;az=0; Коррекции ДУС не происходит. Работает, но по курсу плывет.

В домашних условиях БИНС на базе ДУС и 3х-осевого магнитометра вполне работала. Только у нас вектор магнитного поля входит в землю почти вертикально, поэтому его проекция на горизонт мала - может утонуть в шумах от питания моторов и rxtx.

HikeR

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

у меня ход мыслей следующий. меняем гиру на компас, вместо относительного датчика получаем абсолютный. по изменению положения можно обратно наинтегрировать угловые скорости если вдруг потребуется. нет акселя — уже не нужен гироскоп для его коррекции. ограничиваем наклоны аппарата до +/-30° и забываем про точки в которых положение по одной оси будет неопределенным.

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

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

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

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

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

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

однако теперь смущает “маленький” факт:

Musgravehill:

Коррекция ДУС только по магнетометру. Работает, но заторможеннее, чем в комплексе с акселерометром.

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

Musgravehill:

Только у нас вектор магнитного поля входит в землю почти вертикально

“у вас” (впрочем и у нас) по данным разведки примерно так:
15,490.24 nT (North Comp)
03,238.94 nT (East Comp)
50,558.38 nT (Vertical Comp)
52,977.24 nT (Total Field)

вполне себе вычислябельные цифры ;)

Musgravehill
HikeR:

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

…honeywell.com/…/HMC5883L_3-Axis_Digital_Compass_I…
HMC5883L максимум 160Гц.
Калибровка, насколько помню, только вращение платы и нахождение max-min показаний для нормирования. Soft\hard iron (попарно все оси графически - в виде приведения кривой фигуры с провалами к идеальной окружности) не делал.
Библиотека сносно работала на ATmega328, выдавая 3 угла с частотой 200-300Гц. Конечно, это без дополнительных нагрузок в виде ПИД-регулирования, ШИМ на моторы, парсинг PPMSUM и прочее.

После этого играл с fusion алгоритмом в MPU6050. Чип выдает готовые кватернионы ДУС + акселерометр. Магнитометр никак не подключается в алгоритм. Причем, магнитометр запаян байпасом через MPU6050. В итоге, или 6DOF готовые кватернионы без учета магнитометра, или сырье ДУС, акселерометр + данные с магнитометра транзитом через MPU6050. Эх, мечты. Вот бы доступный готовый чип 9DOF с Калманом (опционально GPS, барометр), чтобы сразу давал углы и высоту. Как www.vectornav.com, только хоббийный.

rual
Musgravehill:

После этого играл с fusion алгоритмом в MPU6050. Чип выдает готовые кватернионы ДУС + акселерометр. Магнитометр никак не подключается в алгоритм. Причем, магнитометр запаян байпасом через MPU6050.

Вот это интересно, SergDoc тут ссылку давал на код с двоичными массивами для МПУ6050. Эт я так понимаю микрокод для МПУ?
Где хотя бы обобщенное описание по русски? Сам код, как грузить в МПУ, как забрать данные?

Musgravehill
rual:

Где хотя бы обобщенное описание по русски? Сам код, как грузить в МПУ, как забрать данные?

По-русски не видел. По-английски и то мало описания.
Качаете у Varesano внизу библиотеку www.varesano.net/projects/hardware/FreeIMU, находите в архиве MPU60X0_6AXIS_MOTIONAPPS20 - там массивы для закачки в MPU и куцый текст.

varesano.net/…/initial-tests-freeimu-v04-and-mpu60… - опыты.

www.i2cdevlib.com/devices/mpu6050 - как перехватывали инициализацию MPU6050 с оригинальной devboard.

mahowik

Что все так ухватились за embedded DMP mpu6050?! Ну разгрузится проц чутка, что еще актуально для AVR-ок и уже совсем не важно для stm32 или ARM.
Если интерсно, то по ссылке ниже доволно креативный фриЦ Sebbi, сейчас теребит Invensense developer support на предмет документации…
www.multiwii.com/forum/viewtopic.php?f=8&t=2642&st…

По поводу IMU на базе лишь компаса, идея может и трезвая, но не практичная совершенно, даже если и возможно было бы получить на выходе мат. модели углы и угловые скорости:

  • компас довольно сильно шумит
  • ГПС не всегда в коннекте и т.д.
  • коптер должен быть из дерева не исключая моторы 😃
Musgravehill
mahowik:

теребит Invensense developer support на предмет документации…

“total vaporware” (с) Crashpilot1000 😆

9DOF DMP существует только в воображении. Зато продажи датчика идут в реальности. В уголке разработчика зарегистрирован, но скачать ничего не могу - статус обычного пользователя не позволяет.

rual
mahowik:

Что все так ухватились за embedded DMP mpu6050?! Ну разгрузится проц чутка, что еще актуально для AVR-ок и уже совсем не важно для stm32 или ARM.

Да не то чтоб ухватился, просто хотелось пощупать и сравнить. Самое главное разгрузится не только проц, но и шина (особо важно для и и2ц).

mahowik:

По поводу IMU на базе лишь компаса, идея может и трезвая, но не практичная совершенно, даже если и возможно было бы получить на выходе мат. модели углы и угловые скорости: - компас довольно сильно шумит - ГПС не всегда в коннекте и т.д. - коптер должен быть из дерева не исключая моторы

  1. Полностью определить положение по ОДНОМУ вектору нельзя! И дело здесь не в качестве и производителе датчика, известная мне математика не позволяет ОДНОЗНАЧНО определить положение тела в 3х мерном пространстве ОДНИМ 3х мерным вектором, так как тело остается свободным в плоскости нормальной вектору. Кватеринионы позволяют полностью оперделить, но содержат 4 параметра.
  2. За всех не скажу, но у меня компас 5883 практически не шумит.
  3. ГПС - согласен, но в нашем случае постояное обновление склонения не особо нужно, не на тысячи км летаем.
  4. Не думаю, что рама и прочие элемены, правильно расположенные, смогут сильно ( до невозмжности практического применения) исказить показания мага.
HikeR

в обратном порядке 😉

  1. аппараты из чугуния и прочих магнитных материалов действительно давно не в ходу, композиты на компасы не влияют. силовые провода равномерно скрученные и симметрично уложенные вобще могут самокомпенсировать наводимые ими помехи
  2. GPS нужен один раз при старте, да и то можно обойтись захардкоденой переменной (наклонение в текущей местности)
  3. и наконец, у нас есть ДВА вектора, по которым положение определяется однозначно:
  • включение, поиск максимальной компоненты компаса, поворот её на наклонение — получаем “низ”
  • выделяем горизонтальные компоненты — получаем “север” (магнитный, географический нам ни к чему)
  • векторное произведение дает третью ось
  • профит

и да, кватернион не вектор, а комбинация вращений, ну или более компактная форма матрицы вращения.