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

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 припаян алюминиевый экран.

alexeykozin
Jade_Penetrate:

Чтобы с отключенной инерциалкой коптер нормально держал позицию - нужно загрублять реакцию на gps (loiter P, верно?), иначе, если задержка измерений будет превышать скорость реакции, может возникнуть унитазинг/колебания вокруг позиции.

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

integro

Мужики, какой лучше брать жпс
из этих моделей есть достойный :

N8M c EEPROM и LNA

напишите конкретно модель.
Я поискал и приметил такие
на фото

И второй вопрос накрылся
стабилизатор на gps
но без схемы понять какой используется не понятно.
заменил на такой MIC5205-3.3YM5 150mA 3.3V CMOS Low Iq Low-Dropout Voltage Regulator не заработал . На выходе нет питания.
Может кинете ссылку на схему ublox lea-6h чипа

alekseii
alexeykozin:

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

Всем доброго времени !
Алексей (alexeykozin) а Ваши модули (просто он у меня есть, брал F4BY) на чипсете медиатек 3333, не пойдут для работы с контроллером AIOP v2 с маховиком ? (контроллер идёт, пока разбираюсь)
Заранее спасибо !

Hyperion

вот тоже ломаю голову. В чистом поле ХК Lea6h работает отлично. Коптер висит как прибитый. А при полетах возле зданий - спутники пропадают. Раз вообще словил FS по GPSу.
Ломаю голову на что проапгрейдиться. ХК козлы не ставят LNA в GPS. Возможно из за этого спутники теряются. Усугубляет то что 3DR предлагают конфиги для 6 и 7 серии. На 8ю серию конфига нету, то есть официально как я понимаю оно не поддерживается. Соответственно танцы с бубном. Наверное все же 7ю серию с LNA закажу… Хотя конечно хочется GPS+Glonass 😃

SkyAK

Есть crius aio pro v1.1, и как выше описали, наверное куплю мтк 3333 для удержания позиции и возвращения домой (поставлю вий от маховика).
Но что делать то с ОСД? У неё же свой жпс и рядом они не подружатся наверное?
И один жпс на двоих точно не вариант 😵

newdream

Господа, а не подскажете где приобрести gps на mtk 3333, ссылочку если можно. Извините за небольшой оффтоп, но…
На данный момент стоит ublox neo6m (AIOP + mahowii 3.1), спутников ловит 8-9, альманах загружал, настройки, как приведено на multiwiifaq.ts9.ru выполнял.
При включении режима gps hold начинает “уплывать в сторону китая”. Никак не хочет удерживать позицию. gps home включать пробовал, тоже абсолютно непонятное поведение. Судя по карте почему-то квадрик “прыгает” с одной позиции на другую… П.С. Режим head free вместе с баро работает хорошо…
Не подскажете, проблема кроется в модуле gps или же в чем-то ином?

SkyAK
omegapraim:

а миним осд купить не?

Эта ОСД уже три года валяется, исходя из этого, что делать то?

5yoda5
SkyAK:

Эта ОСД уже три года валяется, исходя из этого, что делать то?

Ну так - подключайте камеру, ФПВ передатчик, и летайте с двумя GPS модулями.

SkyAK:

поставлю вий от маховика

Это уже не Ардукоптер…

SkyAK
5yoda5:

Это уже не Ардукоптер…

а чем эта прошивка смущает?

Маяки разнести на раме как можно дальше?

5yoda5
SkyAK:

а чем эта прошивка смущает?

Я перепутал, думал что находимся в ветке ардукоптера…😕
Нет, не смущает ничем.

vargcop1

Друзья добрый день подскажите пожалуйта а как к Aio подключить gps приёмник и магнетометр (типа neo 8m), и не будет ли встроенный в плату магнетометр мешать?