Создание собственной системы стабилизации
Фильтр Калмана вроде может, в подробности правда не вдавался.
Конечно может, но танцевать с бубном над ним😵 перефразирую Дмитрия : чем больше Калман, тем больше настроечно-подстроечных коэффициентов, которые не подлежат математической реализации. только итерационный подбор, только хардкор:)
а в какую сторону поворот?
в правую, конечно же ;)
а если серьезно, то у нас есть:
- вектор запомненный при старте, когда аппарат принудительно установлен более-менее горизонтально
- табличный вектор магнитного поля для текущих координат (в идеале он зависит только от широты)
аналогия — калибровка акселерометра, есть абы как установленная плата и мы знаем, что в покое ускорение свободного падения направлено к центру планеты. запомнив один раз смещения потом всегда знаем где у нас “низ”.
при пролете над любой железной трубой
ничего не случится, не делают у нас трубы из магнитотвердых материалов ;)
- За всех не скажу, но у меня компас 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 коррекцию, компас в телефоне дает даже не эллипсоид (после всякоразного вращения), а какую-то картофелину.
upd: в вашей же идее ИМУ будет оперировать лишь данными магнитометра и выход (углы по ролл/пич/яв) все равно идет на ПИД регилятор, где для устойчивой стабилизации, все равно, придется брать дифференциал ошибки (по сути входной величины - угла)… вот он и будет шуметь мама не горюй… 😉
Вот еще темы про полет компаса
rcopen.com/forum/f8/topic216494/201 - как лететь без акселерометров. Автор утверждал, что способен избавить компас от шумов.
Если собираетесь мерять компас раз в секунду, то зачем вам 160 Гц? Отфильтруйте до 1 Гц. Это уже шум в 40 раз меньше. Т.е. было 2 градуса, а стало 0,05.
😵
rcopen.com/forum/f90/topic264275 - тут про готовую систему, тема затихла.
Решил собрать собственную систему стабилизации для камеры. Данные по i2c шине получил от акселя, гиро и магнето. Вопрос встал в обработке данных для определения угла поворота по оси Х и У. Кто подскажет где искать?. Заранее благодарю за ответ. Сижу уж 5 день и негде не могу найти реально полезную информацию для написания кода под ARDUINO. Буду очень признателен за информацию.
Сижу уж 5 день и негде не могу найти реально полезную информацию для написания кода под ARDUINO. Буду очень признателен за информацию.
взяять кусок кода из мультивия (правда аккуратно вырезать его будет немного гемморойно)
Блин, проц большеватый и не хочу переходные отверстия под процем делать , что если сделать 2.5 этажа, нижний - проц, входы выходы: сразу над процем платку ИМУ (как отнесётся MPU6000 к компасу подцепленному к ней, баро SPI), со своим питателем - 1.5шный этаж на низких разъёмах, ну и верхний этаж GPS, батарейка, пищалка.
Плюсы - легче развести, MPU ближе к центру платы, меньше габариты (высота не поменяется)
Минусы - лишний вес платы ИМУ+разъёмы, ИМУ близко к GPS
не хочу переходные отверстия под процем делать
Если в домашних условиях делать, то потом процессор не садится - бугорки мешают.
как отнесётся MPU6000 к компасу подцепленному к ней
Байпасом данные идут. Когда включал 6DOF fusion, то данные с компаса не проходили транзитом, компас не мог считать.
6DOF fusion, пока не интересует, иначе нафига такой (F407) проц, I2C можно и на ИМУ завести…
у меня сейчас есть разведёная плата - можно делать и дома, но хочу барометр подцепить по SPI (на данный момент I2C) и вернуть все 8 входных каналов (пока 1) - с такими изменениями очень много отверстий (переходных) в одной плате получается что не есть хорошо…
6DOF fusion, пока не интересует, иначе нафига такой (F407) проц
Это точно! С таким процессором всякая шелупонь, требующая специфичного кода, не должна интересовать. Я вам даже немного завидую =) Можно писать понятный код без костылей и хитровыдуманных оптимизаций (быстрое извлечение корня, таблицы значений синуса и логарифмов). Не париться насчет int vs float. Можно организовать ИМУ алгоритм в лоб. За этим будущее - очевидный си-образнный код, мгновенное портирование и доработка\отладка\тестирование, когда видишь “x *= 10;” вместо “x = (4*x +x)*2;”
хочу барометр подцепить по SPI (на данный момент I2C)
А зачем вам SPI барометр? Я как-то думал, что лучше: использовать децимацию и включить сглаживание в барометре ИЛИ отключить сглаживание в барометре, с максимальной частотой скачивать сырье и в процессоре уже обрабатывать…
Насчёт дерготни компаса, см. видео, система кординат мировая, синий “самолётик” -текущее положение ИНС, красный “самолётик” - заданное положение(через р\у), синий вектор (в левом окне) - проекция магнита на плоскость нормальную G, белый вектор - аксель приведенный к мировой СК, в правом окне магнит в бортовой СК (крутиться вместе с ней). Смотрите сами…
Решился я на авантюру, IMU будет отдельно, пока только схема основной платы вырисовалась, следующая будет IMU: