Определение координат снимаемых объектов.
Добавлено: 03 май 2013, 13:47
Сделал недавно, относительно.
Это небольшая система, которая позволяет определить координаты и «скорость» снимаего объекта на веб камеру.
Узнал, что существуют подобные системы и решил сделать нечто своё. Но так так бюджет у меня ограничен и делается исключительно ради интереса, то и реализация крайне простая и бюджетная .
Идея крайне простая: зная свои координаты (географические), высоту, откуда ведётся съемка, угол наклона оси объектива в вертикальной плоскости (тангаж), угол поворота оси объектива в вертикальной плоскости (курс).
Откуда же мы возмём все эти данные ? Тут не всё так сложно, но давайте разберёмся по порядку.
координаты. Их можно получить, подключив GPS приёмник. но ввиду лени подключения и постоянного нахождения на одном месте, я отказался от этой затеи, а просто взял координаты из яндекс карт и использовал их;
высота. Тут немного было сложнее. Для определения высоты я использовал датчик давления (абсолютного);
угол наклона в вертикальной плоскости (тангаж). Для этого я использовал ранее испытанный алгоритм. Но о нём ниже;
угол поворота в горизонтальной плоскости (курс). см. пункт выше
Географические координаты.
По первому тут всё понятно, останавливаться на нём не буду.
Высота.
Для определения высоты использован аналоговый датчик давления MPX4115A. Он подключен к 16-ти битному АЦП. Данные с АЦП я пересчитываю сначала в кПа, а потом в высоту (считая, что температура 20 градусов).
На видео ниже на дисплее отображаются данные с АЦП, в зависимости от высоты. Чем больше высота, тем меньше напряжение с датчика давления и тем меньше отображаемое число.
C3jhkHW7r8Q
Вот второе видео. Здесь уже я провёл пересчёт данных с АЦП в высоту (в метрах). При этом, параллельно соединил воздушные магистрали механического (со стрелкой) и своего самодельного электронного высотомера. number – значение высоты в единицах АЦП (АЦП 16 бит), alt – высота в метрах.
-dt18Nt47aM
Углы ориентации.
С углами тоже вроде не сложно. Тем более что алгоритм был у меня уже ранее реализован (данную ИНС использовал в другом проекте ). Исходными данными для определения углов есть данные с 3-х осевого гироскопа L3G4200 и свомещённого датчика (акселерометр + магнетометр) LSM303DL. В общем, после некоторых манипуляций можно получить 3 угла ориентации платы или объекта, куда установлена плата, относительно земли – курс (0-360 градусов), крен (-180 – +180 градусов), тангаж (-90 – +90 градусов). В динамике всё это выглядит примерно так:
2-e0colMZAE
Комплексирование исходных данных.
Когда все данные есть они поступают в ЭВМ ( в персональный компьютер). Там я написал небольшую программку, которая берёт изображение с веб камеры, накладывает на него некоторые исходные данные и вычисленные данные. И сохраняет такое изображение раз в две секунде.
На словах опишу как происходят расчёты (т.к. тут наипростейшая геометрия, то и расписывать мне не очень хочется. НО если кому-то это убдет интересно, то опишу подробнее этот процесс).
1. Зная высоту и угол относительно осью веб камеры и горизонтом можем определить дальность до снимаемого объекта на «нулевой» высоте. a – угол, h – высота, D – дальность «по земле». 2. Зная дальность «по земле» и направление оси камеры относительно географического севера определяем «проекции» этой дальности на широту и долготу;
3.Зная широту узнаём насколько проекция на долготу сместит начальную координату по долготе;
4. Зная широту узнаём насколько проекция на широту сместит начальную координату по широте;
5.Прибавляем пересчитанные проекции в градусы к соответствующим координатам начальной точки (от куда ведётся съёмка);
6. Опеделение скорости. Я сделал следующим образом: брал соседние по времени ( с разницей 1 секунда) вычисленные координаты снимаемого объекта. Вычислял расстояние между этих координат и,с оответственно, определял скорсоть между этими точками. НО время надо было больше брать 2-3 секунды. НО можно было вычислять скорость используя другие данные. Возожно, точность определения скорости была бы выше. Может, кто-нибудь напишет в комментариях что я имел в виду ? ;)
Внешний вид устройства
Это небольшая система, которая позволяет определить координаты и «скорость» снимаего объекта на веб камеру.
Узнал, что существуют подобные системы и решил сделать нечто своё. Но так так бюджет у меня ограничен и делается исключительно ради интереса, то и реализация крайне простая и бюджетная .
Идея крайне простая: зная свои координаты (географические), высоту, откуда ведётся съемка, угол наклона оси объектива в вертикальной плоскости (тангаж), угол поворота оси объектива в вертикальной плоскости (курс).
Откуда же мы возмём все эти данные ? Тут не всё так сложно, но давайте разберёмся по порядку.
координаты. Их можно получить, подключив GPS приёмник. но ввиду лени подключения и постоянного нахождения на одном месте, я отказался от этой затеи, а просто взял координаты из яндекс карт и использовал их;
высота. Тут немного было сложнее. Для определения высоты я использовал датчик давления (абсолютного);
угол наклона в вертикальной плоскости (тангаж). Для этого я использовал ранее испытанный алгоритм. Но о нём ниже;
угол поворота в горизонтальной плоскости (курс). см. пункт выше
Географические координаты.
По первому тут всё понятно, останавливаться на нём не буду.
Высота.
Для определения высоты использован аналоговый датчик давления MPX4115A. Он подключен к 16-ти битному АЦП. Данные с АЦП я пересчитываю сначала в кПа, а потом в высоту (считая, что температура 20 градусов).
На видео ниже на дисплее отображаются данные с АЦП, в зависимости от высоты. Чем больше высота, тем меньше напряжение с датчика давления и тем меньше отображаемое число.
C3jhkHW7r8Q
Вот второе видео. Здесь уже я провёл пересчёт данных с АЦП в высоту (в метрах). При этом, параллельно соединил воздушные магистрали механического (со стрелкой) и своего самодельного электронного высотомера. number – значение высоты в единицах АЦП (АЦП 16 бит), alt – высота в метрах.
-dt18Nt47aM
Углы ориентации.
С углами тоже вроде не сложно. Тем более что алгоритм был у меня уже ранее реализован (данную ИНС использовал в другом проекте ). Исходными данными для определения углов есть данные с 3-х осевого гироскопа L3G4200 и свомещённого датчика (акселерометр + магнетометр) LSM303DL. В общем, после некоторых манипуляций можно получить 3 угла ориентации платы или объекта, куда установлена плата, относительно земли – курс (0-360 градусов), крен (-180 – +180 градусов), тангаж (-90 – +90 градусов). В динамике всё это выглядит примерно так:
2-e0colMZAE
Комплексирование исходных данных.
Когда все данные есть они поступают в ЭВМ ( в персональный компьютер). Там я написал небольшую программку, которая берёт изображение с веб камеры, накладывает на него некоторые исходные данные и вычисленные данные. И сохраняет такое изображение раз в две секунде.
На словах опишу как происходят расчёты (т.к. тут наипростейшая геометрия, то и расписывать мне не очень хочется. НО если кому-то это убдет интересно, то опишу подробнее этот процесс).
1. Зная высоту и угол относительно осью веб камеры и горизонтом можем определить дальность до снимаемого объекта на «нулевой» высоте. a – угол, h – высота, D – дальность «по земле». 2. Зная дальность «по земле» и направление оси камеры относительно географического севера определяем «проекции» этой дальности на широту и долготу;
3.Зная широту узнаём насколько проекция на долготу сместит начальную координату по долготе;
4. Зная широту узнаём насколько проекция на широту сместит начальную координату по широте;
5.Прибавляем пересчитанные проекции в градусы к соответствующим координатам начальной точки (от куда ведётся съёмка);
6. Опеделение скорости. Я сделал следующим образом: брал соседние по времени ( с разницей 1 секунда) вычисленные координаты снимаемого объекта. Вычислял расстояние между этих координат и,с оответственно, определял скорсоть между этими точками. НО время надо было больше брать 2-3 секунды. НО можно было вычислять скорость используя другие данные. Возожно, точность определения скорости была бы выше. Может, кто-нибудь напишет в комментариях что я имел в виду ? ;)
Внешний вид устройства