Создание собственной системы стабилизации
2rual:
я же конкретную систему упомянул, флайментор (как хеликоманд) делает из вертолета (или коптера) простой соосник, стик в центре - модель в горизонте. вернее в положение “запомненном” при включении, коптеры ставят горизонтально, вертолеты с небольшим наклоном в сторону хвостового ротора, далее идет то самое интегрирование угловых скоростей в ориентацию. (причем начальные отклонения стика означают “наклонись на заданный угол”, а близкие к крайним - “начни выдерживать заданную скорость поворота”, но это так, детали).
у меня ход мыслей следующий. меняем гиру на компас, вместо относительного датчика получаем абсолютный. по изменению положения можно обратно наинтегрировать угловые скорости если вдруг потребуется. нет акселя — уже не нужен гироскоп для его коррекции. ограничиваем наклоны аппарата до +/-30° и забываем про точки в которых положение по одной оси будет неопределенным.
про спицу и ластик аналогия вполне понятна, но это больше к связке аксель+гира относится. вот еще “на пальцах” попробую объяснить, почему-то практически все системы требуют установки строго по уровню, далее нужно как-то смонтировать плату на пепелаце с сохранением этого положения. одному лишь коптерконтролу (и, по слухам, автокваде) пофиг на положение платы, главное откалибровать связку плата+аппарат.
для меня было огромным потрясением недавно прочитать в тутошних блогах следующее:
Плату датчиков надо выставлять в LEVEL на ровной горизонтальной поверхности! Потом уже крепить на пепелац и, подкладывая что-то под края, добиваться желаемого угла атаки и т.п.
Создатели различных ардупилотов заигрывают с пользователем, пытаясь устанавливать LEVEL при произвольном положении платы. Это в корне неправильно. Не считая удобства настройки, это полностью испоганит алгоритм ориентации из-за паразитных составляющих по сдвинутым осям гироскопа.
я всегда считал (и продолжаю считать) что гироскопам абсолютно пофигу на “сдвинутые оси”. а тут такое из уст человека, который вроде бы “в теме”.
это все к тому, что даже в коптерконтроле изначальное “кривое” положение первым делом выравнивается и все расчеты идут уже от этого значения. то есть система принудительно загоняется в такое положение, в котором аксель+гира не могут отследить вертикальную ось вращения. но зачем?? чем “кривее” начальное положение, тем больше информации поступает от гироскопов, тем точнее итоговый результат. почему этот начальный “нуль” обязательно должен совпадать с нулем координат?
вспоминается первые эксперименты с опенпилотом, откалиброванная и выставленная строго в горизонт плата имела минимальный дрейф в 5°/мин по направлению, а брошенная абы как и с отключенным обратным поворотом системы координат могла показывать нули по полчаса. она же дефолтная установленная вертикально на боковую стенку 450-ого верта обязательно превращала висение в борьбу с хвостом, а засунутая по-диагонали в 250-й мелкий верт (по другому просто никак) была намного стабильнее.
и плавненько переходим к компасу, который изначально дает вектор далекий от привычных перпендикулярно-параллельных направлений. две точки (спица с ластиком) у него конечно же есть, но они располагаются в стороне от обычного положения и коптера и самолета и вертолета. вот за это я зацепился и, надеюсь, смог донести идею ;)
однако теперь смущает “маленький” факт:
Коррекция ДУС только по магнетометру. Работает, но заторможеннее, чем в комплексе с акселерометром.
как быстро и стабильно с компасов можно снимать показания? если с этим делом не очень, то вся затея рушится и оставляет компас только как корректирующий датчик.
Только у нас вектор магнитного поля входит в землю почти вертикально
“у вас” (впрочем и у нас) по данным разведки примерно так:
15,490.24 nT (North Comp)
03,238.94 nT (East Comp)
50,558.38 nT (Vertical Comp)
52,977.24 nT (Total Field)
вполне себе вычислябельные цифры ;)
как быстро и стабильно с компасов можно снимать показания? если с этим делом не очень, то вся затея рушится и оставляет компас только как корректирующий датчик.
…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, только хоббийный.
После этого играл с fusion алгоритмом в MPU6050. Чип выдает готовые кватернионы ДУС + акселерометр. Магнитометр никак не подключается в алгоритм. Причем, магнитометр запаян байпасом через MPU6050.
Вот это интересно, SergDoc тут ссылку давал на код с двоичными массивами для МПУ6050. Эт я так понимаю микрокод для МПУ?
Где хотя бы обобщенное описание по русски? Сам код, как грузить в МПУ, как забрать данные?
Где хотя бы обобщенное описание по русски? Сам код, как грузить в МПУ, как забрать данные?
По-русски не видел. По-английски и то мало описания.
Качаете у 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.
Что все так ухватились за embedded DMP mpu6050?! Ну разгрузится проц чутка, что еще актуально для AVR-ок и уже совсем не важно для stm32 или ARM.
Если интерсно, то по ссылке ниже доволно креативный фриЦ Sebbi, сейчас теребит Invensense developer support на предмет документации…
www.multiwii.com/forum/viewtopic.php?f=8&t=2642&st…
По поводу IMU на базе лишь компаса, идея может и трезвая, но не практичная совершенно, даже если и возможно было бы получить на выходе мат. модели углы и угловые скорости:
- компас довольно сильно шумит
- ГПС не всегда в коннекте и т.д.
- коптер должен быть из дерева не исключая моторы 😃
теребит Invensense developer support на предмет документации…
“total vaporware” (с) Crashpilot1000 😆
9DOF DMP существует только в воображении. Зато продажи датчика идут в реальности. В уголке разработчика зарегистрирован, но скачать ничего не могу - статус обычного пользователя не позволяет.
Что все так ухватились за embedded DMP mpu6050?! Ну разгрузится проц чутка, что еще актуально для AVR-ок и уже совсем не важно для stm32 или ARM.
Да не то чтоб ухватился, просто хотелось пощупать и сравнить. Самое главное разгрузится не только проц, но и шина (особо важно для и и2ц).
По поводу IMU на базе лишь компаса, идея может и трезвая, но не практичная совершенно, даже если и возможно было бы получить на выходе мат. модели углы и угловые скорости: - компас довольно сильно шумит - ГПС не всегда в коннекте и т.д. - коптер должен быть из дерева не исключая моторы
- Полностью определить положение по ОДНОМУ вектору нельзя! И дело здесь не в качестве и производителе датчика, известная мне математика не позволяет ОДНОЗНАЧНО определить положение тела в 3х мерном пространстве ОДНИМ 3х мерным вектором, так как тело остается свободным в плоскости нормальной вектору. Кватеринионы позволяют полностью оперделить, но содержат 4 параметра.
- За всех не скажу, но у меня компас 5883 практически не шумит.
- ГПС - согласен, но в нашем случае постояное обновление склонения не особо нужно, не на тысячи км летаем.
- Не думаю, что рама и прочие элемены, правильно расположенные, смогут сильно ( до невозмжности практического применения) исказить показания мага.
в обратном порядке 😉
- аппараты из чугуния и прочих магнитных материалов действительно давно не в ходу, композиты на компасы не влияют. силовые провода равномерно скрученные и симметрично уложенные вобще могут самокомпенсировать наводимые ими помехи
- GPS нужен один раз при старте, да и то можно обойтись захардкоденой переменной (наклонение в текущей местности)
- и наконец, у нас есть ДВА вектора, по которым положение определяется однозначно:
- включение, поиск максимальной компоненты компаса, поворот её на наклонение — получаем “низ”
- выделяем горизонтальные компоненты — получаем “север” (магнитный, географический нам ни к чему)
- векторное произведение дает третью ось
- профит
и да, кватернион не вектор, а комбинация вращений, ну или более компактная форма матрицы вращения.
поворот её на наклонение — получаем “низ”
а в какую сторону поворот?
аппараты из чугуния и прочих магнитных материалов действительно давно не в ходу, композиты на компасы не влияют. силовые провода равномерно скрученные и симметрично уложенные вобще могут самокомпенсировать наводимые ими помехи
И иметь глюк вплоть до краша при пролете над любой железной трубой? А главное нафиг, ради 3$ экономии на гироскопе?
Думается, если б можно было создать сверхдешевый контроллер на одном только компасе, китайцы бы давно их клонировали и продавали по 10$/шт.
Впрочем, если большое желание почему бы не попробовать, в любом контроллере компас есть 😃 Теоретически, может оно даже кое как и полетит…
чем больше датчиков, тем больше настроечно-подстроечных коэффициентов, которые не подлежат математической реализации. только итерационный подбор, только хардкор.
Фильтр Калмана вроде может, в подробности правда не вдавался.
Фильтр Калмана вроде может, в подробности правда не вдавался.
Конечно может, но танцевать с бубном над ним😵 перефразирую Дмитрия : чем больше Калман, тем больше настроечно-подстроечных коэффициентов, которые не подлежат математической реализации. только итерационный подбор, только хардкор:)
а в какую сторону поворот?
в правую, конечно же ;)
а если серьезно, то у нас есть:
- вектор запомненный при старте, когда аппарат принудительно установлен более-менее горизонтально
- табличный вектор магнитного поля для текущих координат (в идеале он зависит только от широты)
аналогия — калибровка акселерометра, есть абы как установленная плата и мы знаем, что в покое ускорение свободного падения направлено к центру планеты. запомнив один раз смещения потом всегда знаем где у нас “низ”.
при пролете над любой железной трубой
ничего не случится, не делают у нас трубы из магнитотвердых материалов ;)
- За всех не скажу, но у меня компас 5883 практически не шумит.
я имел ввиду что достаточно шумный, что бы посчитать дифФ. угла, т.е. угловую скорость, что в чистом виде можно взять с гиры…
может оно даже кое как и полетит…
уверен что не полетит 😃, либо если и удастся подняться, то с оч. малыми пидами и будет болтать как гг в проруби при малейшем возмущении… В частности с малым П, т.к. Д будет никакой, по причине описанной выше, где при увеличении П будет расколбас…
Я не знаю как в теории, на практике компас в том же Multiwii например, болтает как г** в проруби от малейшего чиха, достаточно отвертку в руки взять чтобы стрелку повело.
Коптер летающий только на компасе я бы запускать побоялся 😃
ничего не случится, не делают у нас трубы из магнитотвердых материалов 😉
летаю иногда по вечерам на стоянке около супермаркета… пару раз грубо падал на асфальт (примерно в одной и той же зоне) из-за глюков по компасу… рядом обычная не высоковольтная линия передач и в метрах 10-20 вышка сотовой связи… за пару сек. до крашей резко проворачивало на 90-180 град по yaw… FS небыло… так и не понял в чем дело, одни подозрения…
достаточно шумный, что бы посчитать дифФ. угла, т.е. угловую скорость
а зачем вам будет нужна угловая скорость?
рядом обычная не высоковольтная линия передач и в метрах 10-20 вышка сотовой связи
казалось бы, при чем тут компас…
так и не понял в чем дело, одни подозрения…
А в Ардукоптере (оригинальном) кстати полетный лог во флеш пишется… 😃 Реально полезная штука при всяких разборах полетов.
Не помню точно, но компас там вроде тоже в списке данных лога есть.
Я не знаю как в теории, на практике компас в том же 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
а зачем вам будет нужна угловая скорость?
а без нее стабилизации в конечном ПИД контроллере не получите…
казалось бы, при чем тут компас…
я в физике полей не силен 😃, но что то мне подсказывает что там силовое поле нехилое…
там силовое поле нехилое…
магнитное поле прямо пропорционально силе тока. напомните, какой там ток в этих киловольтовых линиях?
а без нее стабилизации в конечном ПИД контроллере не получите…
так нет ни акселя ни гиры, на выходе уже готовый вектор ориентации. который, напомню, обычно получают напрямую от акселя корректируя его показания гироскопом, для которых и требуется вся эта возьня с ПИД-ами.
магнитное поле прямо пропорционально силе тока. напомните, какой там ток в этих киловольтовых линиях?
тут спор прекращаю, т.к. небыло “черного ящика” с логами… бессмысленно спорить…
нет акселя — уже не нужен гироскоп для его коррекции
так нет ни акселя ни гиры, на выходе уже готовый вектор ориентации. который, напомню, обычно получают напрямую от акселя корректируя его показания гироскопом, для которых и требуется вся эта возьня с ПИД-ами.
все не так 😉
- аксель как правило для корректировки дрейфа гиры, а не наоборот как вы пишете, т.к. аксель чтука шумная, тормозная и капризная, НО всегда знает где земля… потому аксель давится НЧ фильтром и меееееееедленно корректурует гиру, через компл. фильтр к примеру…
- ПИД регуляторы к ИМУ непосредственно никакого отношения не имеют… на выходе ИМУ должна быть величина (по которой осуществляется стабилизация системы), которая скармливается на вход ПИД регулю… в акро моде - это угловая скорость, в стаб/горизонт моде - это как правило комплекс ПИ-ПД регулятор, где для ПИ на вход угол, а для ПД - скорость…
НО ни в коем случае не отговариваю вас от реализации идеи, именно реализации, а не теоретизирования…
ну, кто кого корректирует зависит больше от реализации. для CC одно время предлагался вариант с “плавающим” коэфф-ом влияния гира/аксель, чем дольше не происходит значительных ускорений, тем меньше влияние данных полученных от гироскопа. и наоборот, чем активнее мы вертим стиками (или ветер поддувает), тем меньше учитывается аксель.
но моя фраза не совсем корректная, согласен.
аксель… всегда знает где земля
аксель выдает 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 (к которому стремится автопилот), пара коэфф-ов задают лишь максимальные углы.
я ж не говорю, что нельзя использовать что вам нравится в стабилизаторе, но к компасу это уже отношения не имеет.
именно реализации, а не теоретизирования…
реализация пока уперлась в hard-iron коррекцию, компас в телефоне дает даже не эллипсоид (после всякоразного вращения), а какую-то картофелину.