Finding a bullseye target
Download the Find Target Symbol robofile.
- First double click on the Surveyor_SRV1b module in the processing pipeline. It may take a while to appear since it
will immediately try to connect to the default SRV setting at 192.168.1.15. When it does appear change the IP address
to the one you are using. If you do not know the IP address of the robot you will have to check your router information
or see the Surveyor forum
for more information.
- Once you get the right IP address you should see the image from the SRV in the main RoboRealm GUI. From here you can
now place the robot in proximity of a bullseye target. Use the following link to view and then print out this target using your browser's File->Print menu.
Once printed place
the target somewhere within the line of sight of the SRV. The SRV will spin in place looking for the bullseye and head
towards it as soon as the target is seen. Once the SRV gets close enought to the target it will stop.
We track the bullseye target using specific properties of the target that are unlikely to exist
elsewhere in the environment. First we start with an example image that could be seen from
your robot while navigating around your hallway. Note that the target is placed low to the floor to ensure
best viewing by the SRV.
To segment the bullseye from the scene we first use the Adaptive Threshold module to identify
localized parts of the image that are much brighter or darker than their surrounding. This removes many bad lighting
issues and allows the target to easily be seen while most of the rest of the image is reduced to white. Note that
this thresholding works only on the intensity of the image and disregards the color so black and white images will
- From there we invert the image using the
Negative module as RoboRealm likes to
work with white objects instead of black ones.
- To remove all non-target objects we use the
specific property of a bullseye target that the center of gravity of each of the rings will be very close to
each other and in most cases in exactly the same spot. This is typically seen by a circular blob and thus is a very
effective filter for this type of symbol. We use the blob filter module to
eliminate any objects that do not have a close COG near to another blob, to eliminate any small objects from
consideration and futher check that we only result with blobs that are inside of other blobs. Thus we do lose
the outer ring of the target but the inner two are kept.
- To stop the robot when it gets too close
to the target we use the center of gravity module to create a COG_BOX_SIZE
variable which is a square estimate of the size of the target. Once this size increases beyond 70 pixels we
stop the robot. This is tested for in the next VBScript module.
- Finally we now need to tell the SRV how to move towards the bullseye. We do this by understanding on what side of the image the target is in. In our case it is on the right side. If the desired target point is right of image center then we need to move the robot right, whilst if it is on the left we need to move left. If we create this behavior the robot will move towards the target. The VBscript module allows us to write some VBScript to scale the motor values of the SRV based on the X coordinate of the target point. The more the X location is to the right the faster the LEFT wheel should turn and the slower the RIGHT one should turn and vice versa for the other side. The VBScript module produces a left_motor and right_motor variable that contains the suggested values that the SRV should perform. The SRV module then grabs those values and passes them onto the SRV to complete the cycle.