ОКСО из веб-камеры

16 апреля

На сайте установлен Orphus. Если вы обнаружили ошибку,то выделите её и нажмите CTRL+ENTER

ОКСО – определение координат снимаемых объектов.

Это небольшая система, которая позволяет определить координаты и «скорость» снимаемого объекта на веб камеру.

Узнал, что существуют подобные системы и решил сделать нечто своё. Но так так бюджет у меня ограничен и делается исключительно ради интереса, то и реализация крайне простая и бюджетная :D .

Идея крайне простая: зная свои координаты (географические), высоту, откуда ведётся съемка, угол наклона оси объектива в вертикальной плоскости (тангаж), угол поворота оси объектива в вертикальной плоскости (курс).

Откуда же мы возмём все эти данные ? Тут не всё так сложно, но давайте разберёмся по порядку.

  • координаты. Их можно получить, подключив GPS приёмник. но ввиду лени подключения и постоянного нахождения на одном месте, я отказался от этой затеи, а просто взял координаты из яндекс карт и использовал их;
  • высота. Тут немного было сложнее. Для определения высоты я использовал датчик давления (абсолютного);
  • угол наклона в вертикальной плоскости (тангаж). Для этого я использовал ранее испытанный алгоритм. Но о нём ниже;
  • угол поворота в горизонтальной плоскости (курс). см. пункт выше :)

Географические координаты.

По первому тут всё понятно, останавливаться на нём не буду.

Высота.

Для определения высоты использован аналоговый датчик давления MPX4115A. Он подключен к 16-ти битному АЦП. Данные с АЦП я пересчитываю сначала в кПа, а потом в высоту (считая, что температура 20 градусов).

На видео ниже на дисплее отображаются данные с АЦП, в зависимости от высоты. Чем больше высота, тем меньше напряжение с датчика давления и тем меньше отображаемое число.

Вот второе видео. Здесь уже я провёл пересчёт данных с АЦП в высоту (в метрах). При этом, параллельно соединил воздушные магистрали механического (со стрелкой) и своего самодельного электронного высотомера. number – значение высоты в единицах АЦП (АЦП 16 бит), alt – высота в метрах.

Углы ориентации.

С углами тоже вроде не сложно. Тем более что алгоритм был у меня уже ранее реализован (данную ИНС использовал в другом проекте ). Исходными данными для определения углов есть данные с 3-х осевого гироскопа L3G4200 и свомещённого датчика (акселерометр + магнетометр) LSM303DL. В общем, после некоторых манипуляций можно получить 3 угла ориентации платы или объекта, куда установлена плата, относительно земли – курс (0-360 градусов), крен (-180 – +180 градусов), тангаж (-90 – +90 градусов).

В динамике всё это выглядит примерно так:

Комплексирование исходных данных.

Когда все данные есть они поступают в ЭВМ ( в персональный компьютер). Там я написал небольшую программку, которая берёт изображение с веб камеры, накладывает на него некоторые исходные данные и вычисленные данные. И сохраняет такое изображение раз в две секунде.

На словах опишу как происходят расчёты (т.к. тут наипростейшая геометрия, то и расписывать мне не очень хочется. НО если кому-то это убдет интересно, то опишу подробнее этот процесс).

  • Зная высоту и угол относительно осью веб камеры и горизонтом можем определить дальность до снимаемого объекта на «нулевой» высоте. a – угол, h – высота, D – дальность «по земле».

  • Зная дальность «по земле» и направление оси камеры относительно географического севера определяем «проекции» этой дальности на широту и долготу;
  • Зная широту узнаём насколько проекция на долготу сместит начальную координату по долготе;
  • Зная широту узнаём насколько проекция на широту сместит начальную координату по широте;
  • Прибавляем пересчитанные проекции в градусы к соответствующим координатам начальной точки (от куда ведётся съёмка);
  • Опеделение скорости. Я сделал следующим образом: брал соседние по времени ( с разницей 1 секунда) вычисленные координаты снимаемого объекта. Вычислял расстояние между этих координат и,с оответственно, определял скорсоть между этими точками. НО время надо было больше брать 2-3 секунды. НО можно было вычислять скорость используя другие данные. Возожно, точность определения скорости была бы выше. Может, кто-нибудь напишет в комментариях что я имел в виду ? ;) ;

Внешний вид устройства

Результаты

На снимке ниже отображены координаты места от куда велась съемка (координаты метки), на последующих кадрах центр карты – координаты снимаемого объекта. К скрину карты из яндекс карт прилагается фотка снимаемого объекта.

Первая точка.

Вторая точка

Третья точка

В архиве вы можете скачать остальные фотографии.(45,9 Мб).

Из всех фотографий смонтировал видеоролик:

Выводы

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

Система Orphus


Уникальных посетителей темы: 35