MultiWii
Воот если бы LIS35DE то я бы попробовал
Кто летает на Вие с последними прошивками (1.8patch).
В них вшит фильтр для гиры ITG3200, где то тут Глеб писал что сразу расскомментировал 20Hz. Не знаю как унего полетел Вий, но он не прав. Смотрим внимательно что написано в проше:
//#define ITG3200_LPF_256HZ // This is the default setting, no need to uncomment. По дефолту, даже расскомментировать не надо
//#define ITG3200_LPF_188HZ
//#define ITG3200_LPF_98HZ
//#define ITG3200_LPF_42HZ
//#define ITG3200_LPF_20HZ
//#define ITG3200_LPF_10HZ // Use this only in extreme cases, rather change motors and/or props Это в экстримальных случаях, пора менять моторы или пропы.
Чем ниже значение герцев тем снижается чуйка гиры и коптер хуже летает, если у вас все отлично с моторами и пропами. Я час игрался со всеми значениями и со всей отвагой заявляю это. В итоге отсавил верхнее значени 256Hz
Это в экстримальных случаях, пора менять моторы или пропы.
вот поэтому пирату и глубоко пофиг на вибрацию, а мультивий сходит с ума, если 100500 часов не провести за балансировкой
10hz имеется ввиду в самом экстремальном случае.
Никаких часов, я моторы вообще не балансирую, только пропы, это одна минута на один мотор. Кстати, будет время глянь че там за фильтры в вие и пирате, помоему он вааще разные.
глянь че там за фильтры в вие и пирате, помоему он вааще разные.
Вий
i2c_writeReg(ITG3200_ADDRESS, 0x16, 0x18 + ITG3200_DLPF_CFG)
#if defined(ITG3200_LPF_20HZ)
#define ITG3200_SMPLRT_DIV 0
#define ITG3200_DLPF_CFG 4
#endif
Пират
i2c_rep_start(0xd0+0); // I2C write direction
i2c_write(0x16); // register DLPF_CFG - low pass filter configuration & sample rate
i2c_write(0x18+4); // Internal Sample Rate 1kHz, 1..6: 1=200hz, 2-100,3-50,4-20,5-10,6-5
одно и тоже, при этом проблем отработки данных нет - это же фильтр на помехи, а не на загрубление гиры (тогда бы тупо деление или убирание знаков можно было применить, а не заморачиваться с регистрами)
Ну вот с нижними значениями ниже 40Hz коптер, по крайней мере у меня, начинает вести себя не очень, стабильность пропадает, начинаются качки и маленькие провалы.
стабильность пропадает, начинаются качки и маленькие провалы.
код мультивия изначально писался без учета фильтров, этот фильтр на гире может в одном проекте помогать, а в другом наоборот только мешать, тем более при смене значений надо заново ПИДы крутить, так как параметры датчиков то меняются
Здравствуйте,если кто-то захочет попробовать акселерометр 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 и больший диапазон использовать для полета.