GPS-приемники для квадрокоптеров

aka_Дмитрий
KAIMAN:

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

не важно как трекер стоит на коптере. Важно как он будет расположен после неконтролируемого падения после улета аппарата. подумайте, как и что может сломаться и отвалиться, чтобы прикрепить трекер “правильнее”

KAIMAN

У меня несколько иная задача трекера. Мне не важно будет ли он работать после краша, потому что он отошлет на сервер координаты за каждые 5 сек. своего полета. Конечная точка маршрута будет известна.Конечно тут как и во всем есть свои плюсы и минусы, но меня устраивает, я так летал на другом коптере и его можно в реальном времени отслеживать на карте и смотреть записаный маршрут полета, скорости… и т.д.

Мне просто интересно, будет ли он достаточно удовлетворительно работать будучи наклоненным под 45 градусов, или же стоит заморочится и опаяв ГПС антенну от платы , удлинив ее кабелем вывести повыше и строго вертикально? Вчера первый раз попрбовал этот новый трекер. На подоконнике окна ловил 6 спутников. Сегодня попробую испытать его наклоненным.

Shuricus
Jade_Penetrate:

Далее, проблему создает железный экран снизу антенны (как я понимаю, под ним lna?) - из-за него встроенный компас при калибровке выдает дичайшие оффсеты

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

Jade_Penetrate

Увы, еще как магнитится. Может позже займусь этим, а пока встроенный компас бесполезен.

Shuricus

Пробовали магнитом? Ну китайцы значит опять закосячили.

ssilk
Jade_Penetrate:

Увы, еще как магнитится

Shuricus:

Пробовали магнитом?

Ну, теперь поможет только размагничивание…)

alexeykozin

если размагнитить нечем - снять экран, сделать разделительный слой, оклеить медной фольгой

7 days later
newdream

Господа форумчане, подскажите пожалуйста, такой модуль GPS стоит брать для AIOP v2 с маховиком на борту?
www.aliexpress.com/item/…/32366818254.html
Взял модуль ublox 6m, но косячный он до боли, то есть 3d fix, то нет…
И компас штатный наводок дает очень много, при включении удержания по gps начинает колбасить и улетать в сторону китая… Думаю решить эту проблему neo7m с отдельным компасом на борту.

alexeykozin
newdream:

Господа форумчане, подскажите пожалуйста, такой модуль GPS стоит брать для AIOP v2 с маховиком на борту?

если не ошибаюсь Дмитрий Котвицкий свой модуль на чипсете медиатек 3333 с антенной 35*35мм как раз для этого контроллера с прошивкой делал

Hyperion

поддержу тезку. ИМХО для маховика мтк3333 самое оно с его фильтрацией и точностью.

alexeykozin

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

пока задумка такая

  1. округленная позиция по широте и долготе на основе накопления N количества сэмплов c выводом настройки глубины этого фильтра в параметр.
    но если этот праметр оставить единственным то при движении округленная позиция будет отставать от реальной поэтому вторая переменная средняя скорость точки за аналогичный период
  2. назовем ее динамическая ошибка. где средняя динамическая ошибка по широте и долготе = накопление разницы между средней позицией и свежим сэмплом.
    соответственно прогнозируемая позиция это средняя позиция + средняя динамическая ошибка.
  3. при превышении скорости скажем 10кмч можно уменьшать глубину фильра а при больших скоростях использовать сырые данные в качестве актуальной позиции

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

кто со мной?

mataor
alexeykozin:

округленная позиция будет отставать от реальной

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

alexeykozin

да, у меня прошивка навигационного модуля с отключенным по умолчанию встроенным в навигационный модуль фильтром.
скачать ее, тулзу и лоадер можно тут files.msdatabase.ru/gps (снизу, в аттачах)
Очень точно и честно показывает координату. точки кучно бьют в метр но если инерциалку в ардукоптере отключить квадрик начинает “гонять муху” в этом метре (TC_XY = 0,5) инерциалка в ардукоптере хорошо работает на больших аппаратах с хорошо подавленными вибрацими - на мелких и в случае вибраций случаются неприятности.
хотелось бы сделать прошивку ардукоптер надежной и менее зависимой от вибраций
собственно время подходящее - новых прошивок для АПМ от дидронесов больше не ожидается

