MultiWii

SovGVD
Covax:

глянь че там за фильтры в вие и пирате, помоему он вааще разные.

Вий

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

одно и тоже, при этом проблем отработки данных нет - это же фильтр на помехи, а не на загрубление гиры (тогда бы тупо деление или убирание знаков можно было применить, а не заморачиваться с регистрами)

Covax

Ну вот с нижними значениями ниже 40Hz коптер, по крайней мере у меня, начинает вести себя не очень, стабильность пропадает, начинаются качки и маленькие провалы.

SovGVD
Covax:

стабильность пропадает, начинаются качки и маленькие провалы.

код мультивия изначально писался без учета фильтров, этот фильтр на гире может в одном проекте помогать, а в другом наоборот только мешать, тем более при смене значений надо заново ПИДы крутить, так как параметры датчиков то меняются

soliada
soliada:

Здравствуйте,если кто-то захочет попробовать акселерометр LIS3LV02,есть такая возможность в 1.8 прошивке,то он не работает.

Вообщем,т.к я решил попробовать этот акселерометр,то пришлось подправить код.Теперь работает.
Признаться по полетным ощущениям не почувствовал ни какой разницы между АДХЛ345 и БМА180.
Вопрос к Гуру. В чем собственно превосходства того или иного датчика?

mahowik
SovGVD:

вот поэтому пирату и глубоко пофиг на вибрацию, а мультивий сходит с ума, если 100500 часов не провести за балансировкой

не совсем корректно сравнивать пират и вии лишь по параметрам гиры… в пирате цикл тайм если память не изменяет 50гц (т.е. 256 от гиры ему нафиг не нужны) а в вии более 300гц при “нормальных” (т.е. не вийных) датчиках + В ВИИ И ПИРАТЕ СОВЕРШЕННО РАЗНЫЕ ПИД РЕГУЛЯТОРЫ. Соот-но сравнивать их и говорить что пират стабильнее только из фильтров не верно в принципе…
В вии меньше фишек, но больше быстродейтвие и предполагаю что как раз для акро мода и для крутых акро-пилотов этот проект горраздо круче!

SovGVD:

это же фильтр на помехи, а не на загрубление гиры

фильтр это как раз и есть загрубленние чувствительности гиры, но не линейное соот-но, а рубятся только “быстрые” показания ИЗМЕНЕНИЙ угловых скоростей, т.е. “скоростные” маневры. Таким образом при низких значениях фильтра 10-20-40гц на гире быстродейтвие вии обработчика теряет смысл, о чем уже писал пару страниц назад…

mahowik
SovGVD:

код мультивия изначально писался без учета фильтров, этот фильтр на гире может в одном проекте помогать, а в другом наоборот только мешать

тут согласен…

Итог:

  1. для ВИИ: фильтр губит быстродествие, но при разумных значениях может помочь в борьбе с вибрациями.
  2. в пирате: низкие значения фильтра “совместимы” с временем цикла обработчика без ущерба для быстродействия системы. Т.е. тут от фильтра больше пользы в плане борьбы с вибрациями.

Ну и если совсем кратко то вии более шустрый, но чувствмтельный к вибрациям, а пират не такой шустрый, но более терпимый к шумам-вибрациям за счет филтров низких частот.

alexmos

Не знаю, меня мультивий в плане стабильности очень радует. Я поковырял его в части IMU (было интересно попробовать добавить реакции на линейные ускорения и перемещения), и непохо разобрался в его алгоритмах стабилизации. Так вот, они довольно точны и мат. модель IMU хорошо описывет все перемещения, особенно в связке с акселерометром и компасом. Единственное, нужно четко представлять что как подстраивать и триммировать, т.к. сам он это не умеет.
Насчет вибраций - по моему их влияние сильно преувеличено. Гироскоп их практически не видит, т.к. они не угловые, акселерометр видит, но он хорошо сглажен в коде и его вклад только в низкочастотных областях (видеть землю для корректировки дрифта гироскопа).

Замечания по своим ошибкам “обращения” с мультивием:

  1. при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
  2. Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
  3. Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.
soliada
alexmos:
  1. при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
  2. Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
  3. Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.

Здравствуйте,не могли бы Вы подробней описать, что и куда дописали в коде?

how-eee
alexmos:
  1. при включении он калибрует ноль гироскопа. Т.к. я включаю втыканием питания в батарею, в этот момент возможны толчки. И потом его очень неслабо тянет в крен. Сделал задержку в 3 сек. чтобы успеть убрать руки.
  2. Акселерометр в левел- моде надо ТРИММИРОВАТЬ ОБЯЗАТЕЛЬНО. иначе никакими ручками на пульте не выставишь стабильность. Это можно сделать один раз, он сохраняет настройку.
  3. Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.

