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

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. и наконец, у нас есть ДВА вектора, по которым положение определяется однозначно:
  • включение, поиск максимальной компоненты компаса, поворот её на наклонение — получаем “низ”
  • выделяем горизонтальные компоненты — получаем “север” (магнитный, географический нам ни к чему)
  • векторное произведение дает третью ось
  • профит

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

SergDoc
HikeR:

поворот её на наклонение — получаем “низ”

а в какую сторону поворот?

DVE
HikeR:

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

И иметь глюк вплоть до краша при пролете над любой железной трубой? А главное нафиг, ради 3$ экономии на гироскопе?

Думается, если б можно было создать сверхдешевый контроллер на одном только компасе, китайцы бы давно их клонировали и продавали по 10$/шт.
Впрочем, если большое желание почему бы не попробовать, в любом контроллере компас есть 😃 Теоретически, может оно даже кое как и полетит…

HikeR:

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

Фильтр Калмана вроде может, в подробности правда не вдавался.

SergDoc
DVE:

Фильтр Калмана вроде может, в подробности правда не вдавался.

Конечно может, но танцевать с бубном над ним😵 перефразирую Дмитрия : чем больше Калман, тем больше настроечно-подстроечных коэффициентов, которые не подлежат математической реализации. только итерационный подбор, только хардкор:)

HikeR
SergDoc:

а в какую сторону поворот?

в правую, конечно же ;)

а если серьезно, то у нас есть:

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

аналогия — калибровка акселерометра, есть абы как установленная плата и мы знаем, что в покое ускорение свободного падения направлено к центру планеты. запомнив один раз смещения потом всегда знаем где у нас “низ”.

DVE:

при пролете над любой железной трубой

ничего не случится, не делают у нас трубы из магнитотвердых материалов ;)

mahowik
rual:
  1. За всех не скажу, но у меня компас 5883 практически не шумит.

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

DVE:

может оно даже кое как и полетит…

уверен что не полетит 😃, либо если и удастся подняться, то с оч. малыми пидами и будет болтать как гг в проруби при малейшем возмущении… В частности с малым П, т.к. Д будет никакой, по причине описанной выше, где при увеличении П будет расколбас…

DVE

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

Коптер летающий только на компасе я бы запускать побоялся 😃

mahowik
HikeR:

ничего не случится, не делают у нас трубы из магнитотвердых материалов 😉

летаю иногда по вечерам на стоянке около супермаркета… пару раз грубо падал на асфальт (примерно в одной и той же зоне) из-за глюков по компасу… рядом обычная не высоковольтная линия передач и в метрах 10-20 вышка сотовой связи… за пару сек. до крашей резко проворачивало на 90-180 град по yaw… FS небыло… так и не понял в чем дело, одни подозрения…

HikeR
mahowik:

достаточно шумный, что бы посчитать дифФ. угла, т.е. угловую скорость

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

mahowik:

рядом обычная не высоковольтная линия передач и в метрах 10-20 вышка сотовой связи

казалось бы, при чем тут компас…

DVE
mahowik:

так и не понял в чем дело, одни подозрения…

А в Ардукоптере (оригинальном) кстати полетный лог во флеш пишется… 😃 Реально полезная штука при всяких разборах полетов.

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

mahowik
DVE:

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

дада так и есть… гира спасает… фактор в 400-500 и вперед!

/* Set the Gyro Weight for Gyro/Magnetometer complementary filter */
/* Increasing this value would reduce and delay Magnetometer influence on the output of the filter*/
#define GYR_CMPFM_FACTOR 400.0f
HikeR:

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

а без нее стабилизации в конечном ПИД контроллере не получите…

HikeR:

казалось бы, при чем тут компас…

я в физике полей не силен 😃, но что то мне подсказывает что там силовое поле нехилое…

HikeR
mahowik:

там силовое поле нехилое…

магнитное поле прямо пропорционально силе тока. напомните, какой там ток в этих киловольтовых линиях?

mahowik:

а без нее стабилизации в конечном ПИД контроллере не получите…

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

mahowik
HikeR:

магнитное поле прямо пропорционально силе тока. напомните, какой там ток в этих киловольтовых линиях?

тут спор прекращаю, т.к. небыло “черного ящика” с логами… бессмысленно спорить…

HikeR:

нет акселя — уже не нужен гироскоп для его коррекции

HikeR:

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

все не так 😉

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

НО ни в коем случае не отговариваю вас от реализации идеи, именно реализации, а не теоретизирования…

HikeR

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

mahowik:

аксель… всегда знает где земля

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

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

if (autoPilot==1) {
	Vector4f up=new Vector4f(0,1,0,0); // world up vector
	fd.modelToWorld.invert();
	fd.modelToWorld.transform(up); // world up in model coordinates, use it to level the model

	// magika begin
	fd.ailStick=0.3f+up.z;
	fd.eleStick=-up.x;
	// magika end
	// ...
}

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

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

mahowik:

именно реализации, а не теоретизирования…

реализация пока уперлась в hard-iron коррекцию, компас в телефоне дает даже не эллипсоид (после всякоразного вращения), а какую-то картофелину.