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

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

  • Размеры креста


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

CodeCogsEqn
где

  • x - Размер объекта в пикселях

  • f - фокальное расстояние

  • X - реальный размер объекта

  • d - дистанция до объекта


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


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

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

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

Jetson TK1 Development Kit
lockdog_88
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.

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

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

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


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

  1. Находим на изображении окружности, используя распознавания граней методом Кэнни и при помощи морфологических операций

  2. Запоминаем координаты и относительный радиус максимальной окружности. Собственно, окружностью мы задаём ROI (Region Of Interest)

  3. Выделяем в окружности квадрат, сторона которого равна 2*(Radius/1.6) . Данное значение подпиралось экспериментально для наилучшего распознавания линий внутри квадрата

  4. Используя Hough Transform, находим линии внутри квадрата


Результат


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


%%
clear all

[filename, pathname] = uigetfile('*.*', 'Open Image File');
file = strcat(pathname,filename);
image = imread(file);

line_image = zeros([180 320]);

%% Main loop
Gimage = rgb2gray(image);
Gimage = imadjust(Gimage, [0.4 0.8], []);
bw = edge(Gimage,'canny', 0.15, .2);% [0.2 0.99], 2);
bw = imfill(bw,'holes');
se = strel('disk',1); 
bw = imopen(bw,se);
[B,L] = bwboundaries(bw);
stats = regionprops(L,'Centroid','EquivDiameter');

[s_x, s_y] = size(stats);
maxRadius = stats(1).EquivDiameter/2;
xc = stats(1).Centroid(1);
yc = stats(1).Centroid(2);

if s_x>1
for i=2:s_x
if maxRadiusmaxRadius = stats(i).EquivDiameter/2;
xc = stats(i).Centroid(1);
yc = stats(i).Centroid(2);
end
end
end

rect = [xc-maxRadius/1.6 yc-maxRadius/1.6 2*(maxRadius/1.6) 2*(maxRadius/1.6)];
croppedImage = imcrop(Gimage, rect); % Crop image around detected circle

image = insertShape(image, 'Circle', [xc yc maxRadius], 'Color', 'g');
image = insertShape(image, 'Rectangle', rect, 'Color', 'y');

%% Finding lines
J = imfilter(croppedImage, fspecial('gaussian', [11 11], 1), 'symmetric');
BW = edge(J, 'canny', .10, .2);
SE = strel('line',1,0);
BW = imopen(BW,SE);
% imshow(BW);
[H,T,R] = hough(BW);
P = houghpeaks(H, 2);
lines = houghlines(BW, T, R, P); 
for k = 1:length(lines)
xy = [lines(k).point1(1) lines(k).point2(1); lines(k).point1(2) lines(k).point2(2);];

image = insertShape(image, 'Line', [(xc-maxRadius/1.6)+xy(1,1)...
(yc-maxRadius/1.6)+xy(2,1)...
(xc-maxRadius/1.6)+xy(1,2)...
(yc-maxRadius/1.6)+xy(2,2)], 'Color', 'r');
line_image = insertShape(line_image, 'Line', [(xc-maxRadius/1.6)+xy(1,1)...
(yc-maxRadius/1.6)+xy(2,1)...
(xc-maxRadius/1.6)+xy(1,2)...
(yc-maxRadius/1.6)+xy(2,2)], 'Color', 'r'); 
end

imshow(line_image);

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

Cubieboard


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

Read more...Collapse )
Для данного метода существует две программы LiveSuit и PhoenixSuit. Кстати говоря, все манипуляции я выполняю на виндовой машине, как бы парадоксально это не звучало. :)

LiveSuit у меня не заработала ни на одном ПК, с PhoenixSuit проделывается некоторая манипуляция (об этом ниже), после чего прошивка успешно заливается. Есть ещё одна тонкость: программа может конфликтовать с некоторыми USB девайсами. Мне, к примеру, пришлось отключать AVR JTAG, чтобы всё заработало, поэтому советую отключить все "нестандартные" устройства: программаторы, отладчики и т.п.

Далее скачиваем образ дистрибутива Linux.

Установка


1. Подключаем Cubieboard к компьютеру, при помощи mini-USB, одновременно удерживая кнопку, которая находится под разъёмом USB. Кнопку необходимо держать в течении ~10 секунд, после этого на плате должен гореть только красный светодиод.

2. Открываем программу, идём во вкладку Firmware и указываем путь к образу Линукса

ps_1


3. Нажимаем кнопку "Upgrade", соглашаемся со всем. И, скорее всего, вы получите ошибку и приглашение проделать некоторые шаги.

ps_2

  • Удерживаем кнопку питания (находится рядом с HDMI разъёмом) в течении 10 секунд, чтобы отключить питание

  • Отключаем плату от ПК

  • Удерживаем кнопку под mini-USB разъёмом и опять подключаем плату к USB

  • Не отпуская первую кнопку, 10 раз нажимаем на кнопку питания

  • После этого процесс, прошивки должен автоматически запуститься


Через несколько минут прошивка завершится и вы получите рабочую плату с установленным Линуксом.

