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

Aven

Test6 поставил, а как GPS проверять?
По команде gps в консоль идут кракозябры, причем прервать вывод нельзя, только ресетом.
По rawgps ничего не выдает.

Через некоторое время начинает мигать светодиод возле UBLOX модуля, это значит спутники увидел?

Musgravehill
Ar2r:

SovGVD и я методом научного тыка допилили функцию фильтра сонара.

Подскажите, почему во второй половине графика сонар показывает 100-150см, а баро -100 -150см ? Это ошибка барометра, значит, весовой коэффициент сонара должен быть выше, чем у барометра при высоте 0…2 метра.

Romb89
Aven:

По rawgps ничего не выдает.

Да. Это не работает пока. Просто там в коде идет напрямую чтение из Serial2.

Aven:

Через некоторое время начинает мигать светодиод возле UBLOX модуля, это значит спутники увидел?

Это значит, что он определил местоположение.

Aven:

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

А вот это интересно. Сделай пожалуйста скриншот этого.

Aven
Romb89:

А вот это интересно. Сделай пожалуйста скриншот этого.

Это минут за 5 написалось, прервар ресетом.

Musgravehill

С предыдущей страницы взял данные по сонару и баро. В екселе сделал 2 формулы: усреднение высоты с весовыми коэффициентами и рекурсивный фильтр 4 порядка. Красный график - итоговая высота.

Усредненная высота = b*baro + s*sonar, где s=0.65 (потому что высота менее 2х метров =>верим сонару), а весовой коэффициент b=(1-s) = (1-0.65) = 0.35. Усредненная высота проходит через рекурсивный фильтр.

Можно варьировать весовые коэффициенты средней высоты по высоте коптера:
<3 метров: s = 0.7 b=0.3 g=0 (по GPS)
>3 метров: s = 0 b=0.8 g=0.2

Aven
I2C devices detector
=================================

Detected device addr: 0x3C HMC5883/43 (compass)
Detected device addr: 0x82 BMA180 (accel) Allinone board
Detected device addr: 0x84 unknown device!
Detected device addr: 0xD0 ITG3200 (gyro)
Detected device addr: 0xEE BMP085 (baro)
=================================
Cycle is over
tusik

Сегодня более детально оттестил ртл. Еще раз скажу - работает. Вот видео.

Летал в сильный ветер. Это был третий или четвертый возврат. Над головой выключил ртл и рулил руками - боялся влетит в куст. Ветер коптер держит хорошо, но когда летишь против ветра сильно подымается вверх, приходится сбрасывать газ. Лойтер не проверил, при попытке привести коптер к ногам в ветер (поработал на публику. блин) сломал пропеллер, а запасного не было

Ar2r
Musgravehill:

Подскажите, почему во второй половине графика сонар показывает 100-150см, а баро -100 -150см

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

Musgravehill:

Красный график - итоговая высота.

шикарно. вот бы теперь понять, как это все в прошивку всунуть =)

Musgravehill
Ar2r:

шикарно. вот бы теперь понять, как это все в прошивку всунуть =)

Формулы просты до безобразия!

Y = усредненная высота = b*baro + s*sonar, где s=0.65 (потому что высота менее 2х метров =>верим сонару), а весовой коэффициент b=(1-s) = (1-0.65) = 0.35.


 if ($altitude < 2)
    {
        $s=0.65;  $b=1-$s;
    }
 else
    {
       $s=0;  $b=1;
    }

$altitude = $b*$baro + $s*$sonar;

Y = усредненную высоту подаем на фильтр:
//four stage low pass filter
Z[n] = выход фильтра = итоговая высота.
и Y[n] - вход на n измерении.

//Z[n] = a0*Y[n] + b1*Z[n-1] + b2*Z[n-2] + b3*Z[n-3] + b4*Z[n-4]
//x - главный коэффициент фильтра. При х=1 перестают учитываться свежие данные, но максимально влияют предыдущие выходы фильтра. Я задал х = 0.7
Остальные коэффициенты рассчитываются так:
//a0 = (1-x)^4 = 0,0081
//b1 = 4x =2,8
//b2 = -6 * x^2 =-2,94
//b3 = 4 * x^3 =1,372
//b4 = - x^4 =-0,2401
Т.е. используется 1 свежее значение с датчика (a0*Y[n]), причем, коэффициент а0 очень мал. И 4 прошлых выхода фильтра (bi*Z[n-i]). Таким образом, фильтр сильно сглаживает, потому что малый коэффициент а0 не позволяет выходу Zn быстро измениться.

narod.ru/disk/…/bob_lpf_4_stage.xls.html Excel файл. Можно править коэффициент фильтрации Х и вес сонара S. Исходные данные - ваши.

LeonVS

Хм… в этой прошивке отвалился ГПС 😦 У кого блек вортекс, как прикрутить?

