Создание собственной системы стабилизации
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:
Сергей, зачем трех этажную плату городить? Насколько я понял это нужно под утюг? Может лучше сделать разводку под промышленные нормы?
Несколько вопросов/предложений по твоей плате:
- Если хочешь использовать АЦП VDDA подключай через LC-фильтр, землю и VDDA (если нужно) выводи на разъем под аналоговые входы для каждого входа и рядом с полем аналоговой земли а плате. Выводы VREF вести отдельными проводниками до полей VDDA и AGND рядом с разъёмом. Как пример, у меня оптодатчики на одной плате работают замечательно, а на другой (полётной) такая дерготня, что даже тяжелыми фильтрами не успокоишь… В последней все вышеперечисленные правила нарушены. Можно сделать больше аналоговых входов?
- Стандартный УСБ загрузчик будет работать? Ему вроде как один из выводов PD нужен вроде USB+5V, ну и выводы или кнопки BOOT.
- Ус-во экспериментальное - нужен JTAG.
- Резисторы на линиях ШИМ тоже не помешают.
Вроде всё. В остальном всё очень красиво: много входов/выходов, юсартов , СД.
Сергей, зачем трех этажную плату городить?
А чем плоха модульность? потом если что доделать переделать надо меньше времени, вот хороший пример PX4 контроллера тоже модульный принцип. Тут главное сразу заложить при разводке плат некое подобие интерфейсных разъемов.
Может лучше сделать разводку под промышленные нормы?
Я бы с удовольствием, но пока нет золотого запаса тратится ещё и на платы…
сли хочешь использовать АЦП VDDA подключай через LC-фильтр, землю и VDDA (если нужно) выводи на разъем под аналоговые входы для каждого входа и рядом с полем аналоговой земли а плате. Выводы VREF вести отдельными проводниками до полей VDDA и AGND рядом с разъёмом.
планирую вообще отдельный питатель( при данной разводке позволяет), так же и на ИМУ будет два
Стандартный УСБ загрузчик будет работать? Ему вроде как один из выводов PD нужен вроде USB+5V, ну и выводы или кнопки BOOT.
PD4, на BOOT0 перемычка есть
Резисторы на линиях ШИМ тоже не помешают.
на входе есть, выходы только на моторы поместятся, а вот на “серво” могут и не влезть, постараюсь повесить…
а да, трёхэтажная - ИМУ и GPS можно менять без замены всего, думаю проц на долго останется и ИМУ ближе к ЦТ аппарата…
с АЦП ещё покумекаю, но лапы остальные далеко, пока 3-х думаю хватит, если нет, то подпаяюсь куда-нибудь …
а да, трёхэтажная - ИМУ и GPS можно менять без замены всего, думаю проц на долго останется и ИМУ ближе к ЦТ аппарата…
причина понятна.
Ещё один момент, почему на SPI выделил только один CS? Если стремишся к универсальности, то возможно будешь ставить датчики с несколькими ус-вами SPI.
В принципе да, можно ещё по две лапы задействовать на одном и на втором:)
Вобщем, дабы не плодить ненужных файлов, отпишусь на словах:
Сонар переехал на PE7 - эхо, PE8 - триггер, тем самым отжал ИМУ 4 резервных вывода(PE0,PE1,PC4, PC5), 2 из которых могут также быть и входами АЦП и входами прерываний PC4, PC5…
также добавил к выносному SPI два резервных вывода PB10, PB11, которые также могут быть второй шиной I2C…
Ну и добавил питатель на аналоговую часть, а также отделил дросселями аналоговую землю и аналоговые 5В от остального…
Вроде всё, а ещё, у F4 нет VREF- вмесо неё просто аналоговая земля, а то что у F1XX было VSSA у 4-го VDD ! чуть не напоролся 😃
Буду разводить, проц и большинство деталей будут со стороны пайки (внизу), чтобы с разъёмами проблем не было и ИМУ ниже ляжет…
Приветствую Вас, единомышленники.
прочитал вашу ветку на форуме и сделал вывод что можете мне помочь советом (или подсказкой).
Также как и вы хочу написать собственный софт для квадрокоптера.
Изучил в инете темы по алгоритмам и принципам стабилизации, решил для начала просто повторить рабочий мультивийный алгоритм, но тут столкнулся с проблемой.
Проблема в том что программирую в CVavr на Си, попытки разобраться с листингом проекта мультивии не увенчались успехом (уж очень он универсальный и “оброс” доп. функциями).
Понял только, что в нем допускаются некоторые упрощения в отличии от базовой теории.
Хочу всего лишь понять основной математический прием для гироскопа и акселерометра.
Постановка вопроса:
имеем последовательно считанные в основном цикле программы данные с гиры и акса (магнетометр о др. не интересует)
типа INT, назовем их условно Gx,Gy,Gz,Ax,Ay,Az.
Можете просто подставить их в формулу чтобы получить текущую переменную воздействия для скармливания ПИДу?
Или хотя бы объяснить мне бестолковому последовательность работы с этими величинами для получения результата стабилизации. Понятно что еще есть данные со стиков пульта, но допустим, чтоб не усложнять ответ примем их за ноль.
Надеюсь не утомил Вас длинным изложением, подскажите хоть что то, кто может…
ну если смотреть комплиментарный фильтр то
уголX = (0.8*(уголX+(угловая_скорость_с_гиры*dt)))+(0.2*(угол_X_с_акселя));
где уголX+угловая_скорость_с_гиры*dt интегрирование угловой скорости по времени - угол из показаний гироскопа, угол_X_с_акселя - угол, высчитанный из показаний акселя, ну это если по простому…
А вот тоже пытаюсь прикрутить AHRS 9DOF но что то туговато все идет. Датчики HMC5883L и MPU6050. Может кто то поделится исходниками или поможет консультацией?
на прошлой странице rcopen.com/forum/f134/topic224458/845, а также MultiWii, и ещё куча примеров…
Надеюсь не утомил Вас длинным изложением, подскажите хоть что то, кто может…
готовых рецептов никто не даст, точнее эти “рецепты” Вас не устроили (я про исходники МВ). А SergDoc чётко обрисовал основную формулу
, правда я её немного дополню:
уголX += 0.8*угловая_скорость_с_гиры*dt;
уголX -= 0.2*(уголX -угол_X_с_акселя);
Так как последний член есть поправка интеграла по абсолютному датчику (в том смысле что гиро датчик относительной величины).
И ещё момент, если Вам это нужно чтобы получить приемлемый результат и забросить, то пойдёт и АВР; если же есть желание двигаться дальше в части развития функционала и качества системы, то советую смотреть в сторону 32х разрядных процов.