GPS-приемники для квадрокоптеров
Господа форумчане, подскажите пожалуйста, такой модуль GPS стоит брать для AIOP v2 с маховиком на борту?
www.aliexpress.com/item/…/32366818254.html
Взял модуль ublox 6m, но косячный он до боли, то есть 3d fix, то нет…
И компас штатный наводок дает очень много, при включении удержания по gps начинает колбасить и улетать в сторону китая… Думаю решить эту проблему neo7m с отдельным компасом на борту.
Господа форумчане, подскажите пожалуйста, такой модуль GPS стоит брать для AIOP v2 с маховиком на борту?
если не ошибаюсь Дмитрий Котвицкий свой модуль на чипсете медиатек 3333 с антенной 35*35мм как раз для этого контроллера с прошивкой делал
поддержу тезку. ИМХО для маховика мтк3333 самое оно с его фильтрацией и точностью.
Спасибо за ответы, друзья!
собираюсь в отпуск, есть задумка в этот период нарисовать в коде ардукоптера 3.2 программный фильтр позиции под медиатек.
помощь в программировании и обсуждении алгоритма приветствуется. )
пока задумка такая
- округленная позиция по широте и долготе на основе накопления N количества сэмплов c выводом настройки глубины этого фильтра в параметр.
но если этот праметр оставить единственным то при движении округленная позиция будет отставать от реальной поэтому вторая переменная средняя скорость точки за аналогичный период - назовем ее динамическая ошибка. где средняя динамическая ошибка по широте и долготе = накопление разницы между средней позицией и свежим сэмплом.
соответственно прогнозируемая позиция это средняя позиция + средняя динамическая ошибка. - при превышении скорости скажем 10кмч можно уменьшать глубину фильра а при больших скоростях использовать сырые данные в качестве актуальной позиции
а инерциалку в ардукоптере вырублю. должно получиться гораздо стабильнее на мелких аппаратах с сильным уровнем вибраций
кто со мной?
округленная позиция будет отставать от реальной
хмм…
если мне не изменяет память… в 3333 как раз категорически фильтр не нужен, т.к. он выдает уже отфильтрованные значения (у меня с маховием была как раз проблема с отставанием-унитазингом, пока фильтр не вырубил).
или же речь идет об 3333 с отключенным фильтром?
да, у меня прошивка навигационного модуля с отключенным по умолчанию встроенным в навигационный модуль фильтром.
скачать ее, тулзу и лоадер можно тут files.msdatabase.ru/gps (снизу, в аттачах)
Очень точно и честно показывает координату. точки кучно бьют в метр но если инерциалку в ардукоптере отключить квадрик начинает “гонять муху” в этом метре (TC_XY = 0,5) инерциалка в ардукоптере хорошо работает на больших аппаратах с хорошо подавленными вибрацими - на мелких и в случае вибраций случаются неприятности.
хотелось бы сделать прошивку ардукоптер надежной и менее зависимой от вибраций
собственно время подходящее - новых прошивок для АПМ от дидронесов больше не ожидается
вот немножко в коде идея
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 ;
Задумка очень интересная. Однако становится вопрос - как оно будет держать позицию при порывистом ветре?
При внесении фильтра, пусть и с экстраполяцией значений, все равно будет вносится задержка обнаружения реальной позиции. Чтобы с отключенной инерциалкой коптер нормально держал позицию - нужно загрублять реакцию на gps (loiter P, верно?), иначе, если задержка измерений будет превышать скорость реакции, может возникнуть унитазинг/колебания вокруг позиции.
При таких настройках и без инерациалки, аппарат только так будет носить резким ветром.
Предложенная экстраполяция значения по оценке средней ошибки, скорее всего, не сможет скомпенсировать задержку, новый семпл будет стоять далеко от предыдущих, и прогнозируемая по средней динамической ошибке позиция будет отличаться от реальной. А если не делать прогнозов и просто устреднять, то разница будет еще больше. Стоит обдумать этот момент, например внести быстрый критерий отключения фильтра, и его оценка должна быть не по средней скорости движения коптера.
В таком случае, на помощь как раз может прийти инерциалка. Критерий отключения и/или изменения глубины фильтра gps можно оценивать с ее помощью, ведь она быстрее всего отрабатывает возмущения.
Таким образом, мне кажется, стоит делать динамический фильтр, глубина и нахождение средней динамической ошибки которого должна производится по следующий критериям:
1 При скорости около нуля, инерциалку полностью не отключать, а проверять ее значения по свежим семплам gps, фильтр делать малой глубины. (Этот момент надо обдумать, возможно стоит начинать сразу с пункта 2)
2 При скорости ниже определенного уровня но выше “условно нулевой” отключать инерциалку, смотреть усредненное абсолютное значение ускорения (так можно снизить влияние вибраций), и при превышении им определенного значения снижать глубину фильтра (возможно сделать несколько градаций), или пропорционально увеличивать значение “средней динамической ошибки”. Так можно получить и точные усредненные координаты, и хорошую динамическую реакцию.
3 При скорости выше некоторого уровня, делать фильтр минимальной глубины, или вообще убирать его.
Описание несколько сумбурно, надеюсь суть ясна.
под инерциалку “против порывов ветра” есть другая задумка, о ней подробно чуть позже.
вкратце очень простой код транслирующий любое ускорение по Х в целевой угол по питчу препятствующий ускорению (а Y по ролу) (независимо от природы ускорения - ветер, действия пилота или автопилота) регистрируемые ускорения должны быть адаптивными и иметь малое время жизни. теость ну посопротивлялся пару секунд стойкому воздействию по определенному вектору - ну нет так нет и запомнил что это ускорение нормально
простота должна обеспечить столь важную нам безотказность.
при простом алгоритме мы не наткнемся на неконсистентность матриц ориентации из которых при высокочастотных вибрациях вылезают ошибочные вектора ускорений
Он должен быть из немагнитного материала и никак не влиять на компас. Его можно отпаять, уверен значения будут те-же.
На BN-880 припаян алюминиевый экран.
Чтобы с отключенной инерциалкой коптер нормально держал позицию - нужно загрублять реакцию на gps (loiter P, верно?), иначе, если задержка измерений будет превышать скорость реакции, может возникнуть унитазинг/колебания вокруг позиции.
да, желательно, пропорциональный или рэйт. иначе и есть эффект который я в шутку зову “гоняет муху в радиусе метра”
собственно суть умного округления в том чтобы не уменьшать пиды лоитера
Мужики, какой лучше брать жпс
из этих моделей есть достойный :
N8M c EEPROM и LNA
напишите конкретно модель.
Я поискал и приметил такие
на фото
И второй вопрос накрылся
стабилизатор на gps
но без схемы понять какой используется не понятно.
заменил на такой MIC5205-3.3YM5 150mA 3.3V CMOS Low Iq Low-Dropout Voltage Regulator не заработал . На выходе нет питания.
Может кинете ссылку на схему ublox lea-6h чипа
если не ошибаюсь Дмитрий Котвицкий свой модуль на чипсете медиатек 3333 с антенной 35*35мм как раз для этого контроллера с прошивкой делал
Всем доброго времени !
Алексей (alexeykozin) а Ваши модули (просто он у меня есть, брал F4BY) на чипсете медиатек 3333, не пойдут для работы с контроллером AIOP v2 с маховиком ? (контроллер идёт, пока разбираюсь)
Заранее спасибо !
подойдут но со стандартной прошивкой.
И в маховие надо будет коре что подправить в коде.
multiwiifaq.ts9.ru/glonass-gps.html
Всем доброго времени !
такой GPS и компасом хороший стоит брать ?
Может брать такой ссылка Mini uBlox M8N GPS GLONASS W/ (35x35mm) Mounting backplane and Compass V2
вот тоже ломаю голову. В чистом поле ХК Lea6h работает отлично. Коптер висит как прибитый. А при полетах возле зданий - спутники пропадают. Раз вообще словил FS по GPSу.
Ломаю голову на что проапгрейдиться. ХК козлы не ставят LNA в GPS. Возможно из за этого спутники теряются. Усугубляет то что 3DR предлагают конфиги для 6 и 7 серии. На 8ю серию конфига нету, то есть официально как я понимаю оно не поддерживается. Соответственно танцы с бубном. Наверное все же 7ю серию с LNA закажу… Хотя конечно хочется GPS+Glonass 😃
Есть crius aio pro v1.1, и как выше описали, наверное куплю мтк 3333 для удержания позиции и возвращения домой (поставлю вий от маховика).
Но что делать то с ОСД? У неё же свой жпс и рядом они не подружатся наверное?
И один жпс на двоих точно не вариант 😵
а миним осд купить не?
Господа, а не подскажете где приобрести gps на mtk 3333, ссылочку если можно. Извините за небольшой оффтоп, но…
На данный момент стоит ublox neo6m (AIOP + mahowii 3.1), спутников ловит 8-9, альманах загружал, настройки, как приведено на multiwiifaq.ts9.ru выполнял.
При включении режима gps hold начинает “уплывать в сторону китая”. Никак не хочет удерживать позицию. gps home включать пробовал, тоже абсолютно непонятное поведение. Судя по карте почему-то квадрик “прыгает” с одной позиции на другую… П.С. Режим head free вместе с баро работает хорошо…
Не подскажете, проблема кроется в модуле gps или же в чем-то ином?
а миним осд купить не?
Эта ОСД уже три года валяется, исходя из этого, что делать то?