|
Missile Launcher Tracking from United States [16 posts] |
13 year
|
Is it possible to have the missile launcher track an object, and when centered on the object fire a shot?
Ben
|
|
|
from United States [16 posts] |
13 year
|
Or to be more exact, the missile launcher wouldn't be doing the moving, but the robot would have a missile launcher on it. So the robot would track an object, and when centered the missile launcher would fire.
Thanks1
|
|
|
EDV [328 posts] |
13 year
|
I think you could use AVM Navigator with VBScript program like this:
' 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
turret_v128 = turret_v + 128
turret_h128 = turret_h + 128
' Set turret control variables
SetVariable "TURRET_V_CONTROL", turret_v
SetVariable "TURRET_H_CONTROL", turret_h
SetVariable "TURRET_FIRE", turret_f
SetVariable "TURRET_V_128", turret_v128
SetVariable "TURRET_H_128", turret_h128
=============================
TURRET_H_128 - horizontal turret control
TURRET_V_128 - vertical turret control
TURRET_FIRE - fire signal
See attached program below. program.robo
|
|
|
from United States [16 posts] |
13 year
|
I never learned VB Script, but I think I semi understand it. To help out a newbie, where does the motor control come in?
Thanks!!!
Ben
|
|
|
EDV [328 posts] |
13 year
|
The source data for turret control is deviation of the object center from center of screen (variables dX, dY). Further it influence on status of intermediate control variables "turret_h" and "turret_v" that has range from -128 to 127.
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
The variable "threshold" is working like hysteresis that prevents self-oscillation of turret.
if dX < threshold and dX > -threshold and
dY < threshold and dY > -threshold then
turret_f = 1
else
turret_f = 0
end if
When object is found in center of screen then it activate fire signal (variable turret_f ).
|
|
|
from United States [16 posts] |
13 year
|
To use that VBscript you wrote for real, what would need to be modified?
|
|
|
EDV [328 posts] |
13 year
|
|
|
from United States [16 posts] |
13 year
|
Whats the range for AVM Navigator?
|
|
|
EDV [328 posts] |
13 year
|
The AVM Navigator is an additional module that is distributed along with RoboRealm:
http://www.roborealm.com/help/AVM_Navigator.php
And VBScript program use variables NV_OBJECTS_TOTAL, NV_ARR_OBJ_RECT_X, NV_ARR_OBJ_RECT_Y, NV_ARR_OBJ_RECT_W, NV_ARR_OBJ_RECT_H that was produced by AVM Navigator as the source data for object pointing:
NV_OBJECTS_TOTAL - total number of recognized objects
NV_ARR_OBJ_RECT_X - left-top corner X coordinate of recognized object
NV_ARR_OBJ_RECT_Y - left-top corner Y coordinate of recognized object
NV_ARR_OBJ_RECT_W - width of recognized object
NV_ARR_OBJ_RECT_H - height of recognized object
|
|
|
from United States [16 posts] |
13 year
|
Ok so for scale variable, my motor does not have a range. (It is the motor used in electronic scooters/wheel chairs. So how do I use that?
|
|
|
EDV [328 posts] |
13 year
|
However let's try another variant of VBScript program:
' Set the turret control variables
turret_h = 0
turret_v = 0
turret_f = 0
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 then
' The object is at left side
turret_h = - 1
end if
if dX < -threshold then
' The object is at right side
turret_h = 1
end if
if dY > threshold then
' The object is at the bottom
turret_v = - 1
end if
if dY < -threshold then
' The object is at the top
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
end if
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 - horizontal turret control
(0 - motor off, 1 - right turn, -1 - left turn)
TURRET_V_CONTROL - vertical turret control
(0 - motor off, 1 - turn it upward, -1 - turn it downward)
TURRET_FIRE - fire signal
See attached program below. program.robo
|
|
|
from United States [16 posts] |
13 year
|
I'll load it up and try it. Which reminds me, where exactly do I load VBscript?
Also, Is is possible to have a camera that is mounted on a robot to do the "looking" (pan/tilt) but have the robot drive towards it?
|
|
|
EDV [328 posts] |
13 year
|
|
|
from United States [16 posts] |
13 year
|
Thanks, I'll play around with it. So AVM Navigator is loaded when you load the vbscript right?
HAve you ever tried mapping with a kinect?
|
|
|
EDV [328 posts] |
13 year
|
>> Thanks, I'll play around with it. So AVM Navigator is loaded when you load the vbscript right?
Yes, of course the AVM Navigator will be placed to video-processing pipeline when you will load "program.robo" file.
>> Have you ever tried mapping with a kinect?
The main idea of AVM Navigator project is the using only visual images from one video camera as input sensory information for robot navigation (it does not stipulate for using of any other sensors like kinect, laser, infrared or acoustic detectors and etc).
|
|
|
from United States [16 posts] |
13 year
|
So does AVM navigator "warn" itself before bumping into anything?
|
|
|
EDV [328 posts] |
13 year
|
You can use emulator program (based on Quake 3 mod) for acquaintance with "Marker mode" and "Navigation by map" modes.
See "AVM Quake 3 mod" manual for more details:
http://www.roborealm.com/help/AVM_Navigator/avm_q3mod_help.html
You can download it from:
http://www.roborealm.com/help/AVM_Navigator/Setup_avm_q3mod.exe
How "Navigation by Map" works.
Obstacle avoidance
The robot processes the motion history of input images for the previous second. If any commands were given (i.e. the "forward" command) but no changes where seen in the input image (nothing happened) then the robot is assumed to be stuck (i.e. the robot is pushing against a wall). When stuck the module will set the movement variables to move backwards. The stuck situation is indicated by a red rectangle with a circle in the center.
Odometry / localization
The robot sets the marks (it writes central part of the screen image with associated data to AVM tree). Marker data (inside AVM) contain horizon angle (azimuth), path length from start and X, Y location position (relative to the start position). Information for the marker data is based on marks tracking (horizontal shift for azimuth and change of mark scaling for path length measurement). Generalization of all recognized data of marks in input image gives actual value of azimuth and path length. If we have information about motion direction and value of path length from previous position and x, y coordinates of previous position then we can calculate the next coordinates of the current position. This information will be written to the new mark (inside AVM) when it is created and so forth.
The set of marks inside the AVM gives a map of locations (robot see the marks and recognize its location).
|
|
|
from United States [16 posts] |
13 year
|
Is their anyway to map out entire rooms? (Or houses?) So you could click to go to this corner of a room etc. So instead of paths, rooms?
|
|
|
EDV [328 posts] |
13 year
|
You just set up visual marks that will be associated with map location coordinates in "Marker mode" (but it not create any path to somewhere) and then robot in "Navigation by map" mode will plan the path from the current location to the target position (maze solving) that you point to.
Thus if you could show every inch of your rooms to robot (in "Marker mode") then it would allow to move robot to any random position in your house:
http://www.youtube.com/watch?v=5qKQg5e4wbc
|
|