Визуальная одометрия — метод оценки положения и ориентации робота, посредством анализа последовательности изображений, снятых установленной на нём камерой/камерами.
Пример использования визуальной одометрии:
компьютерная оптическая мышь.
В навигации, одометрия использует данные о движении актуаторов, для оценки изменения положения. Данные получают с т.н. энкодеров, которые определяют поворот колеса.
Однако, обычная одометрия не может быть применена к роботам с нестандартным типом движения(например — шагающие роботы).
К тому же, обычная одометрия страдает потерей точности, которая усугубляется при движении робота по неровной поверхности.
Визуальная одометрия — это процесс получения одометрической информации, используя последовательность изображений с камер робота. Из неё получается информация о пройденном расстоянии.
Визуальная одометрия позволяет улучшить навигационную точность роботов, любого типа передвижения и на любой поверхности.
Пример: использование визуальной одометрии на американских марсоходах.
Стандартный алгоритм визуальной одометрии:
1. получение изображения с камеры/стереокамеры/всенаправленных камер
2. Коррекция изображения (устранение дисторсии и т.п.)
3. Детектирование ключевых точек изображения:
1) детектирование ключевых точек (например — метод Лукаса-Канаде (Lucas–Kanade));
2) сравнение точек между кадрами;
3) построение оптического потока.
4. Проверка векторов оптического потока на потенциальные ошибки, отбрасывание выбросов (outliers)
5. Определение движения камеры из оптического потока:
вариант 1: используя фильтр Калмана
вариант 2: определяя геометрические и 3D -свойства точек, для минимизации целевой функции, основанной на минимизации ошибки проекции между двумя смежными кадрами.
6. Периодическое обновление набора ключевых точек для отслеживания.
Оптический поток — это изображение видимого движения объектов, поверхностей или краёв сцены, получаемое в результате перемещения наблюдателя (камеры) относительно сцены.
На анализе движения объектов (поверхностей и краёв), построены многие алгоритмы компьютерного зрения:
регистрация движения, сегментация объектов, кодирование движений, подсчет отличия (диспаритета) в стерео-зрении.
Практический пример использования визуальной одометрии:
обычная оптическая мышка
Принцип работы оптических мышек был разработан в лаборатории корпорации Hewlett-Packard (подразделение Agilent Technologies).
Оптическа мышка по-настоящему видит; при помощи светодиода(лазера), свет через систему фокусирующих свет линз, подсвечивает под мышью участок поверхности.
Свет отражается от этой поверхности и собирается другой линзой, после чего попадает на приёмный сенсор микросхемы.
Т.о. мышка делает снимки поверхности под собой, причём с очень высокой частотой (несколько кГц).
Обработка картинки происходит в той же микросхеме оптического сенсора.
Т.о., микросхема мышки содержит две важных части:
1. Image Acquisition System (IAS) — систему получения изображения
2. DSP — сигнальный процессор для обработки снимков.
Один кадр мышки — это картинка порядка 16×16 с 64 градациями серого (размер, частота обновления и палитра картинки зависят от типа микросхемы).
Анализируя последовательность этих снимков (скорее всего, используется кросс-корреляция), DSP определяет направление и дистанцию перемещения мышки по осям Х и Y.
Результаты передаются наружу по последовательному интерефейсу.
Теперь легко понять, что важной проблемой разработки подобных систем являются:
1. монотонные изображения
при использовании оптической мыши на поверхностях с повторяющимся мелким рисунком, процессор обработки изображений может путать похожие участки изображения и из-за этого неверно определять направление перемещения мыши.
2. скорость работы
при слишком быстром перемещении, сенсор мышки не может отследить связь между последовательностью снимков поверхности.
последняя проблема решается увеличением частоты снимков (почти до десятка кГц)
Пример визуальной одометрии в ROS, можно найти в стеке
vslam.
Однако, чтобы получать сообщения с данными визуальной одометрии, придётся отредактировать код:
VSLAMDIR/vslam_system/src/nodes/stereo_vslam_node.cpp
и в строчке (159)
if (0) // TODO: Change this to parameter.
заменить 0 на 1
Пересобираем пакет и получаем результат:
в Топике «/vo» будут публиковаться сообщения типа nav_msgs/Odometry
Видео
Correlation-based Visual Odometry for Ground Vehicles
LIBVISO: Feature Matching for Visual Odometry
Ссылки
http://en.wikipedia.org/wiki/Visual_odometry
http://ru.wikipedia.org/wiki/Оптический_поток
Maimone, M.; Cheng, Y.; Matthies, L. (2007). «Two years of Visual Odometry on the Mars Exploration Rovers». (PDF)
Оптические мышки
С точки зрения оптических мышей…
Сенсор из оптической мыши
Получаем изображение с оптического сенсора комьютерной мыши с помощью Arduino
Arducopter Optical Flow Sensor
Программирование
LIBVISO: Library for VISual Odometry
0 комментариев на «“Визуальная одометрия”»
Знакомая тема, еще подобную оценку можно сделать при помощи кросс-корреляции, я делал подобное в labview. Там можно сделать сравнение двух обработанных кадров по их матрицам (точки, например это 1, а 0 — пустая область), продуктом кросс-корреляции будет та же матрица, в которой максимум будет отвечать за направление вектора скоростей. И возможно он даже проще. Единственным нюансом, является небольшая область выборки. При кросс-корреляции рекомендуют использовать оценку движение от 5 до 12 точек, соответственно малый кадр получается, однако при интенсивной обработке это вполне сгодиться.
И кстати, в догонку, обрабатывать можно и кадры, полученные после обработки в OpenCV, ведь кросс-корреляция работает на взаимное положение объектов друг относительно друга.