ArduCopter Mega: порт на обычную Arduino (тестим)

SovGVD

он там уже должен быть, сонар еще до магнетометр был

по поводу сонара, походу каждому придется подбирать значения под свой… не смотря на в1 в2, в в2 уже как минимум 3 варианта разных значение одной высоты =( придется делать чето типа калибровки или думать как переписывать код (что довольно лениво)

хех… залил себе =) сонар тоже не работает… будем править

SovGVD
tusik:

Чет с сонаром совсем не то

судя по значениям это первая версия
чето не пойму что и когда поломалось =(

zkarust

Добрый день.
Я наконец то присоединился к вашему сообществу.
Собрал квадру на allinone2.
Все работает, только угол наклона (горизонт) инвертирован.
Как исправить ? (компас и тангаж корректны)

upd. использую 2.40 test4

Ar2r

В метре от стены при приближении значение с сонара перепрыгивает с -5300 на +5300 и приближается к -3000 (примерно) при приближении к стене в плотную

SovGVD
zkarust:

только угол наклона (горизонт) инвертирован.

никто никуда не инвертирован, если верно выбрана плата датчиков
наклоняем плату влево, горизонт вращается вправо
наклоняем плату вниз, горизонт уплывает вверх

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

tusik
zkarust:

только угол наклона (горизонт) инвертирован

Так и должно быть

SovGVD

те у кого дальномер первой версии, залейте TEST4, в ADC библиотеки поставьте SONARDEBUG (остальные сонары закоментить!) и закментируйте фильтр
теперь замерьте на каком расстоянии какие значения в CLI - test - sonar
и какое значение минимальное и максимальное для вашего сонара (т.е. плавно отодвигаем от стены и смотрит как !также! плавно меняются значения, как только пошли резкие скачки - значит это уже предел)

tusik
SovGVD:

залейте TEST4,

У меня вот так ругается
C:\arduino-0022\libraries\AP_ADC\AP_ADC_ADS7844.cpp:232: error: ‘SONAR_FILTER_SIZE’ was not declared in this scope

SovGVD
tusik:

У меня вот так ругается

//*******************************
// Select sonar type
// #define DYPME007
// #define DYPME007v2
#define SONARDEBUG
//*******************************
// sonar filter
//#define SONARFILTER
#define SONAR_FILTER_SIZE 4

SovGVD
tusik:

Чет совсем плохо

если это голые данные (SONARDEBUG) то всё очень хорошо, надо только померить какое значение на какое расстояние

tusik
SovGVD:

какое значение на какое расстояние

47см - 6397
98см - 7420
200см - 26950

После 2 м не работает

Вот картинка около 2м

SovGVD

кажется обе версии сонара после 2 метров ничего не ловят, а обещали то до 5 метров!
судя по нескольким тестам - косяк в коде SONARFILTER…

for(byte i = 0; i < SONAR_FILTER_SIZE; i++){
	sonar_data += s_filter[s_filter_index];
}

fuuuuu!! s_filter[s_filter_index] =) каждый раз зарекаюсь не кодить по ночам
спасибо Ar2r за найденый баг =)

tusik
SovGVD:

спасибо Ar2r за найденый баг =)

А где результат? 😃

SovGVD
tusik:

А где результат?

как только перепроверю всё что смогу =)

zkarust
SovGVD:

никто никуда не инвертирован, если верно выбрана плата датчиков
наклоняем плату влево, горизонт вращается вправо
наклоняем плату вниз, горизонт уплывает вверх

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

да, вы правы - все ок.

но летать никак не хочет пока.
как будто у двигателей не отрицательная, а положительная обратная связь.
при наклоне - стараются перевернуть еще больше. ( схемы подключения моторов проверил 10 раз - даже менял местами - все равно не хочет стабилизироваться.)
Может стоит PID крутить ? Если да, то какие ?

SovGVD


синий - барометр, красный - сонар

замучался с фильтрами
основная проблема - когда резко поднимать/опускать, то значения скидываются в ноль, что не очень хорошо… попробовал попридумывать фильтры - получается еще хуже или шум (код фильтров оставил, разбирайтесь что не так… один находит среднее между последними 6-10 значениями, другой, при обращении высоты в ноль, выставляет прошлое значение - вроде работать должно, но не работает)
закомитил исправления, значения для DYP-ME007 не тестил (если неверно показывает в коде ищите sonic_range=(sonar_data)*0.0078 и подстраивайте 0.0078), DYP-ME007v2 показывает вроде точно
оба сонара показывают до 2м (причем имхо могут больше, но в коде урезаны значения, надо разбираться со всякими таймерами и хаками AVR)

pashteton

Вопрос по компасу:

calibration[0] = fabs(715.0 / mag_x);
calibration[1] = fabs(715.0 / mag_y);
calibration[2] = fabs(715.0 / mag_z);

но ведь у 5883 вовсе не 715 получается. там по z меньше чем x и y

Musgravehill
SovGVD:

оба сонара показывают до 2м (причем имхо могут больше

Я сонар DYP цеплял к Ардуинке и заливал простой скетч с таймером. Сонар работал от стен до 4 метров. Если поверхность мягкая, неровная (диван + шкаф с промежутком), то таймер зависал.

SovGVD:

синий - барометр, красный - сонар

Глеб, на графике видно смещение баро относительно сонара. Значит, фильтр баро дает запаздывание (нарастание идет медленнее).

Фильтр скользящего среднего удаляет постоянную составляющую: Z[i]:=(Y[i]+Y[i-1]+Y[i-2])/3, Z - выход, Y - измеренные значения. Возможно, это вызывает проблему. Можно попробовать рекурсивный фильтр первого порядка: выход Z[i] = a*Y[i] + b*Z[i-1], где a = 0.85 (например), а b = (1-a) (в примере будет b= 1-0,85 = 0,15 ). Чем больше “а”, тем быстрее идет нарастание, но сглаживание слабее.
Как вариант, рекурсивный фильтр 4 порядка. Вечером пришлю код.