roboforum.ru

Технический форум по робототехнике.

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

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

galex1981 » 14 мар 2012, 23:22

C RoboRealm пока не пробовал на DIR-320 роботе, пока обкатывал Web интерфейс. Планирую завтра заняться. Судя по ошибке - значения какой то переменной выходят за разрешенные границы

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

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

=DeaD= » 15 мар 2012, 07:56

Если можно - сделай плиз защиту от таких кадров, потому как другие модули там спокойно переварили такие кадры и не вылетели, есть ощущение, что 1х1 кадр выдаёт не DIR-320, а получалка видео по HTTP, которая встроена в RoboRealm, если у неё что-то не вышло, потому как более нигде я не видел такого разрешения пока.

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

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

=DeaD= » 25 мар 2012, 19:16

Видео использования навигатора на платформе с DIR-320:

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

=DeaD= » 02 апр 2012, 22:46

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

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


Watching mode (гонять за движущимися объектами, правда видимо я тут чуть переборщил с размером движения :)):

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

Dmitry__ » 03 апр 2012, 00:32

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

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

=DeaD= » 03 апр 2012, 08:13

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

У вас надо как минимум туррели сделать на его основе :) чтобы своих от чужих отличал по распознавалке :)

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

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

dccharacter » 21 апр 2012, 03:23

Turret fire! Пиу пиу! круть

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

EDV » 24 апр 2012, 15:13

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

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

[Ссылка на оригинальное сообщение]

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

avr123.nm.ru » 01 май 2012, 08:50

EDV писал(а):Слегка подкорректировал алгоритм прослеживания объекта,
Наверно ПИД надо подстроить - перерегулирование лошадиное.

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

EDV » 04 май 2012, 12:13

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



В этом режиме программа определяет габариты объекта по границам движения в кадре и добавляет фрагмент изображения, в котором было отмечено движение в поисковое дерево AVM.

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

Myp » 04 май 2012, 15:20

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

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

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

EDV » 04 май 2012, 16:46

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

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

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

Насчёт мяча, так что бы «без рук», наверное, не получится, так как руки то тоже двигаться будут, а вот если мяч поместить в «красную рамку» для обычного режима обучения, то AVM вполне может научиться его распознавать :wink:


cron
Rambler\'s Top100 Mail.ru counter