ArduCopter Mega: порт на обычную Arduino (тестим)
Чет совсем плохо
если это голые данные (SONARDEBUG) то всё очень хорошо, надо только померить какое значение на какое расстояние
кажется обе версии сонара после 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 за найденый баг =)
спасибо Ar2r за найденый баг =)
А где результат? 😃
А где результат?
как только перепроверю всё что смогу =)
никто никуда не инвертирован, если верно выбрана плата датчиков
наклоняем плату влево, горизонт вращается вправо
наклоняем плату вниз, горизонт уплывает вверхпредставте что вы коптер и наклоняетесь - горизонт будет наклонятся в противоположную сторону, а не как в multiwii
да, вы правы - все ок.
но летать никак не хочет пока.
как будто у двигателей не отрицательная, а положительная обратная связь.
при наклоне - стараются перевернуть еще больше. ( схемы подключения моторов проверил 10 раз - даже менял местами - все равно не хочет стабилизироваться.)
Может стоит PID крутить ? Если да, то какие ?

синий - барометр, красный - сонар
замучался с фильтрами
основная проблема - когда резко поднимать/опускать, то значения скидываются в ноль, что не очень хорошо… попробовал попридумывать фильтры - получается еще хуже или шум (код фильтров оставил, разбирайтесь что не так… один находит среднее между последними 6-10 значениями, другой, при обращении высоты в ноль, выставляет прошлое значение - вроде работать должно, но не работает)
закомитил исправления, значения для DYP-ME007 не тестил (если неверно показывает в коде ищите sonic_range=(sonar_data)*0.0078 и подстраивайте 0.0078), DYP-ME007v2 показывает вроде точно
оба сонара показывают до 2м (причем имхо могут больше, но в коде урезаны значения, надо разбираться со всякими таймерами и хаками AVR)
Вопрос по компасу:
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
оба сонара показывают до 2м (причем имхо могут больше
Я сонар DYP цеплял к Ардуинке и заливал простой скетч с таймером. Сонар работал от стен до 4 метров. Если поверхность мягкая, неровная (диван + шкаф с промежутком), то таймер зависал.
синий - барометр, красный - сонар
Глеб, на графике видно смещение баро относительно сонара. Значит, фильтр баро дает запаздывание (нарастание идет медленнее).
Фильтр скользящего среднего удаляет постоянную составляющую: 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 порядка. Вечером пришлю код.
на графике без фильтров вроде бы вообще, для баро тоже фильтр убрали в новой прошивке, а для сонара у меня фигня получается что с усреднением, что с просто проверкой (не ноль ли), возможно просто не надо в 3 ночи кодить и сегодня я пойму где же накосячил
еще в реальном полете быстрее набираюся значения, а при тестировании (test-altitude в версии из svn) они с задержкой выводятся
фильтр на сонар на самом деле нафиг не нужен, надо просто фильтровать провалы
вот еще пару графиков от вчерашних тестов (один раз барометр показывал меньше чем есть, хз почему):




при попытке выводить вместо нулевых значений прошлое значение получаю что ноль просто становится минимальным значением, пробовал фильтровать минимальное - та же фигня
надо найти фильтр, который бы фильтровал нули и сглаживал (в идеале игнорировал) пороги
dl.dropbox.com/u/1638929/tmp/barosonartest.zip - csv файлики со значениями (test - без фильтра)
SovGVD,
Можешь выложить чистые данные от сенсора при при движении от стены и обратно. Можно в екселе или просто построчно.
Есть парочка идей, хочу проверить.
dl.dropbox.com/u/1638929/tmp/barosonartest.zip - это чистые данные, первая цифра барометр, вторая сонар, двигал от пола вверх, насколько провод позволил
Полетел !
Я по незнанию менял в define.h значения CH_1 … CH_4 т.к. распиновка каналов аппы у меня не стандартная ( перепрошить аппу без провода не могу).
В итоге взлетел, но довольно сильно раскачивается. Что нужно менять в настройках ?
один раз барометр показывал меньше чем есть, хз почему
У меня такое ощущение, что фильтр барометра удалил постоянную составляющую. По сонару видно, что высота была постоянной величиной. Могу сильно ошибаться. Благодарю за лог, после работы попробую дома с ним.
Глеб, пришли еще лог, когда коптер спокойно стоит на месте. Интересно, какой шум идет по каналам.
Глеб, скажи, на графике, в длину время, это микросекунды ?
Алгоритм сглаживания показаний барометра набросал. буду как-то склеивать с показаниями сонара.

используются 6 последних показаний для сглаживания.
Чем большее число предыдущих показаний используется - тем больше усредняется и задерживается изменение показаний, получается некая задержка по графику срених значений относительно исходных данных .
Я просто подумал, что снижаться аппарат на высоте в 2 метра и сонаром вниз, врятли будет быстрей чем ускорение свободного падения.
Нужно просто смотреть разницу во времени между считываниями и падениями высоты по сонару, если больше 9.8 метра в сек, то значение с сонара не верное, тупо его пропускаем, а оставшиеся значения усреднять.
Единственно хватит ли разрешения аппаратуры.
И еще одно предложение, а не открыть ли нам новый топик, чтобы ссылки на проект были в первом сообщении?
Имхо можно специально сделать страницу на вики и на нее ссылку дать, а там на странице уже, и где скачать последний, и на остальную документацию.
Господа, уже неделю не могу победить компас. У кого 5883L скиньте свою настроенную библиотечку.
в длину время, это микросекунды ?
нет, это просто порядковый номер значения… они идут с задержкой 20мкс (или сколько delay(20) выдает?)
Алгоритм сглаживания показаний барометра набросал. буду как-то склеивать с показаниями сонара.
барометр нет смысла сглаживать, разница минимальная, а задержка будет… надо победить сонар, чтобы фильтровались явно не корректные (провалы) значения… думаю как вариант можно задать некий порог, при котором берется прошлое значение, если текущее (обычно близкое к нулевой высоте, если не корректно считает) превышает порог разности
можно специально сделать страницу на вики и на нее ссылку дать
code.google.com/p/megapirateng/w/list и там же скачать обновления
У кого 5883L скиньте свою настроенную библиотечку.
большая просьба указывать какая прошивка используется и перепроверять не вышло ли нового? например сейчас есть как минимум 3 прошивки, Олега r741, от буржуев 2.0.38 и то что мы тут пилим 2.0.40 (в которой вроде как компас работает как надо)
…большая просьба указывать какая прошивка используется и перепроверять не вышло ли нового? например сейчас есть как минимум 3 прошивки, Олега r741, от буржуев 2.0.38 и то что мы тут пилим 2.0.40 (в которой вроде как компас работает как надо)
Да собственно все равно какая, главное чтоб компас работал как надо 😃