The receiver, located on the ground, has the job of waiting for the CubeSat's laser to find it and then returning a laser to confirm its location.
Finding the CubeSat
Using Lens Geometry: Once the receiver is hit with the laser, it has to determine where it came from in order to send the confirmation signal. We have used a lens to focus the incoming laser; the point of focus is enough to determine the incoming angle of the laser.
Testing Setup: Our setup consists of a box with a lens mounted on the front. This keeps light out except what is focused by the lens. At the focal point of the lens, inside the box, is a flat screen on which to view the focused laser. Facing this screen is a webcam, which is hooked up to a laptop. Also in the box are 4 LEDs, on the corners of the screen. These allow the camera to automatically find the corners of the box to determine exactly where the laser is focusing.
Software: Our webcam data is gathered by a program written in Processing, using a library called JMyron. This library allows data to be pulled from the webcam easily. The program has several phases. In the calibration stage, it tells the four corner LEDs to turn on, and then it searchs the camera for bright spots. It sorts the spots from left to right and top to bottom to find out which bright spot is which corner. Then, knowing it's orientation, it turns off the LEDs, and waits for the focused laser to appear. It then saves the location of the focused laser, and converts the data from pixels on the webcam to millimeters on the screen in the box to the direction of the laser in radians and finally to a command to the stepper motors to move to that direction. These stepper motors are controlled by a motor shield on an Arduino, so Processing has to send this command to an event-driven program running separately on an Arduino, which is listening to the computer via USB.
Laser Turret: Coming Soon!