Создание собственной системы стабилизации
Ну так как я не вижу что у него в нутрях, то могу только предположить, что гирами он таки меряет угловые скорости, а камерой как мышкой горизонтальные смещения и всё это микширует с каналами управления, примерно как тот же КУК, возможно я и заблуждаюсь, но не вижу смысла в интегрировании в данной системе - только вносить ошибку?
камера на девайсе только для зависания в точке (смотрит на землю и “удерживает” картинку, не обязательно в горизонтальном виде).
при отключении камеры девайс может только удерживать горизонт в прямом или инвертированном виде, причем при долгом наклонном полете горизонт уплывает (накопительная ошибка).
Если так, то согласен, ибо по другому горизонт не запомнишь, т.е. надо постоянно высчитывать углы (а это уже интегрирование) и запоминать, ну вот обратно к акселю - ошибку устранять то надо, и в конечном итоге опять обрастаем датчиками 😃
вот. коптеры летают в основном горизонтально, значит у нас есть вектор направленный к центру планеты (из GPS можно получить значение магнитного наклонения в текущих координатах, правда, не во всех приёмниках). а из этого получаем второй вектор на географический север (полученный из магнитного склонения, это дают уже многие приёмники).
Это всё хорошо, но ,Дмитрий, ответь на поставленный мной выше вопрос.
Воткни спицу (иглоку) под углом вниз в ластик, расположенный строго горизонтально. Затем воткни эту спицу в землю, чтобы ластик сохранял своё положение, определи кородинаты вектора-спицы относительно ластика, затем поверни ластик вокруг спицы на 180гр. А теперь проверь координаты этого вектора относительно ластика. Что ты видишь? Координаты вектора останутся прежними,т.е. “магитометр” ластика будет его видеть так же как в начале эксперимента, а положение ластика измениться так, что полетит он боком в землю!
Эт я к тому сказал, что ОДИН ВЕКТОР (3 координаты) НЕ МОЖЕТ однозначно определить положение тела в 3хмерном пространстве (если корординаты не углы)!!! Из этого факта совершенно понятно, почему плывёт курс систем БЕЗ компаса, но летают эти системы потому что летучесть не зависит от курса. А от тангажа и крена ой как зависит!
А насчёт систем на одних ДУСах, Сергей абсолютно прав, там ТОЛЬКО СТАБИЛИЗАЦИЯ, т.е. 3 ПИДа, которые пытаются удержать угловую заданную скорость. Роль абсолютного датчика положения выполняет пилот, отпусти он стики, и коптер через некоторое время завалится.
в наших широтах вертикальная составляющая магнитного поля в несколько раз больше горизонтальной. берем компас, добавляем GPS для корректировки широты, загружаем карту напряженности магнитного поля — готова IMU без акселей и гир (то есть без I). с полным отсутствием влияния вибраций, ускорений и прочих напастей.
Я пробовал библиотеку “FreeIMU library”, которая построена на code.google.com/p/imumargalgorithm30042010sohm/ без коптера, в руках. Во FreeIMU был косяк с присвоениями, который давал броски по курсу.
M - 3 оси магнетометра, А - 3 оси акселерометр. ДУС всегда включено.
- mx=0; my=0; mz=0; Коррекция ДУС только по акселерометру. Работает, но сильнее “ловит” линейные ускорения и дает несуществующие наклоны.
- ax=0; ay=0; az=0; Коррекция ДУС только по магнетометру. Работает, но заторможеннее, чем в комплексе с акселерометром.
- mx=0; my=0; mz=0; ax=0; ay=0;az=0; Коррекции ДУС не происходит. Работает, но по курсу плывет.
В домашних условиях БИНС на базе ДУС и 3х-осевого магнитометра вполне работала. Только у нас вектор магнитного поля входит в землю почти вертикально, поэтому его проекция на горизонт мала - может утонуть в шумах от питания моторов и rxtx.
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 вышка сотовой связи
казалось бы, при чем тут компас…