не могли бы вы выложить код с пометками где вы и что правили?

упс… одинаково мыслим =)

alexmos

Задержка калибровки:

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

mahowik
alexmos:

Задержка калибровки

я обычно калибровку делаю с пульта когда коптер включен и стоит стабильно…

alexmos:

Не очень важная доработка но я думаю что полезно: более точная калибровка нуля гироскопа. Сейчас в коде ноль округляется до целых. Так как данные гироскопа интегррируются, даже небольшая ошибка накапливается. Лучше окрулять до десятых, тем самым слегка повышается точность и уменьшается дрифт.

в мультивии почти нет вычислений с плающей запятой, т.к. это увеличивает время цикла… можете конечно предложить на вийском форуме, но думаю алексВпариже & зисс_дм вам примерно тоже скажут 😃

alexmos:

Добавил Expo для Throttle в коде, т.к. мой дешевый пульт не позволял точно удержать высоту, постоянно вверх-вниз колбасило. Теперь высота держится элементарно.

на ролл и питч экспонента уже есть давным давно… думаю был бы и на тротл еслиб он был универсален на все конфигируции. Что хочу сказать: к примеру ваш коптер отрывается от земли на трети газа и соот-но вы попадаете в “плавную” часть экспоненты (тут все гуТ), а теперь сами подумайте что будет если коптер отрывается на две третих газа (в “резкой” части экспоненты)? т.е. получится что тротл будет более резким в сравнении с обычным “линейным” вариантом (т.е. без экспоненты)…

P.S. всего лишь рассуждения, на истину не претендую, потому давайте спорить 😃

alexmos:

акселерометр видит, но он хорошо сглажен в коде и его вклад только в низкочастотных областях (видеть землю для корректировки дрифта гироскопа)

в теории и на стенде так и есть (т.е. в ГУИ все красиво, до включения моторов хотяб на пол газа), НО на практике дешевые аксели видимо сходят с ума от вибраций и сами показания уже не правильные, какие фильтры не прикручивай… тут уже специфика МЕМС чипов наверное, т.е. есть предел вибраций по идее…

alexmos
mahowik:

я обычно калибровку делаю с пульта когда коптер включен и стоит стабильно

Ну я тоже так делал если не забывал. А можно сделать и задерджку, по моему так удобнее. Кстати про калибровку гиры вообще мало инфы на официальной страничке и я случайно наткнулся на эту важную штуку.

mahowik:

в мультивии почти нет вычислений с плающей запятой, т.к. это увеличивает время цикла

Совершенно верно, респект разработчикам мультивий. Но если вы внимательно посмотрите код, вы увидите что я также не ввожу плавающую запятую, лишь уменьшаю делитель на 10 в одном месте и увеличиваю на 10 в другом. Тем самым сохраняю десятые доли и это работает (проверял на графиках).

mahowik:

думаю был бы и на тротл еслиб он был универсален на все конфигируции

Согласен, мой вариант надо немного сконфигурировать. Опять же посмотрите на добавку кода в config.h, там я предлагаю померять показания отрыва от земли и выставить центр экспоненты в эту точку (параметр THROTTLE_HOVER). Но результат стоит того. И кстати, если у вас есть подстройка кривой в самом пульте, вам также придется сначалаа померять точку отрыва, чтобы правильно нарисовать кривую.

mahowik:

в теории и на стенде так и есть (т.е. в ГУИ все красиво, до включения моторов хотяб на пол газа), НО на практике дешевые аксели видимо сходят с ума от вибраций и сами показания уже не правильные

Если хороший гиро, то можно посоветовать уменьшить вклад акселерометра в нахождение вектора ориентации. Попробуйте увеличить параметр в IMU.pde

#define GYR_CMPF_FACTOR 310.0f

Но надо смотреть по гафикам, насколько сильно уплывают показания гироскопа без акселерометра (для проверки поставьте GYR_CMPF_FACTOR 10000.0f).

juniorluck

Вот и мне пришли 2 платки ALLINONE, в конверте была вложена распиновка только для одной платы, а вот для этой 5V c GPS небыло… может кто подскажет распиновку или как её подключить?..

soliada
alexmos:

Задержка калибровки

