![Фотография](https://vse.kz/public/style_images/osnovnoi34/profile/default_large.png)
Программирование на квадрокоптере AR.Drone
#122
Отправлено 12.07.2013, 12:26:04
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#123
Отправлено 13.07.2013, 13:36:34
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Порт UDP 14551 используется для получения данных
https://projects.ard...63#message-5821
В структурах навигационных данных есть такая
struct GPS {
float latitude;// широта
float longitude; // долгота
float altitude; // высота
} gps;
Одна минута угла на уровне моря (по экватору или меридиану) составляет примерно 1,86 километра или одну морскую милю («примерно» потому, что Земля слегка сплюснута). Секунда угла равна одной шестидесятой этой величины: около 30 метров или 100 футов.
http://ru.wikipedia....iki/Минута_дуги
![Изображение](http://www.banker.kz/uploads/1368452313/gallery_13947_52_12116.png)
#125
Отправлено 20.07.2013, 19:52:12
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
При вычислении вектора перемещения по сенсорам ошибка накапливается и через 5 минут нуль системы координат сдвигается прилично, бывает что метров на пять.
Мои попытки улучшить обработку данных оказались не очень успешными.
Наверное реальный шанс улучшить навигацию это искать метки в окружающей среде.
Допустим вертолет летает в квартире. На полу наклеена белая полоса, которая может служить точкой отсчета. Всякий раз когда вертолет будет пролетать над этой полосой будем сбрасывать вектор перемещения по соответствующей оси в ноль
#126
Отправлено 22.07.2013, 14:22:16
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Основная идея при составлении карты местности по методу SLAM состоит в том, что каждое последующее измерение положения метки на карте влияет на результаты предыдущих измерений.
SLAM от англ.Simultaneous Location and Mapping
http://ru.wikipedia....ki/SLAM_(метод)
Каждый результат измерения характеризуется точностью измерения. В общем случае точности измерений всегда не хватает
Измеряя одно и то же расстояние несколько раз можно определить систематическую и случайную ошибки измерений и таким образом определить степень доверия к результатам измерений других расстояний, которые были измерены до этого.
Кроме того одно и то же расстояние может быть измерено разными способами. Например в треугольнике можно измерить сторону АВ, а можно измерить стороны АС и СВ и таким образом определить длину сторону АВ.
Для экспериментов с точностью вычисления вектора перемещения используем известные (предустановленные) метки. То есть вертолет нужно только их распознать наличие метки на картнке и ее ориентацию по отношению к направлению движения. Положение и размер метки известны, это белая полоса.
Метка будет использоваться как нулевая точка оси Х. Таким образом при прохождении метки компонента Sx вектора перемещения будет устанавливаться в нуль.
#127
Отправлено 23.07.2013, 22:18:47
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Легче всего для распознавания использовать контрастные метки, типа белое на черном. Я хочу использовать белую полосу на черном фоне.
Очень важно чтобы инструмент используемый для распознавания работал максимально быстро. Я использую функцию openCV - cvHoughLines2
Аргументы функции влияющие на скорость ее выполнения это количество элементов в матрице и значение порога. Высота и ширина - rho и theta, порог - threshold.
#128
Отправлено 24.07.2013, 17:05:01
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Данные GPS ar,drone
http://pukulab.blog....g-entry-62.html
Добавили новую структуру данных в пакет навигационных данных, начиная с версии ПО AR.Drone 2.4.1
#129
Отправлено 24.07.2013, 17:49:28
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
puku0x обновил свой проект cvdrone. Библиотеки используемые для работы с изображениями и для работы с видео обновил и изменил код класса ardrone для работы с новыми библиотеками. Добавлена новая структура данных в описание пакета навигационных данных для работы с GPS
https://github.com/puku0x/cvdrone
#130
Отправлено 31.07.2013, 19:08:57
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Как найти нужный объект на рисунке
http://habrahabr.ru/post/137743/
Отслеживание мячика
Для определения координат мячика, я воспользовался следующим алгоритмом.
1) Перевёл изображение из RGB представления в HSV. Это облегчает определение похожих цветов, так как в отличие от RGB, HSV хранит в отдельном канале цветовой тон, насыщенность и яркость.
2) Перевёл изображение в двоичное (bitmap). Те цвета, которые ближе всех к требуемуму цвету (цвету мячика) — преобразовались в белый. Остальные — в чёрный.
3) Отфильтровал шумы медианным фильтром.
4) Определил среднюю координату и количество белых пикселей. Если количество больше порогового значения — значит в кадре есть мячик.
#131
Отправлено 01.08.2013, 12:21:23
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Объект заведомо белого цвета кажется человеку белым практически при любом освещении, потому что необходимую цветокоррекцию автоматически проводят человеческий глаз и мозг.
Американцы Давид Хьюбл (David H.Hubel) и Торстен Вайзел (Torsten N.Wiesel) получили Нобелевскую премию 1981 года за исследование зрения человека. Они доказали[источник не указан 358 дней], что глаза человека выдают в мозг информацию вовсе не о красном ®, зелёном (G) и синем (B) цветах (теория цвета Юнга — Гельмгольца, 1802 г.). Согласно теории о трёх оппонентных процессах (автор — немецкий физиолог Эвальд Геринг, 1834—1918), мозг получает информацию о разнице яркости белого и чёрного (Ymax и Ymin), о разнице зелёного и красного цветов (G − R), о разнице синего и жёлтого цветов (B − yellow), а жёлтый цвет есть сумма красного и зелёного цветов (yellow = R + G), где R, G и B — яркости цветовых составляющих: красного, зелёного и синего.
http://ru.wikipedia....нс_белого_цвета
Так как провести необходимую цветокоррекцию при изменении освещения сложно, то более простым способом обеспечить обнаружение белой метки является большой лист черной бумаги на которой расположена белая метка в виде полосы.
#132
Отправлено 06.08.2013, 01:32:28
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Для обработки нажатий клавиш используется функция GetAsyncKeyState()
Функция GetAsyncKeyState устанавливает, в нажатом или отпущенном состоянии находится клавиша во время, когда вызывается функция и была ли клавиша нажата после предыдущего вызова GetAsyncKeyState().
Возвращаемые значения
Если функция завершается успешно, величина возвращаемого значения определяет, была ли клавиша нажата начиная с последнего вызова GetAsyncKeyState, и какое из двух состояний, нажатое или отпущенное, занимает в настоящее время клавиша. Если старший значащий бит установлен, клавиша - нажата, а если наименьший значащий бит установлен, клавиша была нажата после предыдущего вызова GetAsyncKeyState. Величина возвращаемого значения нулевая, если окно в другом потоке или процессе в настоящее время имеет фокус клавиатуры.
http://www.firststep...i/keyb/r.php?27
#133
Отправлено 09.08.2013, 13:03:47
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#134
Отправлено 12.08.2013, 19:25:38
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#135
Отправлено 14.08.2013, 18:42:16
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#136
Отправлено 17.08.2013, 21:26:07
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
При использовании функции cvShowImage() необходимо использовать также функцию cvWaitKey(), так как она инициирует прорисовку изображения в окне
Например так
#137
Отправлено 20.08.2013, 12:04:37
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
int Xc = 0; int Yc = 0; int counter = 0; // счётчик числа белых пикселей // пробегаемся по пикселям изображения for(int y=0; y < dst->height; y++) { uchar* ptr = (uchar*) (dst->imageData + y * dst->widthStep); // вычисляем указатель ptr, который указывает на начало соответствующей строки (y) for(int x=0; x < dst->width; x++) { if( ptr[x]>0 ) { Xc += x; Yc += y; counter++; } } } if(counter!=0) { float centerx = float(Xc)/counter; float centery = float(Yc)/counter; }
#138
Отправлено 24.08.2013, 18:37:21
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
#139
Отправлено 24.08.2013, 23:48:04
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Можно получать видео с вертолета с разным разрешением
Для видео с разрешением 640*360 используется команда
sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", seq++, 0x81); // H264_360P_CODEC
Для видео с разрешением 1280*720 используется команда
sockCommand.sendf("AT*CONFIG=%d,\"video:video_codec\",\"%d\"\r", seq++, 0x83); // H264_720P_CODEC
/******** Available codecs ********/
typedef enum _codec_type_t {
NULL_CODEC = 0,␊
UVLC_CODEC = 0x20, // codec_type value is used for START_CODE
MJPEG_CODEC, // not used
P263_CODEC, // not used
P264_CODEC = 0x40,
MP4_360P_CODEC = 0x80,
H264_360P_CODEC = 0x81,
MP4_360P_H264_720P_CODEC = 0x82,
H264_720P_CODEC = 0x83,
MP4_360P_SLRS_CODEC = 0x84,
H264_360P_SLRS_CODEC = 0x85,
H264_720P_SLRS_CODEC = 0x86,
H264_AUTO_RESIZE_CODEC = 0x87, // resolution is automatically adjusted according to bitrate
MP4_360P_H264_360P_CODEC = 0x88,
http://forge.scilab....B/video_codec.h
https://projects.ard...opics/show/4957
#140
Отправлено 25.08.2013, 00:12:33
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Количество пользователей, читающих эту тему: 0
пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0