Визуальная одометрия



Визуальная одометрия — метод оценки положения и ориентации робота, посредством анализа последовательности изображений, снятых установленной на нём камерой/камерами.

Пример использования визуальной одометрии:
компьютерная оптическая мышь.

В навигации, одометрия использует данные о движении актуаторов, для оценки изменения положения. Данные получают с т.н. энкодеров, которые определяют поворот колеса.
Однако, обычная одометрия не может быть применена к роботам с нестандартным типом движения(например — шагающие роботы).
К тому же, обычная одометрия страдает потерей точности, которая усугубляется при движении робота по неровной поверхности.

Визуальная одометрия — это процесс получения одометрической информации, используя последовательность изображений с камер робота. Из неё получается информация о пройденном расстоянии.

Визуальная одометрия позволяет улучшить навигационную точность роботов, любого типа передвижения и на любой поверхности.

Пример: использование визуальной одометрии на американских марсоходах.

Стандартный алгоритм визуальной одометрии:
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

По теме
Энкодер
Одометрия
SLAM


0 комментариев на «“Визуальная одометрия”»

  1. Знакомая тема, еще подобную оценку можно сделать при помощи кросс-корреляции, я делал подобное в labview. Там можно сделать сравнение двух обработанных кадров по их матрицам (точки, например это 1, а 0 — пустая область), продуктом кросс-корреляции будет та же матрица, в которой максимум будет отвечать за направление вектора скоростей. И возможно он даже проще. Единственным нюансом, является небольшая область выборки. При кросс-корреляции рекомендуют использовать оценку движение от 5 до 12 точек, соответственно малый кадр получается, однако при интенсивной обработке это вполне сгодиться.

  2. И кстати, в догонку, обрабатывать можно и кадры, полученные после обработки в OpenCV, ведь кросс-корреляция работает на взаимное положение объектов друг относительно друга.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение