Приветствую!
Задача чем-то очень похожа на ту, что решает обычный автомобильный навигатор, но я не очень хорошо знаю, как он работает.
У меня есть серия измерений географических координат автомобиля с таймстемпами. И надо по ним построить истинный маршрут. Измерения могут быть сильно неточными, никаких показаний акселерометров и других датчиков нет. Как обычно строится истинный маршрут? Сразу напрашивается фильтр Калмана, но сходу не смог найти подходящий именно для автомобиля. Есть фильтры для смешивания разных данных, аля автопилот. Но мне кажется, что моя задача ближе к автомобильному навигатору. Но там тоже много вопросов:
1. Используют ли навигаторы ИНС? Ведь в телефоны встроены акселерометры, гироскопы и другие датчики, показаний которых у меня нет.
2. Использует ли навигатор данные карты для уточнения маршрута? Очевидно да, ведь автомобиль не ездит по крышам домов, а насильно переносится на ближайшую дорогу. А если машина ездит по полю или гоняет по площадке?
Кажется, что мне нужен всё таки какой-то Калман, в который можно передавать наверное не географиические координаты, а координаты в метрической системе (метры и секунды), это будут 3D координаты в пространстве (высота тоже), но в какой-то евклидовой системе координат. При этом модель должна учитывать физическую модель автомобиля (масса, инерция, радиусы поворота). Как-то с полпинка не могу понять, что начинать читать по этой теме. То есть не в целом про фильтра Калмана (если это именно он будет), а конкретно про автомобили (саомлёты, корабли — но тут тоже явно будет больше данных).
P.S. Пока нашёл опенсурсный навигатор и начал копаться в его исходниках.
N>Кажется, что мне нужен всё таки какой-то Калман, в который можно передавать наверное не географиические координаты, а координаты в метрической системе (метры и секунды), это будут 3D координаты в пространстве (высота тоже), но в какой-то евклидовой системе координат. При этом модель должна учитывать физическую модель автомобиля (масса, инерция, радиусы поворота). Как-то с полпинка не могу понять, что начинать читать по этой теме. То есть не в целом про фильтра Калмана (если это именно он будет), а конкретно про автомобили (саомлёты, корабли — но тут тоже явно будет больше данных).
Калман, Калман, родимый — он позволяет внутрь физическую модель заложить. Но придется писать самому его с пониманием многого в физике и физических моделях.
И напомню, что Калман работает только с гауссовым шумом.
Здравствуйте, Nuzhny, Вы писали:
N>Приветствую! N>Задача чем-то очень похожа на ту, что решает обычный автомобильный навигатор, но я не очень хорошо знаю, как он работает.
Я на низком уровне по работе возился с навигаторами (железом и прикладным самописным в конторе софтом не автомобильного направления, но алгоритм, думаю, одинаков), они 20-30 раз в секунду запрашивают у железяки координаты и вычисляют арифметическое среднее и 1-2 раза в секунду выдавая результат. Вычисления несложные, сложнее парсить пакеты от спутника. Тот софт, про который говорю, более высокого уровня, кушает уже подготовленные данные после аппаратной части.
M>Я на низком уровне по работе возился с навигаторами (железом и прикладным самописным в конторе софтом не автомобильного направления, но алгоритм, думаю, одинаков), они 20-30 раз в секунду запрашивают у железяки координаты и вычисляют арифметическое среднее и 1-2 раза в секунду выдавая результат. Вычисления несложные, сложнее парсить пакеты от спутника. Тот софт, про который говорю, более высокого уровня, кушает уже подготовленные данные после аппаратной части.
Жестко. Но если удовлетворяет заказчиков, то почему и нет.
За секунду авто 30 м проезжает.
Здравствуйте, Vzhyk2, Вы писали:
V>Жестко. Но если удовлетворяет заказчиков, то почему и нет. V>За секунду авто 30 м проезжает.
Это была тестовая софтина для разрабатываемого навигационного железа. Чаще в окне и логе координаты показывать не было смысла. Там тема была проверить работает ли и правильные координаты выдаёт. Ну и чем реже выдаёшь, тем точнее усреднение.
Здравствуйте, Vzhyk2, Вы писали:
V>Калман, Калман, родимый — он позволяет внутрь физическую модель заложить. Но придется писать самому его с пониманием многого в физике и физических моделях.
Не хочется писать самому физическую модель и набивать все шишки. казалось бы, задача популярная в современных реалиях и уже решена в более сложных формулировках.
N>Не хочется писать самому физическую модель и набивать все шишки. казалось бы, задача популярная в современных реалиях и уже решена в более сложных формулировках.
В инете есть много упрощенных решений. Ты же описал ее почти полностью и придется или по статьям тебе рыскать, где ее уже решили или самому разобраться и написать.
Собственно, когда ты написал систему уравнений для Калмана, там всё просто и механически дальше. Самое сложное ее правильно написать для задачи — это серьезная работа (связанная с физикой).
Я вот в калмановских фильтрах более ни менее разбираюсь, но расписать твою задачу займет у меня недели две времени и логично, что без приличной оплаты я и браться не буду. А потом еще проверить, что правильно написал и отладить.
Здравствуйте, Nuzhny, Вы писали:
N>У меня есть серия измерений географических координат автомобиля с таймстемпами. И надо по ним построить истинный маршрут. N>2. Использует ли навигатор данные карты для уточнения маршрута? Очевидно да, ведь автомобиль не ездит по крышам домов, а насильно переносится на ближайшую дорогу. А если машина ездит по полю или гоняет по площадке?
N>P.S. Пока нашёл опенсурсный навигатор и начал копаться в его исходниках.
Для навигатора ближайший аналог — map matching по координатам (можно в каком-нибудь открытом движке роутинга посмотреть, например, valhalla, graphhoper, osrm). Но для поля или площадки оно не сработает, только для месте где к графу дорог притянуться можно.
V>>За секунду авто 30 м проезжает. П>Обычные навигаторы раз в секунду шпарят. Для авиации — 10 раз в секунду.
Шел бы ты в Политику. Тут слишком сложный для тебя вопрос задан.
Здравствуйте, Vzhyk2, Вы писали:
V>>>За секунду авто 30 м проезжает. П>>Обычные навигаторы раз в секунду шпарят. Для авиации — 10 раз в секунду. V>Шел бы ты в Политику. Тут слишком сложный для тебя вопрос задан.
Не получится использовать RTK или A-GPS, чтобы сразу иметь координаты подходящей точности? Или измерения проведены и это принципиально пост-процессинг?
Здравствуйте, Alekzander, Вы писали:
A>Не получится использовать RTK или A-GPS, чтобы сразу иметь координаты подходящей точности? Или измерения проведены и это принципиально пост-процессинг?
Эти измерения производятся камерой, установленной сверху и наблюдающей автомобили
N>Эти измерения производятся камерой, установленной сверху и наблюдающей автомобили
Кстати я невнимательно тебе прочитал выше. Много текста, старенький уже.
Ты же делаешь просто треккер по видео.
В этом случае проще LSTM сетку натянуть на выход распознающей сетки, затем простейшего Калмана для сглаживания прилепить (простейших море в инете и сразу в питоне уже реализованных и под любое железо).
Идеальнее будет, если добавишь еще распознавание зданий, дорог с известными координатами (координаты у гугла есть) и по ним будешь корректировать выход сетки (ну чтобы в здание не въехать).
Здравствуйте, Nuzhny, Вы писали:
A>>Не получится использовать RTK или A-GPS, чтобы сразу иметь координаты подходящей точности? Или измерения проведены и это принципиально пост-процессинг?
N>Эти измерения производятся камерой, установленной сверху и наблюдающей автомобили
N>2. Использует ли навигатор данные карты для уточнения маршрута? Очевидно да, ведь автомобиль не ездит по крышам домов, а насильно переносится на ближайшую дорогу. А если машина ездит по полю или гоняет по площадке?
Карты естественно используются, но и сами дороги на картах уточняются используя статистику с навигаторов.
Здравствуйте, Nuzhny, Вы писали: N>1. Используют ли навигаторы ИНС? Ведь в телефоны встроены акселерометры, гироскопы и другие датчики, показаний которых у меня нет.
Насчет навигаторов на скажу, но скорее всего нет либо опционально еще и дополняя информацией сотовых операторов если в телефоне.
Почему? Потому ,что информацию о скорости, высоте над уровнем моря, направлении, точном местоположении,точном времени выдает большинство модулей GPS/GLONASS,но сами модули вычисляет все это на разности измерений по времени.
Здравствуйте, Nuzhny, Вы писали:
N>1. Используют ли навигаторы ИНС? Ведь в телефоны встроены акселерометры, гироскопы и другие датчики, показаний которых у меня нет.
Да, но из-за точности ИНС его можно использовать очень недолго без наличия GPS. То есть в длинном тунеле,
надежнее с помощью карты "притягивать" машину назад на трассу, чем интегрировать ускорения и прочие данные от ИНС телефона.
N>Кажется, что мне нужен всё таки какой-то Калман, в который можно передавать наверное не географиические координаты, а координаты в метрической системе (метры и секунды), это будут 3D координаты в пространстве (высота тоже), но в какой-то евклидовой системе координат.
Как среди координат затесались секунды?
В GPS/GLONASS используются две системы координат: широта, долгота, высота на эллипсоидом (или геоидом),
и обычная ортонормированная система, с началом координат в центре земли, с осью Z проходящей через северный полюс,
и XY лежащих в плоскости экватора. И есть даже ГОСТ с формулами перевода из одной в другую.
Но использование ортонормированной системы координат, особо никак не поможет с тем фактом, что машина едет
по приплюснутой сфере. Можно конечно использовать какую-нибудь "местную" проекцию, то есть приблизить
трехмерную часть эллипсоида двухмерной плоскостью, если поездка не наполстраны, то погрешность по идее будет не очень большая.
Здравствуйте, paradok, Вы писали:
N>> Сразу напрашивается фильтр Калмана, P>а чем он лучше обычной физ. модели по типу как моделируют машинки в Unity 3D ? (там физ движок из коробки)
Он не лучше, он включает в себя физ модель. Задача ставится таким образом: в реальном времени идёт поток неточных координат, на выходе надо получить реальный путь автомобиля. Просто в физ. модель шумные данные подавать нельзя, фильтр Калмана как раз позволяет по известному шуму и шумным измерениям подобрать параметры для известной физической модели.
Здравствуйте, Nuzhny, Вы писали:
Гугли Visual-Inertial-Odometry там с GNSS разжевано как работать. N>P.S. Пока нашёл опенсурсный навигатор и начал копаться в его исходниках.
Есть два подхода -- либо фильтрация, либо регрессия (оптимизация на фактор графе)
1) Первый это калман и различные нашлепки, если есть еще данные (OpenVINS)
2) Второй, если отбросить умные слова, решение задачи МНК с весами, соответствующими начальным неточностям твоих измерений (GT-SAM/ORB-SLAM если лень копаться) + факторы, которые описывают твою модель физическую
Можно показать, что Калман с моделью постоянного / минимального ускорения это первая итерация 2) подхода, поэтому они в целом схожи, но первое побыстрее, второе поточнее.
N> Просто в физ. модель шумные данные подавать нельзя
можно. Делается в юнити модель реальных машин (которые в теории по видео камере ИИ различит)
эта модель вполне адекватна реальности (может быть сделана) — в этом легко убедиться поиграв в разные машинки типа формулы 1 и гта-5 м тд
у модели есть руль масса мощность мотора — водитель с определенной реакцией и скоростью кручения руля и нажатия на газ и торомз
Ну и машина может ехать согласно своей физики, а зашумленные отсчеты можно подавать типа это желания водителя так ехать,
а нейронка водителя это преобразует в в кручение руля и нажатия газ-тормоз
Здравствуйте, paradok, Вы писали:
P>у модели есть руль масса мощность мотора — водитель с определенной реакцией и скоростью кручения руля и нажатия на газ и торомз
Мне понятно, что надо делать физическую модель. Но не понятно, как в неё подавать шумные данные.
P>Ну и машина может ехать согласно своей физики, а зашумленные отсчеты можно подавать типа это желания водителя так ехать, P>а нейронка водителя это преобразует в в кручение руля и нажатия газ-тормоз
По факту же не надо ехать туда, где нейронка засекла автомобиль, потому что эти данные в целом шумные. Автомобиль едет где-то около, минимизируя погрешности измерения с учётом своей физической модели. Такая модель в упрощённом виде закладывается в Калмана. То есть Калман для бабочки и автомобиля должен быть разным. Бабочка может реально находиться там, где её нашли. С автомобилем из-за массы, инерции и других особенностей такого не получится.
Здравствуйте, Alekzander, Вы писали: N>>Эти измерения производятся камерой, установленной сверху и наблюдающей автомобили A>А это разве законно?
кмк, камера стоит на беспилотнике, а автомобили — это танки и прочие бмп.
Здравствуйте, Nuzhny, Вы писали:
N>Кажется, что мне нужен всё таки какой-то Калман, в который можно передавать наверное не географиические координаты, а координаты в метрической системе (метры и секунды), это будут 3D координаты в пространстве (высота тоже), но в какой-то евклидовой системе координат. При этом модель должна учитывать физическую модель автомобиля (масса, инерция, радиусы поворота). Как-то с полпинка не могу понять, что начинать читать по этой теме. То есть не в целом про фильтра Калмана (если это именно он будет), а конкретно про автомобили (саомлёты, корабли — но тут тоже явно будет больше данных).
Здравствуйте, 3R, Вы писали:
3R>кмк, камера стоит на беспилотнике, а автомобили — это танки и прочие бмп.
Так было бы проще, хотя казалось бы. Стационарные камеры на дорогах чаще ставят кое какие, с дикой дисторсией, на замену и калибровку денег нет и желания тоже.
С кратерами всё легко: классные камеры, собственные ГНСС, ИНСС и другие плюшки. Поэтому есть конторы, которые привязывают к коптер к проводу питания, поднимают над перекрестком и мониторят траффик.
При этом камера смотрит под острым углом и автобусы с грузовиками перекрывают других участников. А камера с костре смотрит вниз ближе к вертикали. И нормальный трекинг для стационарной камеры сделать сложнее, при том что он ещё и важнее.
N>Мне понятно, что надо делать физическую модель. Но не понятно, как в неё подавать шумные данные.
Я бы начал с самой простой, реализация которой в виде Калмана стадами в инете и в готовых либах. А после уже добавлял по необходимости другие параметры в модель и усложнял ее.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, paradok, Вы писали:
P>>у модели есть руль масса мощность мотора — водитель с определенной реакцией и скоростью кручения руля и нажатия на газ и торомз
N>Мне понятно, что надо делать физическую модель. Но не понятно, как в неё подавать шумные данные.
Ты кстати, учти, что калман он работает относительно неплохо только для определенного класса шумов (либо нормально распределенные, либо без тяжелых хвостов), любое отклонение приведет либо к смещенной оценке, либо просто калман разойдется. Когда с итеративными методами, ты можешь позволить путем развесовки измерений приводит их распределение к тому, которое тебе надо.
N>>Мне понятно, что надо делать физическую модель. Но не понятно, как в неё подавать шумные данные.
да вроде просто, очередная новая точка — это цель куда водитель хочет ехать. Туда он будет крутить руль
и газовать, а физ модель все остальное отработает и сгладит.
И физ модель машины не может разойтись или развалится, максимум она не сможет за отведенное время доехать
то точки — ну дык это и есть сглаживание
Здравствуйте, paradok, Вы писали:
P>да вроде просто, очередная новая точка — это цель куда водитель хочет ехать. Туда он будет крутить руль P>и газовать, а физ модель все остальное отработает и сгладит. P>И физ модель машины не может разойтись или развалится, максимум она не сможет за отведенное время доехать P>то точки — ну дык это и есть сглаживание
Там немного не так работает. Например, точки идут достаточно точно на дороге каждые 30 млсек. Потом машина начинает заезжать за грузовик, нейронка отрабатывает кривовато и может так оказаться, что несколько кадров подряд очки будут выдаваться на одном месте, хотя машина не меняет ни скорость, ни траекторию. Или резко перепрыгнет на соседнюю полосу, когда нижняя часть двухэтажного автобуса будет не видна. Рулить в ту сторону не надо — это просто шумные измерения. Простой Калман туда вильнет с задержкой. Калман с хорошей физ моделью может сделать это плавнее, а совсем кратковременные "прыжки" вовсе проигнорирует. Можно пробовать использовать МНК с выболсами, как советует denisko, он часть шума вовсе проигнорирует. Я пока экспериментирую с фильтрами.
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, paradok, Вы писали:
P>>да вроде просто, очередная новая точка — это цель куда водитель хочет ехать. Туда он будет крутить руль P>>и газовать, а физ модель все остальное отработает и сгладит. P>>И физ модель машины не может разойтись или развалится, максимум она не сможет за отведенное время доехать P>>то точки — ну дык это и есть сглаживание
N>Там немного не так работает. Например, точки идут достаточно точно на дороге каждые 30 млсек. Потом машина начинает заезжать за грузовик, нейронка отрабатывает кривовато и может так оказаться, что несколько кадров подряд очки будут выдаваться на одном месте, хотя машина не меняет ни скорость, ни траекторию.
вам стоит поиграться с моедлями машинок в Unity3D — там ничего подобного не происходит, там машина продолжит движение даже когда данные не поступают, на то она и физ модель!
ситуация дырок в данных — это стандартная хорошо проработанная ситуация — в сетевых многопользовательских играх так всегда и есть
>>Или резко перепрыгнет на соседнюю полосу,
нет, модели машин в Unity3D так не делают
1) Рулить в ту сторону не надо — это просто шумные измерения.
2) Простой Калман туда вильнет с задержкой.
вывод — ФК работает неоптимально
И вы не можете знать то шумное измерение или реально машина поехала туда.
Чтобы это понять надо сделать прогноз, расчет движение в будущем моедли машины — исходя из ее физ модели сможет ли она отсюда туда зарулить или нет.
Если нет — это шум, если да то вероятно надо все же туда рулить
Здравствуйте, paradok, Вы писали:
P>вам стоит поиграться с моедлями машинок в Unity3D — там ничего подобного не происходит, там машина продолжит движение даже когда данные не поступают, на то она и физ модель!
То есть я буду говорить ей ехать влево, но она не поедет? Или затормозить, но она не затормозит? Почему?
P>нет, модели машин в Unity3D так не делают
Не прыгнет, но команда ехать в ту сторону пойдёт или нет?
P>вывод — ФК работает неоптимально
Разумеется. Он только для определённого вида шума нормально работает.
P>И вы не можете знать то шумное измерение или реально машина поехала туда. P>Чтобы это понять надо сделать прогноз, расчет движение в будущем моедли машины — исходя из ее физ модели сможет ли она отсюда туда зарулить или нет. P>Если нет — это шум, если да то вероятно надо все же туда рулить
Это я понимаю, тут всё стандартно и ничего нового. Не понимаю, почему команда "повернуть налево" будет игнорироваться физ моделью. Каким механизмом?
P>>И вы не можете знать то шумное измерение или реально машина поехала туда. P>>Чтобы это понять надо сделать прогноз, расчет движение в будущем моедли машины — исходя из ее физ модели сможет ли она отсюда туда зарулить или нет. P>>Если нет — это шум,и ехать туда не надо, если да, туда можно доехать за данное время с параметрами физ модели и начальными условиями — то вероятно надо все же туда рулить
N> Не понимаю, почему команда "повернуть налево" будет игнорироваться физ моделью. Каким механизмом?
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, paradok, Вы писали:
P>>механизм описан выше
N>Это не механизм, а общие слова. Потому что примитивный линейный Калман так и работает, в котором в принципе может не быть физической модели.
а Калман точно линейный? Вроде он ускорение учитывает, а это a*t^2
Здравствуйте, paradok, Вы писали:
P>а Калман точно линейный? Вроде он ускорение учитывает, а это a*t^2
Линейный Калман тоже умеет в ускорение, если матрицу правильно задать, но там появляется много степеней свободы, сложно с погрешностями. У меня в итоге работало хуже, чем без него. Видел где-то на презентации Теслы более сложную модель, по которой они прогнозируют движение наблюдаемых автомобилей, но там совсем другой уровень, мне не дотянуться
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, paradok, Вы писали:
P>>а Калман точно линейный? Вроде он ускорение учитывает, а это a*t^2
N>Линейный Калман тоже умеет в ускорение, если матрицу правильно задать, но там появляется много степеней свободы, сложно с погрешностями. У меня в итоге работало хуже, чем без него. Видел где-то на презентации Теслы более сложную модель, по которой они прогнозируют движение наблюдаемых автомобилей, но там совсем другой уровень, мне не дотянуться
ну что ж — моё предложение такое —
1) каждый новый отсчет (и не важно шумовой и нешумовой) координат рассматривать как указание физ модели туда двигаться.
2) с учётом физ. ограничений модели, масса, мотор, руль, реакция чел, допустимые ускорения и тд. — проверяем в зоне досягаемости ли данный новый отсчет координат
3) если вне зоны досигаемости модели — то туда не рулим и вообще никак не реагируем, едим по инерции, с прежним газом и прежним углом руля
4) если в зоне досягаемости — едем туда
5) если не в зоне досягаемости но блико к ней, то едем по инерции ожидая следующего отсчета и если он тоже близко но вне, то усредняем два отсчета вне, сдвигаем к ближайшей
границе досягаемости и рулим туда. (кол-во отсчетов для усреднения — вопрос моделирования на реальных данных)
Здравствуйте, Nuzhny, Вы писали:
N>Задача чем-то очень похожа на ту, что решает обычный автомобильный навигатор, но я не очень хорошо знаю, как он работает. N>У меня есть серия измерений географических координат автомобиля с таймстемпами. И надо по ним построить истинный маршрут. Измерения могут быть сильно неточными, никаких показаний акселерометров и других датчиков нет.
Главное забыл. У тебя коордитаны с оценками точности или просто значения? В первом случае — тупо сглаживание сплайнами, во втором — можно и Калмана, но лучше RTS smoother.