Первичная настройка


Дефолтные настройки входа в систему:

  • Логин: linaro

  • Пароль: linaro


Для смены пароля, в консоли вводим команду:

passwd

Cubieboard прекрасно работает с usb-хабами, поэтому вы можете подключить хаб к одному из портов и воткнуть клавиатуру и мышку, а в оставшийся порт — WiFi-модуль. Для начальных настроек, вам потребуется подключить плату к монитору, чтобы сконфигурировать сеть и установить ssh.

Если вы подключились к сети по Ethernet, то вам, возможно, потребуется выполнить в консоли команду:

dhclient eth0

чтобы получить маршруты через DHCP для eth0. В дальнейшем, можно настроить Wi-Fi модуль, указав сеть и пароль от неё.

Узнаём текущий ip-адрес командой:

ifconfig

Запоминаем IP. Чтобы нам больше не потребовались клавиатура и мышка, советую ставить SSH, это позволит удалённо отлаживать/настраивать/программировать вашу плату. Установка происходит посредством команды:

sudo apt-get install ssh

SSH-сервер автоматически запустится, теперь можно подключаться к Cubieboard с любого компьютера вашей домашней сети. Для этого я использую клиент Putty, для подключения необходимо ввести IP платы и порт 22, затем появится консоль с предложением ввести логин и пароль. Рекомендую поменять номер порта и сменить аутентификацию с парольной на ключи.

Файл с настройками находится: /etc/ssh/sshd_config

cb_1




В качестве текстового редактора я использую Nano, для установки вводим команду:

sudo apt-get install nano

cb_2




Данных настроек вам будет достаточно для начала работы с Cubieboard. В следующих постах, я постараюсь рассказать о работе с портами ввода-вывода, uart'ом, а так же об установке и настройке дополнительных программ для работы с платой.

 

Как отличить карлика от ребёнка?
lockdog_88
1. Если это ваш ребенок, отличить достаточно просто - по памяти. Если и карлик ваш, задача значительно усложняется.
2. Карлик на лицо более хуёвый.
3. Поставьте рядом карлика и ребенка. Через пару недель рост ребенка увеличится, рост карлика - нет. Причем карлик на это разозлится и будет топать ножкой.
4. Включите цирковую музыку, карлик начнет пританцовывать.
5. Притворитесь, что вы догадались кто есть кто. Попросите обоих подождать объявления результатов на ресепшене за столиком с журналами. Ребенок будет листать комиксы, карлик - playboy. Убедитесь, что комиксы не про цирк.
6. Выдайте обоим ключи, прокричите "Форт Байяр!" - кто побежит, размахивая над собой ключами, тот карлик. Если за ним увяжется неизвестно откуда взявшаяса вереница потных туристов - 100% карлик.
7. Покажите их голливудским режиссерам. Линч подпишет контракт с карликом, Земекис - с ребенком.
8. Доведите обоих до слез. Ребенка вы сумеете успокоить конфетой, карлик попытается вас убить.
9. Попросите у обоих автографы. Тот, кто подписался "Губин" - карлик.
10. Да блин, попросите у них паспорта! У карлика он маленький и в горошек.

Вот про Губина по-моему вообще не смешно :)

Почему некурящие докапываются до курильщиков?
lockdog_88

Вот стоишь себе спокойно, покуриваешь сигарету возле работы/универа после вкусного, сытного обеда (можно добавить свой вариант:)). И вот подходит к вам одногруппник/коллега, начинает с вами разговаривать и потом так между прочим заявляет типа: "Хватит на меня дымить". Да какого вообще хрена?! Сам подошёл и ещё какие-то претензии. И потом ещё учить начинают, что нужно бросать курить или постоянно спрашивают зачем мне это. Мне нравится курить. Я курю сигареты с кофейным ароматом из смеси трубочных табаков, я курю трубку и получаю удовольствие. И я не нарушаю никаких законов. Если вам что-то не нравится в курящих людях - идите в жопу зону некурящих и не нужно нас доставать своими проповедями. Единственное: я не курю рядом с детьми. Все остальные - люди сознательные и если вам неприятен табачный дым, то просто отойдите.

Запись сделана с помощью Приложение LiveJournal для Android.


Новые светофоры
lockdog_88


В районе Хорошево-Мневников в течиовом режиме установили новые светофоры с отсчётом времени для водителей. там два режима: обратный отсчёт до загорания красного и до загорания зелёного. Жёлтый там отсутствует вообще. Считаю отличной идеей показывать время, которое горит зелёный свет. От красного польза, имхо, сомнительная.

Запись сделана с помощью Приложение LiveJournal для Android.


Подключаем графические OLED. Часть 3 « Блог разработчика электроники
lockdog_88


Наконец-то мне удалось подключить дисплеи серии UG-5664 компании WiseChip (бывший Univision).  Думал, что проблема в прошивке, перерыл весь интернет и даташиты, а вся проблема оказалась в двух плохо припаянных контактах.
http://www.lockdog.ru/?p=187#more-187

?

Log in

No account? Create an account