alexeykozin

вот немножко в коде идея

struct PACKED Location {
    union {
        Location_Option_Flags flags;                    ///< options bitmask (1<<0 = relative altitude)
        uint8_t options;                                /// allows writing all flags to eeprom as one byte
    };
    // by making alt 24 bit we can make p1 in a command 16 bit,
    // allowing an accurate angle in centi-degrees. This keeps the
    // storage cost per mission item at 15 bytes, and allows mission
    // altitudes of up to +/- 83km
    int32_t alt:24;                                     ///< param 2 - Altitude in centimeters (meters * 100)
    int32_t lat;                                        ///< param 3 - Lattitude * 10**7
    int32_t lng;                                        ///< param 4 - Longitude * 10**7
};

// так декларирована переменная выходных данных класса жпс
// Location location;

// пусть это будут сырые данные от навигационного модуля
// которые без округления ложились в выходную переменную location
// new_lat; new_lng; new raw data from gps

//gps filter size параметр глубины фильтрации который можно вынести в параметры

int32_t gps_filter_size = 65; // 9 = 8 samples avg + 1 actual;  65 =  64 samples avg + 1 actual

int32_t gps_filter_avg = gps_filter_size - 1;
int32_t gps_filter_portion = 1


static    int32_t avg_lng;
static    int32_t avg_lat;

if (avg_lng == 0 && avg_lat == 0 ) // инициализация начальных значений
{
 avg_lng = new_lng;
 avg_lat = new_lat;
}


 avg_lng = (avg_lng * gps_filter_avg   +  new_lng * gps_filter_portion) / gps_filter_size   ;
 avg_lat = (avg_lat * gps_filter_avg   +  new_lat * gps_filter_portion) / gps_filter_size   ;

//move avg position to estmate position with avg speed
static int32_t avg_lng_spd =0;
static int32_t avg_lat_spd =0;

int32_t lat_spd = avg_lat - new_lat;
int32_t lng_spd = avg_lng - new_lng;

  avg_lng_spd = (avg_lng_spd * gps_filter_avg + lng_spd * gps_filter_portion) / gps_filter_size   ;
  avg_lat_spd = (avg_lat_spd * gps_filter_avg + lat_spd * gps_filter_portion) / gps_filter_size   ;


location.lng = avg_lng + avg_lng_spd ;
location.lat = avg_lat + avg_lat_spd ;
Jade_Penetrate

Задумка очень интересная. Однако становится вопрос - как оно будет держать позицию при порывистом ветре?
При внесении фильтра, пусть и с экстраполяцией значений, все равно будет вносится задержка обнаружения реальной позиции. Чтобы с отключенной инерциалкой коптер нормально держал позицию - нужно загрублять реакцию на gps (loiter P, верно?), иначе, если задержка измерений будет превышать скорость реакции, может возникнуть унитазинг/колебания вокруг позиции.
При таких настройках и без инерациалки, аппарат только так будет носить резким ветром.
Предложенная экстраполяция значения по оценке средней ошибки, скорее всего, не сможет скомпенсировать задержку, новый семпл будет стоять далеко от предыдущих, и прогнозируемая по средней динамической ошибке позиция будет отличаться от реальной. А если не делать прогнозов и просто устреднять, то разница будет еще больше. Стоит обдумать этот момент, например внести быстрый критерий отключения фильтра, и его оценка должна быть не по средней скорости движения коптера.
В таком случае, на помощь как раз может прийти инерциалка. Критерий отключения и/или изменения глубины фильтра gps можно оценивать с ее помощью, ведь она быстрее всего отрабатывает возмущения.

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

Описание несколько сумбурно, надеюсь суть ясна.

alexeykozin

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

zis
Shuricus:

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

На BN-880 припаян алюминиевый экран.