AVM Navigator для RoboRealm практическое применение

Re: AVM Navigator для RoboRealm практическое применение

Сообщение galex1981 » 14 мар 2012, 23:22

C RoboRealm пока не пробовал на DIR-320 роботе, пока обкатывал Web интерфейс. Планирую завтра заняться. Судя по ошибке - значения какой то переменной выходят за разрешенные границы
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: AVM Navigator для RoboRealm практическое применение

Сообщение EDV » 14 мар 2012, 23:49

=DeaD= писал(а):Пробую использовать навигатор на роботе с DIR-320.

Периодически ловлю такую ошибку. Такое ощущение, что при работе через WiFi пропускается кадр. Без включенного навигатора такое не вылетает. Можно сделать так, чтобы пропуск кадра не ронял RoboRealm? :oops: Причем такое ощущение, что с новой версией навигатора ошибка стала появляться в 3-5 раз чаще :) вчера на старой версии криво, но секунд по 60 работало, а сейчас вылетает в первые 10 секунд, еще когда башней робот крутит, осматриваясь.

Похоже это не пропущенные кадры, а некорректное разрешение входного видео. Из картинки видно, что было установлено разрешение 1x1 пиксель, скорее всего это и есть причина сбоя. Я, конечно, могу попробовать вмонтировать защиту от такого разрешения, но может, есть смысл поискать ошибку на стороне прошивки DIR-320?
Вложения
nav_er.png
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: AVM Navigator для RoboRealm практическое применение

Сообщение =DeaD= » 15 мар 2012, 07:56

Если можно - сделай плиз защиту от таких кадров, потому как другие модули там спокойно переварили такие кадры и не вылетели, есть ощущение, что 1х1 кадр выдаёт не DIR-320, а получалка видео по HTTP, которая встроена в RoboRealm, если у неё что-то не вышло, потому как более нигде я не видел такого разрешения пока.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: AVM Navigator для RoboRealm практическое применение

Сообщение =DeaD= » 20 мар 2012, 21:32

Порядок подключения робота на DIR-320 и контроллере OR-AVR-M128-DS к RoboRealm и AVM Navigator:

Шаг 0. Подключить робота (его IP-адрес на вашей машине с RoboRealm планируем 192.168.1.120 - если другой - поменяйте соотв. образом все настройки ниже);

Шаг 1. Пробрасываем COM-порт с помощью HW Virtual SerialPort 2.5.10:
ser2net-comport.jpg


Шаг 2. Запускаем RoboRealm и подключаем проброску видео (Компоненты - Loading/Saving - Read HTTP, после настройки нажмите Start):
read-http.jpg


Шаг 3. Добавляем недостающие компоненты в стек:
roborealm-stack.jpg


Шаг 4. Настраиваем WinkyRover драйвер (пропишите ваши номера сервоприводов Pan&Tilt, ваш номер СОМ-порта):
winky-driver.jpg
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: AVM Navigator для RoboRealm практическое применение

Сообщение =DeaD= » 25 мар 2012, 19:16

Видео использования навигатора на платформе с DIR-320:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: AVM Navigator для RoboRealm практическое применение

Сообщение =DeaD= » 02 апр 2012, 22:46

Побаловался с другими режимами из под DIR-320, кроме езды по карте:

Navigate mode (гонять за маркером):


Watching mode (гонять за движущимися объектами, правда видимо я тут чуть переборщил с размером движения :)):
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: AVM Navigator для RoboRealm практическое применение

Сообщение Dmitry__ » 03 апр 2012, 00:32

Ахренеть :good:
Похоже AVM Navigator начал завоевывать сердца соотечественников, до этого были только буржуи. Вот ведь какой мы народ, нас не победить ни кому :)
Надо с AVM Navigator побаловаться на нашей карте. Забить в память образы противоборствующих роботов и затовариться попкорном.
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: AVM Navigator для RoboRealm практическое применение

Сообщение =DeaD= » 03 апр 2012, 08:13

Dmitry__ писал(а):Надо с AVM Navigator побаловаться на нашей карте. Забить в память образы противоборствующих роботов и затовариться попкорном.

У вас надо как минимум туррели сделать на его основе :) чтобы своих от чужих отличал по распознавалке :)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: AVM Navigator для RoboRealm практическое применение

Сообщение EDV » 21 апр 2012, 03:12

Слегка подкорректировал алгоритм прослеживания объекта,
теперь программа может управлять скоростью вращения сервомоторов :)



Код: Выделить всё
' Get turret control variables
flt_base = 10000

rate_v  = GetVariable("RATE_V")/flt_base
turret_v  = GetVariable("TURRET_V")/flt_base
turret_Sv = GetVariable("TURRET_V_SPEED")

rate_h  = GetVariable("RATE_H")/flt_base
turret_h  = GetVariable("TURRET_H")/flt_base
turret_Sh = GetVariable("TURRET_H_SPEED")
turret_f  = GetVariable("TURRET_FIRE")
step_counter = GetVariable("STEP_COUNTER")

dX = 0
dY = 0

status = ""
turret_v_initial = -80

nvObjectsTotal = GetVariable("NV_OBJECTS_TOTAL")