Спасибо,ИМХО очень полезная функция.Лично меня напрягала калибровка с пульта,включить не не “встряхнуть”,особенно при микро размере коптера,очень сложно.

alexmos:

Не очень важная доработка но я думаю что полезно: более точная калибровка нуля гироскопа. Сейчас в коде ноль округляется до целых. Так как данные гироскопа интегррируются, даже небольшая ошибка накапливается. Лучше окрулять до десятых, тем самым слегка повышается точность и уменьшается дрифт.

Попробовал.Признаться не заметил ни какой разницы в поведении,видимо размерность тоже имеет свое значение.

mahowik
alexmos:

А можно сделать и задерджку, по моему так удобнее.

согласен… предложите чтобы включили в прошивку и по желанию можно было отключить/включить

alexmos:

Но если вы внимательно посмотрите код, вы увидите что я также не ввожу плавающую запятую, лишь уменьшаю делитель на 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 бита

alexmos:

Согласен, мой вариант надо немного сконфигурировать. Опять же посмотрите на добавку кода в config.h, там я предлагаю померять показания отрыва от земли и выставить центр экспоненты в эту точку (параметр THROTTLE_HOVER). Но результат стоит того. И кстати, если у вас есть подстройка кривой в самом пульте, вам также придется сначалаа померять точку отрыва, чтобы правильно нарисовать кривую.

изучу и отпишусь обязаточно! кстать если выставить точку отрыва в центр экспоненты, этож получится что “плавная” часть газа будет только на снижение, а увеличение газа как раз “резкое” по экспоненте (т.е. на подъем)… Я же себе представлял, что точка отрыва должна быть примерно в первой трети экспоненты для того чтобы его проще было держать в соостоянии висения (равновесия т.е.). Поясните тут пожалуйста. Хотя тут же начал думать что так и надо 😃 т.е. уменьшение газа плавное для снижения, увеличение газа как раз резкое чтобы “подхватывать” при снижении проще было… или все не так? 😃

alexmos:

Если хороший гиро, то можно посоветовать уменьшить вклад акселерометра в нахождение вектора ориентации. Попробуйте увеличить параметр в IMU.pde

alexmos:

Но надо смотреть по гафикам, насколько сильно уплывают показания гироскопа без акселерометра (для проверки поставьте GYR_CMPF_FACTOR 10000.0f).

буду пробовать, но не раньше чем через неделю-две…

alexmos
mahowik:

только вот судя по коментам в коде у гиры диаппазон +/- 8192

Это максимальные значения при довольно сильных угловых скоростях (кстати занженные в MultiWii, изначально гира выдает почти что полные int16). В нормальной работе гира выдает данные недалеко от нуля. И мы прбавляем каждый раз измеренный средний ноль. И если там сидит ошибка к примеру 0.5, она быстро накапливается при интегрировании. Но это опять же силно зависит от гиры, на моей одна ось попадает в ноль точно, а вот вторая убегает быстро с округленным нулем. После ввода десятых становится стабильной как и первая. Вводить сотые смысла нет, ноль не на столько стабилен и там уже шум больше чем сотые.
Была мысль убрать деление на 4, чтобы ещё повысить точность, но тогда надо пересматривать всю арифметику на предмет переполнений, и мержиться с SVN будет сложно.

mahowik:

этож получится что “плавная” часть газа будет только на снижение, а увеличение газа как раз “резкое” по экспоненте (т.е. на подъем)

Нет, и на подъем и на снижение будут плавные части. Хотя и говорится про одну экспоненту, на самом деле их две (как и на ручки наклонов), соединенных в своей нулевой точке. С такой кривой мы быстро выбираем нерабочие участок до отрыва, затем плавно идет в районе отрыва и далше, и потом быстро растет до максимального газа.

И кстати посморите на второй параметр SHIFT_HOVER. Если у вас отрыв идет на 2/3 газа, то есть возможность сместить его в 1/3 и больший диапазон использовать для полета.

commy_s
juniorluck:

Вот и мне пришли 2 платки ALLINONE, в конверте была вложена распиновка только для одной платы, а вот для этой 5V c GPS небыло… может кто подскажет распиновку или как её подключить?..

Cкан от 3.3V. на 5 вольтовой поменяны местами RX и TX.

juniorluck

Небольшая инфа, списался с производителем этих плат… Он сказал что 3,3V платы можно питать от 5V на плате есть стабилизатор.

Олег, большое спасибо!

juniorluck

Киньте пожалуйста в меня скриптами, чтоб каждый датчик отдельно проверить на плате ALLINONE…