Screenshots     Download     Purchase     Documentation     Tutorials     Resources     Contact     Forum     Search  

 

VBScript Plugin

Please be sure to read the Plugins page to get a general sense of if the VBScript module is a good fit for your project.

The VBScript module provides a way to create custom Visual Basic scripts that can be used to process image statistics and map then toward servo/motor values. This module is intented to be used as a way to quickly perform custom operations without needing to implement a Plugin or use the API which typically require external tools.

The interface allows two methods for specifying your code. One technique requires that you specify a text file as the source of the program. You can use your favorite text editor to edit/create this file. The file should be a regular text file containing VBScript commands/functions/operators. The program interface displays the current file being used, available system or user variables (and their values) and any messages the program produces.

The alternate way is to include the VBScript text within the provided text box (see below). Using this technique allows you to include the VBScript code within the .robo program and not require another user to save the code and reference a text file as needed by the above file based technique. Using the text box provides a quick way to enter in text but is NOT meant as a replacement for a full featured text editor as its editing features are very basic.

Interface

RoboRealm Specific Functions

  • VariableExists("variable_name") - returns true or false depending on if the specified variable exists in RoboRealm. Several of the variable return functions below will return a valid value regardless of if the variable exists or not. You can use this function to determine if the value returned from one of these functions is a valid value.

  • GetVariable("variable_name") - returns an integer value of the specified variable. Zero is returned when the variable does not exist.

  • GetFloatVariable("variable_name") - returns the float value of the specified variable. A zero is returned when the variable does not exist.

  • GetStrVariable("variable_name") - returns the string value of the specified variable. An empty string "" is returned when the variable does not exist.

  • GetArrayVariable("array_variable_name") - returns the array associated with the specified variable. An array is ALWAYS returned but the length (ubound) will be zero if the array does not exist.

  • SetArrayVariable "array_variable_name", array_variable - sets an array associated with the specified variable name; for example
    ReDim points(4)
    
    points(0) = 100
    points(1) = 100
    points(2) = 150
    points(3) = 200
    
    SetArrayVariable "waypoints", points
    

  • SetVariable "variable_name", variable_value - sets the variable value to the specified variable

  • SetTimedVariable "variable_name", variable_value, timeout - sets the variable value to the specified variable after the timeout (milliseconds) has passed

  • GetPixels - returns an array of RGB values of the current image

  • SetPixels pixel_data_array - sets the current image to the specified pixel RGB data

  • SetParameter "module_name", index, "param_name", "param_value" - changes the specified parameter in the specified module to the specified value. This is useful when a GUI dialog does not have a variable selection as part of the dropdown. Avoid using this function unless necessary as it is slow to update the GUI.

  • GetParameter("module_name", index, "param_name") - returns the specified parameter in the specified module. This is useful when a GUI dialog does not expose a value within a variable.

  • GetFloatParameter("module_name", index, "param_name") - the float version of the above routine.

  • GetStrParameter("module_name", index, "param_name") - the string version of the above routine.

  • Write "text" - sends text to the VBScript module message output area in the dialog interface (used for debugging)

  • StopProcessing - stops RoboRealm from continuing to process the images with the remaining modules

  • CameraOff - switches off the image capturing from the current camera

  • CameraOn - switches on the image capturing using the current camera

  • PushButton "Module_Name", Module_Index, "Button" - automates pushing a button in one of the RoboRealm GUI windows. For example:
    if GetStrVariable("test") <> "pushed" then
      SetVariable "test", "pushed"
      PushButton "Read_AVI", 0, "Start"
    end if
    
    will cause the Read_AVI module (assuming one exists in the pipeline) to start playback.
    PushButton "RoboRealm", 0, "Snap"
    
    will cause RoboRealm to create a snapshot of the current image.

  • atan2(x,y) - arc tangent function not present in VBScript but useful for trigonometric calculations

  • sqrt(x) - square root function not present in VBScript but useful for trigonometric calculations

Examples

To access variables from your VBScript file/script use the following commands:

MyVar = GetVariable("variable_name")

Or to create a new variable use

SetVariable "variable_name", variable_value

Once a new variable is created this variable becomes available to control functions (such as in the SSC module) that can be used to automatically control a servo/motor.

You can also get variable arrays using

MyVar = GetArrayVariable("variable_array_name")

or get individual entries in an array using

MyVar = GetVariable("variable_array_name:2")

which would return the second entry in an array.

To change a variable's value in X milliseconds you can use

SetTimedVariable "variable_name", variable_value, timeout_in_milliseconds

which is very useful for resetting motor values after a period of time.

All regular VB Script commands and operators are available for use in the VBScript file. See Microsoft Scripting for complete documentation on how to use these commands or view the sample files for examples.

For example the following program (assuming you have added the Center Of Gravity module) will map COG to servo motors:

  cogx GetVariable("cog_x")
  cogy 
GetVariable("cog_y")

  
if cogx < 140 then
    
left_motor 60
    
right_motor 128
  
else
    if 
cogx > 180 then
      
left_motor 128
      
right_motor 60
    
else
      
left_motor 128
      
right_motor 128
    
end if
  end if

  
SetVariable "left_motor", left_motor
  SetVariable 
"right_motor", right_motor    

Note that the COGX values range from 0 to 320. COGY ranges from 0 to 160. These values are bounded by the current image size. These values may change if you crop, shrink, etc. the image dimensions.

You could then use a module like the SSC module to map the "left_motor" and "right_motor" variables to actual servos.

