LabVIEW Code
The previous articles detailed the theoretical approach to identifying the Vision Targets on the 2014 FRC Field. This article details the implementation in the LabVIEW code that matches this theoretical approach.
Integrating into Program
Finding the Example
The 2013 LaVIEW example vision code is bundled along with the other LabVIEW examples. To find the example from the LabVIEW splash screen, click Support >> Find FRC Examples then open the Vision Folder and locate 2014 Target Detection.lvproj
The Front Panel
2014 Target Detection.vi is the main VI of the project. Double clicking on this VI in the Project Explorer will show the front panel shown above. The front panel contains a variety of controls and indicators used in the example
- The File/Camera controls: This section contains the controls for selecting the camera to connect to or file to process. On the File Images tab, clicking the folder icon will allow you to browse to a directory containing the desired images, then click the image in the box to select it. On the Live Camera tab you can enter the IP address of the camera to connect to and set the resolution, framerate, and compression.
- The Camera Type: The camera type control changes the view angle used in the distance calculation based on the camera used.
- The Color Threshold Controls: This section contains the controls used for the initial thresholding operation on the image. The Color tab has controls for the Hue, Saturation and Value and margins for each (to set the width of the range). Note that these values can be set automatically by clicking and dragging a line on the desired color in the Original Image section. Remember that to save modified values, after the program has stopped running right click on the desired control and select "Data Operations" >> " Make Current Value Default"
- Area Size Limit: This controls limits the minimum particle size to be scored as a percentage of the total image size.
- Score Cutoff: This section sets the minimum limit for each score used to determine if a target is a hot target. A target pair must exceed this minimum for the Tape Width and Vertical Score and one of the two directional scores to be considered a Hot Target.
- Std Devs: This section is used to tweak the behavior of the automatic color selection. The numbers in the boxes represent the number of standard deviations from the mean that will be included in the range created when a line is drawn across the image.
- Original Image: This section contains the original unprocessed image. Clicking and dragging anywhere in this image will set the color threshold values to detect that color. Detected particles will be annotated depending on whether they are determined to be a target or not. Particles which are not targets or a pair of targets which are not considered a Hot Target will be surrounded by a red box. Non-Targets will include the Aspect ratio and Rect score highlighting in red the scores which do not meet the cutoff, not-Hot pairs will include the Left, Right, Tape Width and Vertical Scores, highlighting in red scores which do not meet the cutoff. Particles which are vertical targets determined to be not hot targets are surrounded by a teal box with the Aspect Ratio and Rectangularity scores in teal. Hot targets will be surrounded by a green box with the Left, Right, Tape Width and Vertical scores in green (the unused Left or Right score will be in grey).
- Debugging Tab: This tab shows the processed image. This is the image after thresholding, but does not show the results of the particle filtering.
- Details Tab: Clicking on the Details tab will show an array indicator (click the arrows near the top right of the tab to view other particles) containing details on each detected particle/target.
- Loop Time: This indicator shows the rate at which the loop is running.
Acquiring an Image and Clearing Overlays
Set Threshold Values
Target Search
The Process Image for Target VI is responsible for thresholding the image, filtering out small particles and determining which particles are believed to be horizontal or vertical targets.
Target Search Details - Threshold
Target Search Details - Particle Filter and Report
Target Search Details - Scoring
This section of the code scores the particles on Rectangularity and Aspect Ratio and indicates whether the particle is larger horizontally or vertically. It uses the orientation to pack up the Equivalent Rectangle measurements, along with the other values, into a cluster which is output from the VI.
Score and Rank Targets
The Score and Rank Target Objects VI iterates through each vertical target and determines the best matching horizontal target then compares the Left or Right Score, Tape Width Score and Vertical Score to determine if the target is a Hot Target. This VI also annotates the image and sorts the detected targets in the order Left Targets, Right Targets, Not Hot Targets.
Find Horizontal
The Rank HV Combos VI iterates through each Horizontal Target and computes the Left Score, Right Score, Tape Width Score and Vertical Score. It then sorts the Horizontals by Total Score (sum of Left, Right, Width and Vertical) to select the best matching Horizontal for the Vertical.
Score and Rank Targets Details - Score Compare
Score and Rank Target Details - Annotation
Compute Distance
Sample Images
A number of sample images are provided in the example Project Directory. The provided images are broken up into groups, one group is of a pseudo-target in the Hot position (reflective tape attached directly to the polycarbonate in the correct locations). Another group is of the pseudo-target in the Not hot position. The last group is images of the actual target setup from the kickoff filming field. All lit images were taken with a pair of green LED ring lights that nest one inside the other. While these images should help teams test algorithms quickly, it is highly recommended to utilize the reflective material provided in the Kit of Parts to create a target to test the camera and lighting setup that will be used on the robot. Note that the measurements in the image filenames are very rough and should not be taken as accurate measurements to be used for distance calibration calculations.