Оценка расстояния до посадочной площадки

В данной задаче известны все параметры площадки:

  • Внутренний и внешний диаметр окружности
  • Размеры креста

Так же я знаю фокусное расстояние камеры. Написав несколько функций я добился определения окружности на изображении и вычисления диаметра в пикселях. Зная соотношение:

CodeCogsEqnгде

  • x — Размер объекта в пикселях
  • f — фокальное расстояние
  • X — реальный размер объекта
  • d — дистанция до объекта

можно вычислить расстояние до посадочной площадки.

Библиотека: обработка изображений, управление БПЛА

В данном топике буду размещать различную информацию, в формате PDF, по распознаванию объектов на изображении и управлению БПЛА.

Распознавание посадочной площадки 2

Продолжаю свои попытки распознавания посадочной площадки.
Я собрал в единый ролик все тестовые видео и результаты их обработки. В первом видео показан исходный кадр с распознанной посадочной площадкой, во втором я удалил из исходного кадра всё кроме распознанной площадки (средствами матлаба, естественно), в третьем видно только распознанные линии, образующие крест посадочной площадки.

Ошибки в распознавании связаны с тем, что ролики сжаты в MotionJPEG, потому линии иногда неверно определяются. Это можно исправить небольшим размытием изображения.

Jetson TK1 Development Kit

nvidia-jetson-tk1,K-G-428416-22

Недавно стала доступна для предзаказа замечательная платформа на базе чипа NVIDIA Tegra K1. Данный девайс отлично подходит для робототехники и может использоваться для обработки видео и навигации.

На плате расположен 192-х ядерный GPU, 4-х ядерный Cortex-A15, 2 Гб оперативной памяти, порты ввода-вывода, SPI, I2C, UART, HDMI, SATA, LVDS и других вкусностей.

Габариты: 120 х 120 мм. Цена в предзаказе 192$, но это в США, в Европе ценник составляет 200 евро и для такой платформы всё равно выходит не слишком дорого. Производитель уже предоставляет различные библиотеки, тулкиты, в том числе адаптированный OpenCV.

Информация на сайте производителя

Распознавание посадочной площадки

Доброго дня всем!
Вернулся к изучению матлаба и алгоритмов распознавания и отслеживания объектов на изображении.
Задача:
Есть посадочная площадка известных форм и размеров

Посадочная площадка

Необходимо сделать так, чтобы БПЛА смог распознать данную площадку и удачно совершить приземление. Пока сделал примитивное распознавание по следующему алгоритму:

  1. Находим на изображении окружности, используя распознавания граней методом Кэнни и при помощи морфологических операций
  2. Запоминаем координаты и относительный радиус максимальной окружности. Собственно, окружностью мы задаём ROI (Region Of Interest)
  3. Выделяем в окружности квадрат, сторона которого равна 2*(Radius/1.6) . Данное значение подпиралось экспериментально для наилучшего распознавания линий внутри квадрата
  4. Используя Hough Transform, находим линии внутри квадрата

Результат

