FRC competitions almost always allow for and encourage automated identification of targets. The field pieces usually have [https://wpilib.screenstepslive.com/s/currentCS/m/vision/l/288983-target-info-and-retroreflection retro-reflective tape] around the target in some pattern that makes it easier to identify. Robots illuminate the targets with bright colored LEDs and then look for the glowing target tape using a camera and software that processes the video from the camera to find the target pattern. The processing usually involves filtering the video frames (a frame is an individual picture from the video stream) to find just the target tape (e.g. by eliminating all colors but the color of the LEDs that is being reflected back by the tape), using edge detection algorithms to find the edges and corners of the target tape, and then calculating how to adjust the robot's position to line up with the target. For example, if the camera is in the center of the robot but the image of the target is left of center, the robot must turn left to properly face the target. [https://first.wpi.edu/FRC/roborio/release/docs/java/ OpenCV] allows you to do sophisticated processing of the received frames using various algorithms to filter the images, detect edges, and more. Unfortunately, image processing is very CPU intensive and the RoboRIO is not really up to the task. The $435 [https://forums.ni.com/t5/FIRST-Robotics-Competition/roboRIO-Details-and-Specifications/ta-p/3494658?profile.language=en RoboRIO] has a 667MHz dual-core processor with 256MB of RAM. For comparison, a $40 [https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ Raspberry Pi 3B] has a 1.2GHz quad-core processor with 1GB of RAM or nearly 4x the computing power. If you try to do much video processing using the RoboRIO, it slows to a crawl and can't perform its other robot-control duties well. For this reason, 2537, and most other teams, don't do much video processing on the RoboRIO, instead doing video processing on a [https://wpilib.screenstepslive.com/s/currentCS/m/85074/l/1027235-using-a-coprocessor-for-vision-processing separate platform] such as a Raspberry Pi and send the concise results (e.g. target angle) to the RoboRIO. Choices for video co-processors include: * Sending the video to the driver-station laptop for processing (free) - consider using tools like [https://wpilib.screenstepslive.com/s/currentCS/m/vision/l/463566-introduction-to-grip GRIP] * [https://www.amazon.com/Raspberry-Pi-MS-004-00000024-Model-Board/dp/B01LPLPBS8/ Raspberry Pi 3B] ([https://www.amazon.com/Raspberry-Pi-MS-004-00000024-Model-Board/dp/B01LPLPBS8 $38]) or 3B+ (note: Raspberry PI 4 is faster, but requires active cooling) * [https://pixycam.com/ PixyCam] ([https://www.amazon.com/gp/product/B07D1CLYD2 $60]) - simple but clever targeting approach, nice [https://docs.pixycam.com/wiki/doku.php?id=wiki:v2:teach_pixy_an_object_2 training ideas]. * [https://developer.nvidia.com/embedded/jetson-nano-developer-kit nVidia Jetson Nano] ($100) - which can use [https://www.jetsonhacks.com/2019/04/02/jetson-nano-raspberry-pi-camera/ RPi camera] and has [https://www.jetsonhacks.com/2019/06/07/jetson-nano-gpio/ Pi compatible-ish GPIO connector]. See this [https://www.maketecheasier.com/nvidia-jetson-nano-vs-raspberry-pi/ comparison] * [https://limelightvision.io/ Limelight 2] ($400) - not better than RPi / Jetson Nano, but available off-the-shelf 2537 has traditionally used a Raspberry Pi running custom C++ OpenCV software because Java adds enough overhead that it significantly reduces processing resolution/framerates. The system is described in detail [VisionFramework here]. There are now pre-packaged Raspberry Pi Vision for FRC images that are more friendly such as [https://github.com/wpilibsuite/FRCVision-pi-gen/releases FRCVision]. When using a co-processor, there are multiple ways to send the results back to the RoboRIO including: * [https://wpilib.screenstepslive.com/s/currentCS/m/75361/l/843361-what-is-networktables Network Tables] (for use on Pi see [https://www.chiefdelphi.com/t/has-anybody-gotten-networktables-to-work-on-a-raspberrypi/147256/13 here]) * UDP (for an example see [http://einsteiniumstudios.com/using-the-roborio-with-the-beaglebone.html here]) and its use in FRC [https://github.com/frc5687/pi-tracker/tree/master/src/org/baxter_academy/outliers2016/pi_tracker here]. Note: for Ethernet comms, be sure to use static IP addresses. * PWM (read about [https://wpilib.screenstepslive.com/s/currentCS/m/java/l/599716-counters-measuring-rotation-counting-pulses-and-more Semi-period mode]) * Serial communications To learn more about vision processing, see [https://wpilib.screenstepslive.com/s/currentCS/m/vision/l/682117-strategies-for-vision-programming ScreenStepsLive], this comprehensive [http://firstinspires-shanghai.org/guide/technical-guide/Vision_Processing.pdf Vision Processing document], and [https://www.youtube.com/watch?v=ZNIlhVzC-4g this video] from the !RoboJackets To learn more about using OpenCV in Java, see [https://www.programcreek.com/java-api-examples/?class=org.opencv.imgproc.Imgproc&method=Sobel here].