Если сервомоторами получается рулить вручную, значит прошивка для Arduino подошла, и тогда на пины 3 и 5 нужно выдать значения переменных управления, которые сформирует написанная нами программа на VBScript.
Возьмём за основу программу из
вот этого примера:
- Код: Выделить всё • Развернуть
' Get turret control variables
turret_v = GetVariable("TURRET_V_CONTROL")
turret_h = GetVariable("TURRET_H_CONTROL")
turret_f = GetVariable("TURRET_FIRE")
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
threshold = 40
if dX > threshold and turret_h > -128 then
' The object is at left side
turret_h = turret_h - 1
end if
if dX < -threshold and turret_h < 127 then
' The object is at right side
turret_h = turret_h + 1
end if
if dY > threshold and turret_v > -128 then
' The object is at the bottom
turret_v = turret_v - 1
end if
if dY < -threshold and turret_v < 127 then
' The object is at the top
turret_v = turret_v + 1
end if
' Is the target locked?
if dX < threshold and dX > -threshold and dY < threshold and dY > -threshold then
turret_f = 1
else
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 > 0 then turret_v = turret_v - 1
if turret_v < 0 then turret_v = turret_v + 1
turret_f = 0
end if
' Set turret control variables
SetVariable "TURRET_V_CONTROL", turret_v
SetVariable "TURRET_H_CONTROL", turret_h
SetVariable "TURRET_FIRE", turret_f
Переменные управления сервомоторами по горизонтали и вертикали TURRET_H_CONTROL и TURRET_V_CONTROL имеют диапазон от –128 до 127. С помощью модуля «Scale Variable» преобразуем их диапазон к Sprkfun’овскому – от 500 до 2500 и полученные переменные SPF_TURRET_H и SPF_TURRET_V передадим в модуль «Sparkfun Arduino» на пины 3 и 5.
Я
добавил переделанную программу в ZIP файле, там лежит “spf_tracking.robo”, который можно загрузить в RoboRealm.
ylvov писал(а):Что нужно выбрать и в какой последовательности в Roborealm меню для слежения?
Вначале нужно распечатать маркер, к примеру «
Иди сюда», и вызвать из конвейера обработки Навигатор. Затем очистить дерево поиска AVM (нажать «Set key image size (New)» и ответить “Yes”). Обучить AVM на маркер, нажать на «Learn object» и расположить маркер в синей рамке для обучения. После обучения, желательно подольше «помаячить» маркером перед видеокамерой, что бы AVM выполнил дополнительное обучение на маркер (подмигивание голубой рамкой). Ну а затем можно
загрузить программу в RoboRealm, включить сервомоторы перемещающие видеокамеру и посмотреть как это всё вместе будет работать.