GPS (за деньги которые я готов потратить) не даст нужной точности. Мне нужна точность относительная. Именно поэтому я хочу попробовать использовать данные с MPU 9250 для подсчета пройденного расстояния. Я знаю как это сделать теоретически. Но это высшая математика, нужно ломать голову, а мне лень. Я надеялся найти какое-то готовое решение.
Выложите плиз..Но у меня то MPU 9250... Думаю тут разберусь сам... Только как они должны быть правильно ориетированны? И где в коде выполняется коррекция? Где к примеру, отрицательные значения на положительные меняются? (или эти действия выполняются при выполнении обработки значений) Я возвращусь к моим диаграммам - к повороту вокруг Z, там и значения гироскопа можно сказать нет... У гироскопа - тоже только X и Y? Т.е. прикрепленный в файле скетч - не совсем рабочий? Там нет самого фильтра? Да к стати очень похожая логика действий в принципе..
http://x-io.co.uk/gait-tracking-with-x-imu/ Зная ускорение и время можно найти расстояние Если начальная скорость = 0, то S = (a * t^2)/2 (а * t в квадрате делить на 2) Если тело имеет начальную скорость, то находишь скорость из формулы: V = V0 + a * t а потом расстояние можно найти так S= V0 * t + (a* t^2)/2 или S =(V^2 - V0^2)/2a или S = (V+V0)* t/2
Вы полагаете что с помощью IMU датчиков можно получит лучшую точность? Если так то точно не на mpu 9250.
Прикреплю отдельным файлом, по мимо самого примера там встроен протокол обмена данными с ПК если что выбрал его т.к. тут много коментариев. Вот функция компенсации наклона на компасе она работает компенсируя проекцию вектора магнитного склонения (угол вхождения магнитного поля в землю) когда его проекция меняется с овала на эллипс (т.к. он входит по углом то и проекция соответственно становится больше и вытянутой как эллипс) но в случае с отдельными осями а не плоскостями я не знаю решения по умолчанию вам придётся думать самостоятельно мне кажется его вообще может не существовать. Код (C++): // Функция компенсации наклона датчика float tiltCompensate(Vector mag, Vector normAccel) // 2а нормализованных вектора в радианах { // Pitch & Roll float roll; // крен float pitch; // тонгаж roll = asin(normAccel.YAxis); //если функцию использовать в другом проекте сюда нужен угол в радианах а магнитометра в мили Гауссах pitch = asin(-normAccel.XAxis); if (roll > 0.78 || roll < -0.78 || pitch > 0.78 || pitch < -0.78)// при наклоне более 45град компенсация теряет эффективность функция возвращает ошибку. { return -1000; } // Some of these are used twice, so rather than computing them twice in the algorithem we precompute them before hand. // заранее определим для простоты float cosRoll = cos(roll); float sinRoll = sin(roll); float cosPitch = cos(pitch); float sinPitch = sin(pitch); // Tilt compensation сама функция компенсации float Xh = mag.XAxis * cosPitch + mag.ZAxis * sinPitch; float Yh = mag.XAxis * sinRoll * sinPitch + mag.YAxis * cosRoll - mag.ZAxis * sinRoll * cosPitch; float heading = atan2(Yh, Xh);//На выходе должен получится угол (азимут угол отложенный от северного магнитно полюса до курса вашего БПЛА ) в градусах. return heading; } Это касательно примера в верху вы же о нём спрашивали к кватернионному фильтру это не относится.
Столько информации надо переварить... Тут пришла мысль! Ведь мне необходимо просто проанализировать угол (или параметр) "указателя" на север..В чем он будет измерятся? в градусах наверное. Тем самым если проходя по пути "указатель на север" будет постоянен - то ни каких "объектов помех" - нет. Если к примеру положить магнит по пути, то числовое значение показателя изменится скачкообразно - тем самым увижу - присутствие "объекта искажающего магнитное поле" Как алгоритм? Это как раз в магнином компасе и реализовано? Правильно понимаю? Там как раз углы наклона компенсируются... Тем самым от "дрожания руки" - скачков не будет а от магнитика или железяки рядом - должно быть...Как Вам данный алгоритм? Рабочий? Теперь вопрос квантовыий фильтр он входит в код электронного компаса? Мне по сути нужен скетч -электронного компаса с компенсациями на углы наклона...Вычленю переменную отвечающую за показание "строго на север" и в диаграмму ее... А можно полный код компаса...? Где взять?
Касательно кватернионного фильтра я его сейчас сам использую для стабилизации небольшой турели а также планирую для стабилизации полёта при помощи PID т.ч. он вполне работоспособный. Как я и говорил там нужно кое что закоментировать кое что подкрутить.
Смотрите если вам искать металл компасом))) отслеживая его изменения вам придётся интегрировать а это неизбежно приведёт к ошибкам я предлагаю по другому. Берём GPS датчик и достаём headind (азимут) GPS не реагирует на наклоны но что-бы азимут показывал правильно нужно постоянно двигаться т.к. он измеряет его от текущей и предыдущей точки (по скорости пешком будет достаточно). И искать азимут с помощью магнитометра с компенсаций наклона (компас) как только они не совпадают (азимут компаса и GPS) то тут вероятно аномалия (тут же записали силу излучения считав сырые данные и найдя экспоненциальную среднюю) так и точность будет приличная и геоданные о месте аномалии сразу можно получить.
Sencis, прошу оказать помощь/консультацию по даннои теме. GPS модуль - должен приехать думаю уже на неделе.. Взамен могу Вам чего нибудь приобрести на алиэкспресс, ну или там договоримся... Что значит интегрировать?
Кватернионный фильтр возвращает готовый азимут т.е. это и есть компас по факту угол от севера на текущий курс в градусах, но на счёт компенсации при углах близких к 90 град он покажет с погрешностью в +/- 30град, это многовато но учитывая что функция компенсации наклона в принципе работает только до 45 град приемлемо в прочем при небольших наклонах и погрешность меньше только нужно его хорошенечко откалибровать (естественно там где нет ист. маг. поля совсем но в готовом виде что-бы питание уже учитывалось и его наводки а лучше вообще пред каждым запуском. ).
Искать изменения во времени т.е. отслеживать как изменялись показания пока вы шли но тут ещё придётся и очень точно идти по одному курсу иначе тоже погрешности в общем думаю с GPS самое то.
До 45 -градусов - приемлемо... Если больше, я то замечу по показаниям гироскопа и вычленю с анализа. Это не совсем понятно. Что значит точно идти по курсу? Данный курс - разнообразен, это же компас, как не поверни в горизонтальнои плоскости он будет показывать на север. Что значит строго по курсу? Но интересны оба варианта и с gps и по первоначальному варианту...
Ну тогда вам подходит и функция и фильтр, а если больше 45 функция вернёт -1000 ничего вычислять не придётся. Смотрите 1й способ мы идёт по одному курсу и смотрим как изменяются показания во времени (азимут) но если вы измените курс показания тоже изменятся так соответственно придётся более менее строго держать курс. Способ 2а с GPS не имеет такого недостатка т.к. если вы измените курс изменится и курс GPS (и он не реагирует на излучения) (а тут мы ищем несовпадения компаса и GPS) но зато остановка собьёт курс GPS т.к. он вычисляется по 2м точкам (как и скорость) в прочем мы можем исключить остановки зная скорость и ускорение. В прочем можно использовать и 2а датчика магнитометра 2й будет на удалении от объекта интереса регистрируя таким образом показания хотя если сильно излучение может затронуть и его т.ч. лучше больше датчиков больше надёжность.
Простите мою тупость, но я не понимаю термин "по одному курсу"??? Да показания магнитометра изменятся если вертеть его в двух плоскостях, но показание на север останется же? При этом учтутся наклоны .... это отвергаем....пока...(хотя идея с элементом сравнения - идея хорошая, рабочая и в других направлениях изики/химии). Данные датчики должны быть строко откалиброванны относительно друг-друга... GPS изначально хотел использовать в проекте, а если еще и можно сравнить будет азимут, наверное само то... Но если это делать в помещении , то только по первому варианту - "Отслеживания стабильности на север". Вариант с поворотом более на 90 градусов, есть идея использовать к примеру два датчика - оринтированными по разному на 90 градусов, тем самым снимать показания сначала с одного, потом с другого, понимая при этом, как сам девиас находился в пространстве...
Объясняю фильтр и функция возвращают не направление на север, а угол отложенный от севера на твоё текущее направление. Представь транспортир на 360град, теперь ноль на нём это север если ты идёшь на на ноль соответственно идёшь на север а если ты идёшь в обратную строну на юг он будет противоположен а значит 180 град так вот 180 град это угол отложенный от севера на твоё текущее направление т.е. курс или азимут. В помещении это вообще работать не будет в помещении (у меня дома) магнитометр в место севера показывает мне холодильник когда он работает))). Ну как бы фильтр и показывает ориентацию в пространстве или вы хотите ориентироваться только по магнитометру а зачем это очень шумный датчик (отсюда недостаток той функции которая работает до 45 град ещё нужен фильтр для того что-бы показания были стабильны в прочем я проверял у себя дома мож в поле они стабильнее).
Надо переварить... Но видео которое я видел, тупо на мониторе стрелка с копасом и как бы он не крутил модуль она показывала в одном направлении (а значит) его значение стабилно. Но думаю, что если поднести магнит - значение изменится стрелка на мониторе отклонится...Это ж так? А к этому все и ведется значит -есть анамалия))))))) Холодильник, батарея.... Чет вообще ни чего не понял...По этому поводу ...Шумныи - это про како датчик? Мне надо подключить код и сним поиграться... тогда в мозгах моих все устаканится... Нужно мне все это пощупать... Я как графики нарисовал в Ексельке сразу стал предствалять что к чему...Тоже самое надо поработать с фильтрами... И еще вопрос гироскоп он в дух осях работает?
Естественно ( первое попавшиеся про азимут ) . Ну магнитометр это же индукционный датчик так, соответственно любые изменения электрического или магнитного поля он регистрирует например колебания напряжения питания его самого или управляющего контроллера (там же есть дросели) и да магнитное поле земли не статическое поле магма (она же раскалённый метал формирует маг поле земли?) движется поле тоже изменяет свою силу. Гироскоп и акселерометр измеряет в 3х осях ( тонгаж, крен, рысканье).
Полностью согласен...это естественно понятно Почему на графике, когда я кручу вогруг Z - гироскоп почти не реагирует?
Если использовать скетчи и библиотеку вот от сюда и соответственно для данного модуля, а не для MPU9250, это облегчит задачу или принципиального отличия от прикрепленного Вами файла нет? А то закажу завтра...