The year I joined New Berlin Blitz was the year of the FIRST game Recycle Rush. The object of the game was for teams to build a robot that could stack totes (boxes) and recycling bins in order to score points. The video explaining the complete rules of the game is provided on the right.
As part of the programming sub-team, I worked on coding the autonomous portion of the game for the robot. The yellow totes in the game had two L-shaped pieces of highly reflective tape on either side. My primary task was to use a vision processing software to develop vision tracking for these specific yellow totes. I was successful in creating a game-specific software, but the team did not use the underlying concept of my work for another two years.
The process for creating this software was relatively simple. I used an AXIS M1011 camera (left) with a ring of bright green LED lights surrounding the lens to provide some reflection onto the tote. I then used a vision processing software called RoboRealm to filter out surrounding background areas so that the camera could track just the reflective part of the totes without being distracted by objects that weren't the target. Finally, I wrote a short program such that a robot within a few meters of the tote could align itself with the reflective tape in order to easily pick up the tote and stack it to score more points. Some screenshots of the vision processing and my code are shown below.
For the vision project, I was tracking the yellow tote with reflective tape. The top picture to the right was the primary tracking target. With the ring of green LEDs on the camera, the reflective tape showed up in the camera almost exclusively in the color green. I used a color filter to filter out the green L-shaped reflective tape, and the a blob filter to make sure there was little to no noise in the background. This was the option I ended up utilizing in the final program that controlled the robot's motors.
The alternative option was to track the entire blob. Similar to the procedure I used above, the color I filtered out in this case was yellow. I could then choose to either track the entire yellow blob, or the two black L-shaped blobs within the big yellow tote blob. It turns out that both of these methods were much more inefficient than the first. In tracking the yellow blob, the size of the tote would vary based on the surrounding lighting, which would throw off the program, especially if there were multiple yellow totes lined up in a row. Tracking the black blobs was inaccurate for almost the same reason - it blended into the background a little too much! Ergo, I just used method number one.