MultiWii
Здравствуйте,если кто-то захочет попробовать акселерометр LIS3LV02,есть такая возможность в 1.8 прошивке,то он не работает.
Вообщем,т.к я решил попробовать этот акселерометр,то пришлось подправить код.Теперь работает.
Признаться по полетным ощущениям не почувствовал ни какой разницы между АДХЛ345 и БМА180.
Вопрос к Гуру. В чем собственно превосходства того или иного датчика?
вот поэтому пирату и глубоко пофиг на вибрацию, а мультивий сходит с ума, если 100500 часов не провести за балансировкой
не совсем корректно сравнивать пират и вии лишь по параметрам гиры… в пирате цикл тайм если память не изменяет 50гц (т.е. 256 от гиры ему нафиг не нужны) а в вии более 300гц при “нормальных” (т.е. не вийных) датчиках + В ВИИ И ПИРАТЕ СОВЕРШЕННО РАЗНЫЕ ПИД РЕГУЛЯТОРЫ. Соот-но сравнивать их и говорить что пират стабильнее только из фильтров не верно в принципе…
В вии меньше фишек, но больше быстродейтвие и предполагаю что как раз для акро мода и для крутых акро-пилотов этот проект горраздо круче!
это же фильтр на помехи, а не на загрубление гиры
фильтр это как раз и есть загрубленние чувствительности гиры, но не линейное соот-но, а рубятся только “быстрые” показания ИЗМЕНЕНИЙ угловых скоростей, т.е. “скоростные” маневры. Таким образом при низких значениях фильтра 10-20-40гц на гире быстродейтвие вии обработчика теряет смысл, о чем уже писал пару страниц назад…
код мультивия изначально писался без учета фильтров, этот фильтр на гире может в одном проекте помогать, а в другом наоборот только мешать
тут согласен…
Итог:
- для ВИИ: фильтр губит быстродествие, но при разумных значениях может помочь в борьбе с вибрациями.
- в пирате: низкие значения фильтра “совместимы” с временем цикла обработчика без ущерба для быстродействия системы. Т.е. тут от фильтра больше пользы в плане борьбы с вибрациями.
Ну и если совсем кратко то вии более шустрый, но чувствмтельный к вибрациям, а пират не такой шустрый, но более терпимый к шумам-вибрациям за счет филтров низких частот.
Не знаю, меня мультивий в плане стабильности очень радует. Я поковырял его в части IMU (было интересно попробовать добавить реакции на линейные ускорения и перемещения), и непохо разобрался в его алгоритмах стабилизации. Так вот, они довольно точны и мат. модель IMU хорошо описывет все перемещения, особенно в связке с акселерометром и компасом. Единственное, нужно четко представлять что как подстраивать и триммировать, т.к. сам он это не умеет.
Насчет вибраций - по моему их влияние сильно преувеличено. Гироскоп их практически не видит, т.к. они не угловые, акселерометр видит, но он хорошо сглажен в коде и его вклад только в низкочастотных областях (видеть землю для корректировки дрифта гироскопа).
Замечания по своим ошибкам “обращения” с мультивием:
- при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
- Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
- Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.
- при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
- Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
- Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.
Здравствуйте,не могли бы Вы подробней описать, что и куда дописали в коде?
- при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
- Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
- Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.
не могли бы вы выложить код с пометками где вы и что правили?
упс… одинаково мыслим =)
Задержка калибровки:
MultiWii.pde, setup():
...
initSensors();
//wait 3 seconds before start calibrating
delay(3000);
previousTime = micros();
..
Не очень важная доработка но я думаю что полезно: более точная калибровка нуля гироскопа. Сейчас в коде ноль округляется до целых. Так как данные гироскопа интегррируются, даже небольшая ошибка накапливается. Лучше окрулять до десятых, тем самым слегка повышается точность и уменьшается дрифт.
Sensors.pde, GYRO_Common():
...
if (calibratingG == 1) {
gyroZero[axis]=g[axis]/40;
...
for (axis = 0; axis < 3; axis++) {
gyroADC[axis] = (int32_t)(gyroADC[axis] * 10 - gyroZero[axis])/10;
...
Throttle-expo описан тут: www.multiwii.com/forum/viewtopic.php?f=7&t=623
Задержка калибровки
я обычно калибровку делаю с пульта когда коптер включен и стоит стабильно…
Не очень важная доработка но я думаю что полезно: более точная калибровка нуля гироскопа. Сейчас в коде ноль округляется до целых. Так как данные гироскопа интегррируются, даже небольшая ошибка накапливается. Лучше окрулять до десятых, тем самым слегка повышается точность и уменьшается дрифт.
в мультивии почти нет вычислений с плающей запятой, т.к. это увеличивает время цикла… можете конечно предложить на вийском форуме, но думаю алексВпариже & зисс_дм вам примерно тоже скажут 😃
Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.
на ролл и питч экспонента уже есть давным давно… думаю был бы и на тротл еслиб он был универсален на все конфигируции. Что хочу сказать: к примеру ваш коптер отрывается от земли на трети газа и соот-но вы попадаете в “плавную” часть экспоненты (тут все гуТ), а теперь сами подумайте что будет если коптер отрывается на две третих газа (в “резкой” части экспоненты)? т.е. получится что тротл будет более резким в сравнении с обычным “линейным” вариантом (т.е. без экспоненты)…
P.S. всего лишь рассуждения, на истину не претендую, потому давайте спорить 😃
акселерометр видит, но он хорошо сглажен в коде и его вклад только в низкочастотных областях (видеть землю для корректировки дрифта гироскопа)
в теории и на стенде так и есть (т.е. в ГУИ все красиво, до включения моторов хотяб на пол газа), НО на практике дешевые аксели видимо сходят с ума от вибраций и сами показания уже не правильные, какие фильтры не прикручивай… тут уже специфика МЕМС чипов наверное, т.е. есть предел вибраций по идее…
я обычно калибровку делаю с пульта когда коптер включен и стоит стабильно
Ну я тоже так делал если не забывал. А можно сделать и задерджку, по моему так удобнее. Кстати про калибровку гиры вообще мало инфы на официальной страничке и я случайно наткнулся на эту важную штуку.
в мультивии почти нет вычислений с плающей запятой, т.к. это увеличивает время цикла
Совершенно верно, респект разработчикам мультивий. Но если вы внимательно посмотрите код, вы увидите что я также не ввожу плавающую запятую, лишь уменьшаю делитель на 10 в одном месте и увеличиваю на 10 в другом. Тем самым сохраняю десятые доли и это работает (проверял на графиках).
думаю был бы и на тротл еслиб он был универсален на все конфигируции
Согласен, мой вариант надо немного сконфигурировать. Опять же посмотрите на добавку кода в config.h, там я предлагаю померять показания отрыва от земли и выставить центр экспоненты в эту точку (параметр THROTTLE_HOVER). Но результат стоит того. И кстати, если у вас есть подстройка кривой в самом пульте, вам также придется сначалаа померять точку отрыва, чтобы правильно нарисовать кривую.
в теории и на стенде так и есть (т.е. в ГУИ все красиво, до включения моторов хотяб на пол газа), НО на практике дешевые аксели видимо сходят с ума от вибраций и сами показания уже не правильные
Если хороший гиро, то можно посоветовать уменьшить вклад акселерометра в нахождение вектора ориентации. Попробуйте увеличить параметр в IMU.pde
#define GYR_CMPF_FACTOR 310.0f
Но надо смотреть по гафикам, насколько сильно уплывают показания гироскопа без акселерометра (для проверки поставьте GYR_CMPF_FACTOR 10000.0f).
Вот и мне пришли 2 платки ALLINONE, в конверте была вложена распиновка только для одной платы, а вот для этой 5V c GPS небыло… может кто подскажет распиновку или как её подключить?..
Для мультивия сделали поддержку сателлитов от спектрума (и клонов от ХК)
обсуждают тут www.rcgroups.com/forums/showthread.php?t=1504116
Задержка калибровки
Спасибо,ИМХО очень полезная функция.Лично меня напрягала калибровка с пульта,включить не не “встряхнуть”,особенно при микро размере коптера,очень сложно.
Не очень важная доработка но я думаю что полезно: более точная калибровка нуля гироскопа. Сейчас в коде ноль округляется до целых. Так как данные гироскопа интегррируются, даже небольшая ошибка накапливается. Лучше окрулять до десятых, тем самым слегка повышается точность и уменьшается дрифт.
Попробовал.Признаться не заметил ни какой разницы в поведении,видимо размерность тоже имеет свое значение.
А можно сделать и задерджку, по моему так удобнее.
согласен… предложите чтобы включили в прошивку и по желанию можно было отключить/включить
Но если вы внимательно посмотрите код, вы увидите что я также не ввожу плавающую запятую, лишь уменьшаю делитель на 10 в одном месте и увеличиваю на 10 в другом. Тем самым сохраняю десятые доли и это работает (проверял на графиках).
виноват… все верно, только вот судя по коментам в коде у гиры диаппазон +/- 8192, т.е. дадут ли тут десятые что либо? если практическая польза есть то можно и до сотых тогда посчитать, т.е.
Sensors.pde, GYRO_Common():
...
if (calibratingG == 1) {
gyroZero[axis]=g[axis]/4;
...
for (axis = 0; axis < 3; axis++) {
gyroADC[axis] = (int32_t)(gyroADC[axis] * 100 - gyroZero[axis])/100; ...
только gyroZero сделать 32 бита
Согласен, мой вариант надо немного сконфигурировать. Опять же посмотрите на добавку кода в config.h, там я предлагаю померять показания отрыва от земли и выставить центр экспоненты в эту точку (параметр THROTTLE_HOVER). Но результат стоит того. И кстати, если у вас есть подстройка кривой в самом пульте, вам также придется сначалаа померять точку отрыва, чтобы правильно нарисовать кривую.
изучу и отпишусь обязаточно! кстать если выставить точку отрыва в центр экспоненты, этож получится что “плавная” часть газа будет только на снижение, а увеличение газа как раз “резкое” по экспоненте (т.е. на подъем)… Я же себе представлял, что точка отрыва должна быть примерно в первой трети экспоненты для того чтобы его проще было держать в соостоянии висения (равновесия т.е.). Поясните тут пожалуйста. Хотя тут же начал думать что так и надо 😃 т.е. уменьшение газа плавное для снижения, увеличение газа как раз резкое чтобы “подхватывать” при снижении проще было… или все не так? 😃
Если хороший гиро, то можно посоветовать уменьшить вклад акселерометра в нахождение вектора ориентации. Попробуйте увеличить параметр в IMU.pde
Но надо смотреть по гафикам, насколько сильно уплывают показания гироскопа без акселерометра (для проверки поставьте GYR_CMPF_FACTOR 10000.0f).
буду пробовать, но не раньше чем через неделю-две…
только вот судя по коментам в коде у гиры диаппазон +/- 8192
Это максимальные значения при довольно сильных угловых скоростях (кстати занженные в MultiWii, изначально гира выдает почти что полные int16). В нормальной работе гира выдает данные недалеко от нуля. И мы прбавляем каждый раз измеренный средний ноль. И если там сидит ошибка к примеру 0.5, она быстро накапливается при интегрировании. Но это опять же силно зависит от гиры, на моей одна ось попадает в ноль точно, а вот вторая убегает быстро с округленным нулем. После ввода десятых становится стабильной как и первая. Вводить сотые смысла нет, ноль не на столько стабилен и там уже шум больше чем сотые.
Была мысль убрать деление на 4, чтобы ещё повысить точность, но тогда надо пересматривать всю арифметику на предмет переполнений, и мержиться с SVN будет сложно.
этож получится что “плавная” часть газа будет только на снижение, а увеличение газа как раз “резкое” по экспоненте (т.е. на подъем)
Нет, и на подъем и на снижение будут плавные части. Хотя и говорится про одну экспоненту, на самом деле их две (как и на ручки наклонов), соединенных в своей нулевой точке. С такой кривой мы быстро выбираем нерабочие участок до отрыва, затем плавно идет в районе отрыва и далше, и потом быстро растет до максимального газа.
И кстати посморите на второй параметр SHIFT_HOVER. Если у вас отрыв идет на 2/3 газа, то есть возможность сместить его в 1/3 и больший диапазон использовать для полета.
Вот и мне пришли 2 платки ALLINONE, в конверте была вложена распиновка только для одной платы, а вот для этой 5V c GPS небыло… может кто подскажет распиновку или как её подключить?..
Cкан от 3.3V. на 5 вольтовой поменяны местами RX и TX.
Небольшая инфа, списался с производителем этих плат… Он сказал что 3,3V платы можно питать от 5V на плате есть стабилизатор.
Олег, большое спасибо!
Киньте пожалуйста в меня скриптами, чтоб каждый датчик отдельно проверить на плате ALLINONE…
Друзья, а что это за платка и какие датчики на ней стоят, кто знает?
Она же крупно
чтоб каждый датчик отдельно проверить на плате ALLINONE
можно просто для arduino под каждый датчик скачать библиотеку отдельную. там и тестовые скетчи есть. я так проверял когда плата пришла, но библиотеки на домашнем компе только есть. но гуглом ищется быстро
Дмитрий! Большое спасибо за помощь! Списывались по скайпу…
какие датчики на ней стоят
слевой стороны стоит микруха гироскопа ITG3200 (или аналогичных), полностью совпадает с даташитом
справа стоит датчик очень похожий на BMA180
ЗЫ кстати, очень интересный вариант платки мультивия квадро с пятью каналами, ничего лишнего, процессор, датчики, питание датчиков на 3.3 вольта, наверное не дорого стоит? где такое можно приобрести?