MultiWii

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…

Boev_Dmitry
juniorluck:

чтоб каждый датчик отдельно проверить на плате ALLINONE

можно просто для arduino под каждый датчик скачать библиотеку отдельную. там и тестовые скетчи есть. я так проверял когда плата пришла, но библиотеки на домашнем компе только есть. но гуглом ищется быстро

sulaex
Covax:

какие датчики на ней стоят

слевой стороны стоит микруха гироскопа ITG3200 (или аналогичных), полностью совпадает с даташитом

справа стоит датчик очень похожий на BMA180

даташит на BMA180

ЗЫ кстати, очень интересный вариант платки мультивия квадро с пятью каналами, ничего лишнего, процессор, датчики, питание датчиков на 3.3 вольта, наверное не дорого стоит? где такое можно приобрести?

soliada
Covax:

Друзья, а что это за платка и какие датчики на ней стоят, кто знает?

100% Хэнд-Мэйд.Кто-то просто развел и изготовил себе и вероятно еще и друзьям перепало.

pnm

Подскажите у меня nunchuck включен или нет. Если нет, не подскажите как его включить? Начинаю поднимать коптер, он переворачивается. Калибровки все сделал.

MultiWiiV1_7_nunchuck_mega_16.rar

gena_g

Вот мой новый контроллер MultiWii для самолета (летающего крыла). Датчики стоят ADXL345 и L3G4200D, МК mega168. Не получается прошить bootloader выдает ошибку верификации. Я всегда заливаю программу через LPT програматор, на этой плате нет места для дополнительного разьема програматора.

Covax
pnm:

Подскажите у меня nunchuck включен или нет. Если нет, не подскажите как его включить? Начинаю поднимать коптер, он переворачивается. Калибровки все сделал.

Включен то включен, но на графике не видно ничего. Потряси, если нет графиков относящихся к акселю, значит не работает аксель.

pnm
Covax:

Включен то включен, но на графике не видно ничего. Потряси, если нет графиков относящихся к акселю, значит не работает аксель.

Всплески есть. Забрал сегодня OpenPilot, пока откладываю wii.