Пока всё просто, но распознавание не идеальное, нужно дальше дорабатывать. Также я изучаю кросс-корреляцию для отслеживания креста, полученного из линий.

  1. %%
  2. clear all
  3.  
  4. [filename, pathname] = uigetfile({'*.*'}, 'Open Image File');
  5. file = strcat(pathname,filename);
  6. image = imread(file);
  7.  
  8. line_image = zeros([180 320]);
  9.  
  10. %% Main loop
  11. Gimage = rgb2gray(image);
  12. Gimage = imadjust(Gimage, [0.4 0.8], []);
  13. bw = edge(Gimage,'canny', 0.15, .2);% [0.2 0.99], 2);
  14. bw = imfill(bw,'holes');
  15. se = strel('disk',1); 
  16. bw = imopen(bw,se);
  17. [B,L] = bwboundaries(bw);
  18. stats = regionprops(L,'Centroid','EquivDiameter');
  19.  
  20. [s_x, s_y] = size(stats);
  21. maxRadius = stats(1).EquivDiameter/2;
  22. xc = stats(1).Centroid(1);
  23. yc = stats(1).Centroid(2);
  24.  
  25. if s_x>1
  26. for i=2:s_x
  27. if maxRadius<stats(i).EquivDiameter/2
  28. maxRadius = stats(i).EquivDiameter/2;
  29. xc = stats(i).Centroid(1);
  30. yc = stats(i).Centroid(2);
  31. end
  32. end
  33. end
  34.  
  35. rect = [xc-maxRadius/1.6 yc-maxRadius/1.6 2*(maxRadius/1.6) 2*(maxRadius/1.6)];
  36. croppedImage = imcrop(Gimage, rect); % Crop image around detected circle
  37.  
  38. image = insertShape(image, 'Circle', [xc yc maxRadius], 'Color', 'g');
  39. image = insertShape(image, 'Rectangle', rect, 'Color', 'y');
  40.  
  41. %% Finding lines
  42. J = imfilter(croppedImage, fspecial('gaussian', [11 11], 1), 'symmetric');
  43. BW = edge(J, 'canny', .10, .2);
  44. SE = strel('line',1,0);
  45. BW = imopen(BW,SE);
  46. % imshow(BW);
  47. [H,T,R] = hough(BW);
  48. P = houghpeaks(H, 2);
  49. lines = houghlines(BW, T, R, P); 
  50. for k = 1:length(lines)
  51. xy = [lines(k).point1(1) lines(k).point2(1); lines(k).point1(2) lines(k).point2(2);];
  52.  
  53. image = insertShape(image, 'Line', [(xc-maxRadius/1.6)+xy(1,1)...
  54. (yc-maxRadius/1.6)+xy(2,1)...
  55. (xc-maxRadius/1.6)+xy(1,2)...
  56. (yc-maxRadius/1.6)+xy(2,2)], 'Color', 'r');
  57. line_image = insertShape(line_image, 'Line', [(xc-maxRadius/1.6)+xy(1,1)...
  58. (yc-maxRadius/1.6)+xy(2,1)...
  59. (xc-maxRadius/1.6)+xy(1,2)...
  60. (yc-maxRadius/1.6)+xy(2,2)], 'Color', 'r'); 
  61. end
  62.  
  63. imshow(line_image);

Cubieboard. Прошивка Linux в NAND. Настройка

Cubieboard

В интернете написано много способов, как прошить Linux в Cubieboard. Часто предлагают устанавливать на uSD карту. Когда я хотел это сделать, то у меня под рукой не оказалось этой самой карты, поэтому я решил установить в NAND дистрибутив Lubuntu (облегчённая версия Ubuntu).

Continue Reading >>

Удалённое управление роботом. Часть I

Не так давно я захотел сделать робота, которым я смог бы управлять из любой точки Земли, при этом мог бы получать картинку с камеры робота. На данный момент я уже реализовал данный функционал при помощи платы Arduino и других устройств. Данный цикл статей посвящён этому процессу.

Wi-Fi для всего

На Kickstarter’е наткнулся на очень интересный проект Wi-Fi модуля очень компактных размеров.

http://www.kickstarter.com/projects/sparkdevices/spark-core-wi-fi-for-everything-arduino-compatible

Естественно, ардуино-совместимая. На борту стоит чип wi-fi CC3000 от Texas Instruments. Если проект состоится, а он наверняка состоится, судя по набранной сумме, то первые платы будут доступны в сентябре этого года. Очень заманчивая плата выходит, с учётом того, что прошивку можно обновить по воздуху. И я как раз собирался делать что-то вроде «умного дома» и размышляю над тем, какое средство связи выбрать.

С Новым Годом!

Ура!

Скоро наступит 2013 год! Желаю всем своим читателям и всему сообществу радиолюбителей, разработчикам, электронщикам и всем-всем-всем творческих успехов и профессионального роста!

Успеха во всех аспектах, счастья, удачи. Хорошей работы, которая вам будет нравиться. Поздравляю!

Подключение BlueTab к MultiWii

Недавно я получил посылку вот с таким полётным контроллером для своего гексакоптера:

Решил взять готовый модуль со всеми необходимыми датчиками, а не ваять свой. Данная плата замечательно шьётся прошивкой MultiWii, на борту расположен датчик давления MS5611-01BA01, в даташите на который, указано, что у него точность 10 см. Собственно это условия сферического коня в вакууме. :) На деле он неплохо так дрейфует +\-30 см и это ещё в комнатных условиях. На улице, я думаю, будет ещё хуже. Но всё равно это очень неплохой результат для такого класса датчиков, да и откалибровать всё это дело можно.

Так же на плате есть датчик ускорения и гироскоп (оба на 3 оси) и магнитометр (он же компас). На плате куча разъёмов для подключения других устройств, присутствуют 3 UART порта, I2C, есть возможность подключения подвеса для камеры. Прошивка заливается при помощи USB-FTDI, что позволяет отказаться от программатора. В целом, это очень продвинутая версия ардуино платы.

Continue Reading >>