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

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 коррекцию, компас в телефоне дает даже не эллипсоид (после всякоразного вращения), а какую-то картофелину.

mahowik

upd: в вашей же идее ИМУ будет оперировать лишь данными магнитометра и выход (углы по ролл/пич/яв) все равно идет на ПИД регилятор, где для устойчивой стабилизации, все равно, придется брать дифференциал ошибки (по сути входной величины - угла)… вот он и будет шуметь мама не горюй… 😉

Musgravehill

Вот еще темы про полет компаса
rcopen.com/forum/f8/topic216494/201 - как лететь без акселерометров. Автор утверждал, что способен избавить компас от шумов.

Diman_Y:

Если собираетесь мерять компас раз в секунду, то зачем вам 160 Гц? Отфильтруйте до 1 Гц. Это уже шум в 40 раз меньше. Т.е. было 2 градуса, а стало 0,05.

😵

rcopen.com/forum/f90/topic264275 - тут про готовую систему, тема затихла.

Летать по компасу на поле можно, кривизна ничтожно мала.

allcaponne

Решил собрать собственную систему стабилизации для камеры. Данные по i2c шине получил от акселя, гиро и магнето. Вопрос встал в обработке данных для определения угла поворота по оси Х и У. Кто подскажет где искать?. Заранее благодарю за ответ. Сижу уж 5 день и негде не могу найти реально полезную информацию для написания кода под ARDUINO. Буду очень признателен за информацию.

mataor
allcaponne:

Сижу уж 5 день и негде не могу найти реально полезную информацию для написания кода под ARDUINO. Буду очень признателен за информацию.

взяять кусок кода из мультивия (правда аккуратно вырезать его будет немного гемморойно)

SergDoc

Блин, проц большеватый и не хочу переходные отверстия под процем делать , что если сделать 2.5 этажа, нижний - проц, входы выходы: сразу над процем платку ИМУ (как отнесётся MPU6000 к компасу подцепленному к ней, баро SPI), со своим питателем - 1.5шный этаж на низких разъёмах, ну и верхний этаж GPS, батарейка, пищалка.
Плюсы - легче развести, MPU ближе к центру платы, меньше габариты (высота не поменяется)
Минусы - лишний вес платы ИМУ+разъёмы, ИМУ близко к GPS

Musgravehill
SergDoc:

не хочу переходные отверстия под процем делать

Если в домашних условиях делать, то потом процессор не садится - бугорки мешают.

SergDoc:

как отнесётся MPU6000 к компасу подцепленному к ней

Байпасом данные идут. Когда включал 6DOF fusion, то данные с компаса не проходили транзитом, компас не мог считать.

SergDoc

6DOF fusion, пока не интересует, иначе нафига такой (F407) проц, I2C можно и на ИМУ завести…
у меня сейчас есть разведёная плата - можно делать и дома, но хочу барометр подцепить по SPI (на данный момент I2C) и вернуть все 8 входных каналов (пока 1) - с такими изменениями очень много отверстий (переходных) в одной плате получается что не есть хорошо…

Musgravehill
SergDoc:

6DOF fusion, пока не интересует, иначе нафига такой (F407) проц

Это точно! С таким процессором всякая шелупонь, требующая специфичного кода, не должна интересовать. Я вам даже немного завидую =) Можно писать понятный код без костылей и хитровыдуманных оптимизаций (быстрое извлечение корня, таблицы значений синуса и логарифмов). Не париться насчет int vs float. Можно организовать ИМУ алгоритм в лоб. За этим будущее - очевидный си-образнный код, мгновенное портирование и доработка\отладка\тестирование, когда видишь “x *= 10;” вместо “x = (4*x +x)*2;”

SergDoc:

хочу барометр подцепить по SPI (на данный момент I2C)

А зачем вам SPI барометр? Я как-то думал, что лучше: использовать децимацию и включить сглаживание в барометре ИЛИ отключить сглаживание в барометре, с максимальной частотой скачивать сырье и в процессоре уже обрабатывать…

rual

Насчёт дерготни компаса, см. видео, система кординат мировая, синий “самолётик” -текущее положение ИНС, красный “самолётик” - заданное положение(через р\у), синий вектор (в левом окне) - проекция магнита на плоскость нормальную G, белый вектор - аксель приведенный к мировой СК, в правом окне магнит в бортовой СК (крутиться вместе с ней). Смотрите сами…

SergDoc

Решился я на авантюру, IMU будет отдельно, пока только схема основной платы вырисовалась, следующая будет IMU:

rual

Сергей, зачем трех этажную плату городить? Насколько я понял это нужно под утюг? Может лучше сделать разводку под промышленные нормы?
Несколько вопросов/предложений по твоей плате:

  1. Если хочешь использовать АЦП VDDA подключай через LC-фильтр, землю и VDDA (если нужно) выводи на разъем под аналоговые входы для каждого входа и рядом с полем аналоговой земли а плате. Выводы VREF вести отдельными проводниками до полей VDDA и AGND рядом с разъёмом. Как пример, у меня оптодатчики на одной плате работают замечательно, а на другой (полётной) такая дерготня, что даже тяжелыми фильтрами не успокоишь… В последней все вышеперечисленные правила нарушены. Можно сделать больше аналоговых входов?
  2. Стандартный УСБ загрузчик будет работать? Ему вроде как один из выводов PD нужен вроде USB+5V, ну и выводы или кнопки BOOT.
  3. Ус-во экспериментальное - нужен JTAG.
  4. Резисторы на линиях ШИМ тоже не помешают.
    Вроде всё. В остальном всё очень красиво: много входов/выходов, юсартов , СД.
Razek
rual:

Сергей, зачем трех этажную плату городить?

А чем плоха модульность? потом если что доделать переделать надо меньше времени, вот хороший пример PX4 контроллера тоже модульный принцип. Тут главное сразу заложить при разводке плат некое подобие интерфейсных разъемов.

SergDoc
rual:

Может лучше сделать разводку под промышленные нормы?

Я бы с удовольствием, но пока нет золотого запаса тратится ещё и на платы…

rual:

сли хочешь использовать АЦП VDDA подключай через LC-фильтр, землю и VDDA (если нужно) выводи на разъем под аналоговые входы для каждого входа и рядом с полем аналоговой земли а плате. Выводы VREF вести отдельными проводниками до полей VDDA и AGND рядом с разъёмом.

планирую вообще отдельный питатель( при данной разводке позволяет), так же и на ИМУ будет два

rual:

Стандартный УСБ загрузчик будет работать? Ему вроде как один из выводов PD нужен вроде USB+5V, ну и выводы или кнопки BOOT.

PD4, на BOOT0 перемычка есть

rual:

Резисторы на линиях ШИМ тоже не помешают.

на входе есть, выходы только на моторы поместятся, а вот на “серво” могут и не влезть, постараюсь повесить…

а да, трёхэтажная - ИМУ и GPS можно менять без замены всего, думаю проц на долго останется и ИМУ ближе к ЦТ аппарата…

с АЦП ещё покумекаю, но лапы остальные далеко, пока 3-х думаю хватит, если нет, то подпаяюсь куда-нибудь …

rual
SergDoc:

а да, трёхэтажная - ИМУ и GPS можно менять без замены всего, думаю проц на долго останется и ИМУ ближе к ЦТ аппарата…

причина понятна.

Ещё один момент, почему на SPI выделил только один CS? Если стремишся к универсальности, то возможно будешь ставить датчики с несколькими ус-вами SPI.