You can also process the image pixels directly using VBScript. This is useful for prototyping but not recommended due to performance reasons for actual usage. The VBScript module supports two routines to get and set the image pixels. Following is the example SwapColor module but in VBScript.

  Dim pixels

  pixels 
GetPixels()

  
for to (320*240*3)-step 3
    
tmp pixels(i)
    pixels(i) 
pixels(i+2)
    pixels(i+2) 
tmp
  
next

  
SetPixels(pixels)

To write variables or debug statements to a log file you can use

  Dim fi
  
Dim fso
  
set fso = CreateObject("Scripting.FileSystemObject")
  
set fi fso.OpenTextFile("c:\temp\test.txt"8true)
  
if err.number then
    
fi.writeLine GetVariable("cog_x") & ":" & _
      GetVariable(
"cog_y")
    fi.close
  
end if
  set 
fi = nothing
  set 
fso = nothing

If you need to wait for a specific condition in a loop you will have to setup a trigger variable. You can't really sleep, wait or loop in the VBScript module as that would stop all image processing while it is waiting for the loop or sleep to finish. As the pipeline is essentially an infinite loop (i.e. grab an image, process it, then grab another, etc) adding a sleep would cease all execution which is usually not desired. If you prevent the ending of the loop by putting a while loop in the code it will not allow the system to capture new images and continue processing. So instead you can use the SetTimedVariable to cause the variable to change value after X number of milliseconds. Your script would look something like

period 2000
step = GetVariable("step")
if step = then
  
SetVariable "data"2
  
SetVariable "step"1
  
SetTimedVariable "step"2, period
else
  if step = 
then
     
SetVariable "data"4
     
SetVariable "step"3
     
SetTimedVariable "step"0, period
  
end if
end if
which would cause the variable data to oscillate between 2 and 4 with a period of 2000 seconds. Note that usage of step and setting it to 1 and 3 which are dummy steps where nothing is done.

Note that VBScript can access external activeX objects such as the Microsoft XML Http object. The following example shows this technique to issue a custom URL to a remote machine. Be sure to also have a look at the HTTP module for such tasks.

' Show Status Output 1
Dim a
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open 
"GET""http://172.17.42.54/axis-cgi/io/output.cgi?check=1"False
objHTTP.send ("")

= Split(objHTTP.responseText, "="
SetVariable(
"Output1"),a(1)

' Activate Output 1
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open 
"GET""http://172.17.42.54/axis-cgi/io/output.cgi?action=1:/"False
objHTTP.send ("")

' Deactivate Output 1
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open 
"GET""http://172.17.42.54/axis-cgi/io/output.cgi?action=1:\"False
objHTTP.send ("")

Variables

On each successful run of the script the SCRIPT_COUNT variable is incremented. Thus you can use this variable to indicate a first run state where variables can be initialized to default values. Note that the Reload and Run button will reset this count to 0.

Downloads

If RoboRealm complains about missing components you may need to download the Microsoft Script Control.

See Also


CScript Program
Python Program


VBScript_Program Related Forum PostsLast postPostsViews
Scripting problem
I am having some problem with VB scripting? I'm trying to send a value to PIC using serial port in order to control the movemen...
1 month 3 119
Controlling motors of iRobot Create through VB script program
Hi, I'm trying to write a script using the VB script program in RoboRealm to cause iRobot Create to respond to th...
2 months 4 136
Joystick control of servos
I am very new to RoboRealm and am really loving it. I am controlling a mini maestro 12 servo contro...
3 months 3 227
Multiple camera problems
I've got 2 identical webcams, that use the Microsoft camera driver on Vista 64. They both work individually in Roborealm (i can...
5 months 15 325
Spykee Red Ball
Hi. I loaded the Spykee Red Ball program into roborealm and spykee just starts rolling forward. It doesn't track anything. Is t...
6 months 6 438
robot control using controller with 1 analog stick
i need help trying to control a robot with a controller that has only 1 analog stick, if the controller is pushed to the right t...
6 months 2 212
Setvariable RGB filter colour
Hello all, What a great program :D And a useful forum too. I have bee...
7 months 4 207
Change cameras
I read through the FAQ and guides about using multiple cameras but I am not sure how you recommend interfacing wi...
8 months 6 371
interactive pointer project
if GetVariable("COG_AREA") > 0 then   SetVariable "prev_x", GetVariable("next_x"...
8 months 1 185
Tracking Object with camera movement only
Hy !!! I have a SSC-32 (servo controller) with two servos 180o (not continuous rotation servos). An...
9 months 3 920
border points
Hi! I have a little problem... I am trying to find min_x and max_x value on a speciefied Y (for example COG_Y). I...
10 months 6 551
Variable time limit?
How would i tell roborealm to do something for x amount of time. Example, Tell move=16 for 5 seconds. Then wait 5 Seconds....
11 months 14 650
VBScript saving to file help
Hi I wonder if someone with more experience than I have in VBScript could help me. I'm tracking mu...
2 months 3 710
vbscript to calculate processing time
Good afternoon, I am tinkering with an application requiring me to know the time to process an image. In the scrip...
3 months 2 749
Outdoor navigation
Hello everyone I'am Bob. I'am part of a project group at my school and we are building a robot which should be a...
3 months 7 778
Serial Sequence
In the serial communications console area i am sending the code \\x10\\xff\\xef\\x80\\x80\\x80\\x80...
4 months 35 1032


© 2005 - 2010 RoboRealm. All Rights Reserved. | Contact | Glossary | Privacy | Disclaimer | Link to Us | Resources | Site Map