Finding a bullseye target

 Download the Find Target Symbol robofile.

  1. 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 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.

  2. 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.

  3. 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.

  4. 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 work too.

  5. From there we invert the image using the Negative module as RoboRealm likes to work with white objects instead of black ones.

  6. 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.

  7. 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.

  8. 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.