Ar2r
LeonVS:

в этой прошивке отвалился ГПС

GPS протокол правильно выставлен в конфиге?

LeonVS

Там же авто определение, или я что то путаю…?

#if GPS_PROTOCOL == GPS_PROTOCOL_AUTO
AP_GPS_Auto g_gps_driver(&Serial2, &g_gps);

#elif GPS_PROTOCOL == GPS_PROTOCOL_NMEA
AP_GPS_NMEA g_gps_driver(&Serial2);

#elif GPS_PROTOCOL == GPS_PROTOCOL_SIRF
AP_GPS_SIRF g_gps_driver(&Serial2);

#elif GPS_PROTOCOL == GPS_PROTOCOL_UBLOX
AP_GPS_UBLOX g_gps_driver(&Serial2);

#elif GPS_PROTOCOL == GPS_PROTOCOL_MTK
AP_GPS_MTK g_gps_driver(&Serial2);

#elif GPS_PROTOCOL == GPS_PROTOCOL_MTK16
AP_GPS_MTK16 g_gps_driver(&Serial2);

#elif GPS_PROTOCOL == GPS_PROTOCOL_NONE
AP_GPS_None g_gps_driver(NULL);

#else
#error Unrecognised GPS_PROTOCOL setting.
#endif // GPS PROTOCOL

Прошивка из архива, моими кривыми руками не тронутая 😃 В каком файле это крутится?

Romb89

В APM_Config.h нужно выставить #define GPS_PROTOCOL GPS_PROTOCOL_NMEA

LeonVS

Прописал… в планере все равно пишет No GPS…
Может авто поставить?

Romb89

Попробуй авто или ublox. Но насколько я помню Олег допиливал автоопределение, чтобы ublox нормально определялся, а в последней прошивке этих изменений нету.

Фууух, наконец-то разобрался, почему у меня компас работать не хотел.
Причиной всему являлась антенна гпс. У неё в корпусе два мощных магнита, чтобы крепить её на металлические поверхности. Вот эти магниты и создавали наводки на компас.

tusik
LeonVS:

все равно пишет No GPS…

Можно еще со скоростью порта поиграться. У меня заработал только на 4800

Aven

Romb89, есть идеи, насчет кракозябров gps в консоли? 😃

Alex_from_Israel
Musgravehill:

Формулы просты до безобразия!

Y = усредненная высота = b*baro + s*sonar, где s=0.65 (потому что высота менее 2х метров =>верим сонару), а весовой коэффициент b=(1-s) = (1-0.65) = 0.35.

if ($altitude < 2)
   {
       $s=0.65;  $b=1-$s;
   }
else
   {
      $s=0;  $b=1;
   }

$altitude = $b*$baro + $s*$sonar;

Y = усредненную высоту подаем на фильтр:
//four stage low pass filter
Z[n] = выход фильтра = итоговая высота.
и Y[n] - вход на n измерении.

//Z[n] = a0*Y[n] + b1*Z[n-1] + b2*Z[n-2] + b3*Z[n-3] + b4*Z[n-4]
//x - главный коэффициент фильтра. При х=1 перестают учитываться свежие данные, но максимально влияют предыдущие выходы фильтра. Я задал х = 0.7
Остальные коэффициенты рассчитываются так:
//a0 = (1-x)^4 = 0,0081
//b1 = 4x =2,8
//b2 = -6 * x^2 =-2,94
//b3 = 4 * x^3 =1,372
//b4 = - x^4 =-0,2401
Т.е. используется 1 свежее значение с датчика (a0*Y[n]), причем, коэффициент а0 очень мал. И 4 прошлых выхода фильтра (bi*Z[n-i]). Таким образом, фильтр сильно сглаживает, потому что малый коэффициент а0 не позволяет выходу Zn быстро измениться.

narod.ru/disk/…/bob_lpf_4_stage.xls.html Excel файл. Можно править коэффициент фильтрации Х и вес сонара S. Исходные данные - ваши.

У меня по ссылке скачивается Яндекс-Бар. Где искать файл для Екселя?

Musgravehill
Alex_from_Israel:

У меня по ссылке скачивается Яндекс-Бар. Где искать файл для Екселя?

  1. Вводите капчу
    2.Появляется страница с содержимым:
    Чтобы скачать файл, нажмите на ссылку:
    хттп:/narod.ru/disk/******/bob_lpf_4_stage.xls - загрузится мой эксель-файл.

Установить Яндекс.Бар. - снимите галку.

LeonVS

Все скорости перепробовал… Ощущение что вообще не чего не меняется…
При команде gps, в терминале идут точки до бесконечности…
в rawgps выдает всякую чушь из кучи знаков вопроса и xxxx…
Причем от изменения скорости в APM_Config.h совершенно не чего не меняет… В общем странная не понятная хуня 😃