if nvObjectsTotal>0 then   ' If any object was found

   ' Get image size
   img_w = GetVariable("IMAGE_WIDTH")
   img_h = GetVariable("IMAGE_HEIGHT")
   
   ' Get array variables of recognized objects
   nvArrObjRectX = GetArrayVariable("NV_ARR_OBJ_RECT_X")
   nvArrObjRectY = GetArrayVariable("NV_ARR_OBJ_RECT_Y")
   nvArrObjRectW = GetArrayVariable("NV_ARR_OBJ_RECT_W")
   nvArrObjRectH = GetArrayVariable("NV_ARR_OBJ_RECT_H")

   ' Get center coordinates of first object from array
   obj_x = nvArrObjRectX(0) + nvArrObjRectW(0)/2
   obj_y = nvArrObjRectY(0) - nvArrObjRectH(0)/2
   
   ' Get difference between object and screen centers
   dX = img_w/2 - obj_x
   dY = img_h/2 - obj_y
   
   dXr = 1 - abs(dX*4/img_w)
   if dXr < 0 then dXr = 0
   
   dYr = 1 - abs(dY*4/img_h)
   if dYr < 0 then dYr = 0
   
   turret_min = -100
   turret_max = 100
   reaction   = 7
   speed_min  = 1
   speed_max  = 100
   filtering  = 0.7
   decay      = 0.1
   threshold  = round(img_w*0.03)

   sRateH = exp(-dXr*reaction)
   sRateV = exp(-dYr*reaction)
   
   rate_h = rate_h + (sRateH - rate_h)*filtering
   rate_v = rate_v + (sRateV - rate_v)*filtering
   
   turret_Sh = round(speed_min + rate_h*(speed_max - speed_min))
   turret_Sv = round(speed_min + rate_v*(speed_max - speed_min))
   
   delta_h = (img_w/8)*rate_h
   delta_v = (img_h/8)*rate_v

  if step_counter =< 0 then
      step_counter = round(exp(-(dXr*dYr)*reaction*0.7)*15)
      
      if dX > threshold then
         ' The object is at left side
         turret_h = turret_h - delta_h
      
         if turret_h < turret_min then turret_h = turret_min
      end if

      if dX < -threshold then
         ' The object is at right side
         turret_h = turret_h + delta_h
      
         if turret_h > turret_max then turret_h = turret_max
      end if
   
      if dY > threshold then
         ' The object is at the bottom
         turret_v = turret_v - delta_v
      
         if turret_v < turret_min then turret_v = turret_min
      end if
   
      if dY < -threshold then
         ' The object is at the top
         turret_v = turret_v + delta_v
      
         if turret_v > turret_max then turret_v = turret_max
      end if
   else
      step_counter = step_counter - 1
   end if
      
   ' Is the target locked?
   if dX < threshold and dX > -threshold and dY < threshold and dY > -threshold then
      status = "Target is locked"
      turret_f = 1
   else
      status = "Tracking"
      turret_f = 0
   end if
else
   ' Back to the center if object is lost
   if turret_h > 0 then turret_h = turret_h - 1
   if turret_h < 0 then turret_h = turret_h + 1
   if turret_v > turret_v_initial then turret_v = turret_v - 1
   if turret_v < turret_v_initial then turret_v = turret_v + 1
   
   turret_Sh = speed_min
   turret_Sv = speed_min
   
   rate_h = rate_h - rate_h*decay
   rate_v = rate_v - rate_v*decay
   
   turret_f = 0
end if

' Set turret control variables
SetVariable "RATE_V", rate_v*flt_base
SetVariable "TURRET_V", turret_v*flt_base
SetVariable "TURRET_V_CONTROL", round(turret_v)
SetVariable "TURRET_V_SPEED", turret_Sv
SetVariable "RATE_H", rate_h*flt_base
SetVariable "TURRET_H", turret_h*flt_base
SetVariable "TURRET_H_CONTROL", round(turret_h)
SetVariable "TURRET_H_SPEED", turret_Sh
SetVariable "TURRET_FIRE", turret_f
SetVariable "STEP_COUNTER", step_counter
SetVariable "DELTA_X", dX
SetVariable "DELTA_Y", dY
SetVariable "TURRET_STATUS", status
Вложения
trc_dgr.png
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: AVM Navigator для RoboRealm практическое применение

Сообщение dccharacter » 21 апр 2012, 03:23

Turret fire! Пиу пиу! круть
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: AVM Navigator для RoboRealm практическое применение

Сообщение EDV » 24 апр 2012, 15:13

Пользователи пугаются :crazy:

Suicidesoldier#1 писал(а):Why does this equal Skynet, again? O_o

[Ссылка на оригинальное сообщение]
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: AVM Navigator для RoboRealm практическое применение

Сообщение avr123.nm.ru » 01 май 2012, 08:50

EDV писал(а):Слегка подкорректировал алгоритм прослеживания объекта,
Наверно ПИД надо подстроить - перерегулирование лошадиное.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: AVM Navigator для RoboRealm практическое применение

Сообщение EDV » 04 май 2012, 12:13

Добавил новый режим обучения «Learn from motion» на вкладку «Object recognition» диалогового окна Навигатора:



В этом режиме программа определяет габариты объекта по границам движения в кадре и добавляет фрагмент изображения, в котором было отмечено движение в поисковое дерево AVM.
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: AVM Navigator для RoboRealm практическое применение

Сообщение Myp » 04 май 2012, 15:20

фича работает только на белом фоне в белой футолке?

а как обучить видеть например футбольный мяч?
без рук :)
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: AVM Navigator для RoboRealm практическое применение

Сообщение EDV » 04 май 2012, 16:46

Myp писал(а):фича работает только на белом фоне в белой футолке?

Думаю, будет работать на любом фоне, лишь бы на переднем плане двигался какой-нибудь контрастный объект (который с фоном не сливается).

Myp писал(а):а как обучить видеть например футбольный мяч?
без рук :)

Насчёт мяча, так что бы «без рук», наверное, не получится, так как руки то тоже двигаться будут, а вот если мяч поместить в «красную рамку» для обычного режима обучения, то AVM вполне может научиться его распознавать :wink:
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Пред.След.

Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2