projects/ idealab/

Pinhole Tracking

The basic setup:

There are some number of mirror pans (2 in this picture) each with two independent degrees of freedom.  Each mirror pan has multiple mirrors (9 each in this picture).  The mirror pans reflect light from the sun onto a single stationary receiver.  The 9 mirrors on each mirror pan are angled to have a focal length roughly equal to the distance from the mirror pan center to the receiver center.

The challenge was to figure out how to track the mirror pans only using sensors mounted onto the receiver. When tracked correctly, the mirror pan normal points halfway between the vector from the mirror pan center to the sun and the vector between the mirror pan center and the receiver center, so that the light from the sun reflects off of the mirror, onto the receiver.

The single mirror pan case is pretty straightforward to control.  I used 4 photosensors mounted on the receiver (represented by the 4 red blobs in the picture) for feedback sensing and wrote a simple bang-bang feedback control loop in software to power the motors and keep the light patch on the receiver.  If the sun moves so that the light patch shifts and triggers one of the sensors, the controller stores the motor positions in memory, spins the motors so that the light patch moves towards the photosensor opposite of the one triggered, stores the motor positions in memory once the second sensor triggers, then moves the motors to the half-way positions between the two sensors.  This causes the light patch to shuffle around, but stay contained within the sensor limits.  The scheme could be improved to minimize shuffling, but this does "track" in the sense that it keeps the light patch on the receiver. After building this setup, the problem then was to track multiple mirrors at once.  Originially we thought we had to process the information from the 4 photosensors and somehow figure out which mirror was responsible for a triggering condition.  While it is probably possible, I always thought this was a nightmare problem of dealing with a huge number of system states, which would both be very difficult to program well and to wire up and deal with electrical sensor signal to noise ratio problems.  The breakthrough idea was to decouple the problem and have one set of sensors for every mirror.  Instead of putting 4 photosensors in the red blob positions, put 4 pinholes there and project a point of light to sensors behind the pinholes. The two dots shown in the picture behind the hole are from two mirrors pointed at the hole simultaneously. Based on the geometry of mirror location relative to the receiver, each mirror always projects to the same spot behind the pinhole, which is different than the spot that all the other mirrors project. The pinhole does not have to be on the receiver projecting behind it by the way.  The pinhole can be in front of the receiver projecting to sensors on the receiver:

After building this setup, the problem then was to track multiple mirrors at once.  Originally we thought we had to process the information from the 4 photosensors and somehow figure out which mirror was responsible for a triggering condition.  While it is probably possible, I always thought this was a nightmare problem of dealing with a huge number of system states, which would both be very difficult to program well and deal with electrical sensor signal/noise ratio problems in the wiring. 

The breakthrough idea was to decouple the problem and have one set of sensors for every mirror.  Instead of putting 4 photosensors in the red blob positions, put 4 pinholes there and project a point of light to sensors behind the pinholes. 

The two dots of light shown in the picture above, behind the hole in the receiver plane, are from two mirrors pointed at the hole simultaneously. 

Based on the geometry of mirror location relative to the receiver, each mirror always projects to the same spot behind the pinhole, which is different than the spot that all the other mirrors project. 

The pinhole does not have to be on the receiver projecting behind it by the way.  The pinhole can be in front of the receiver projecting to sensors on the receiver:

So if you put a sensor in each projection spot, you have an independent set of sensors for every mirror.  So at the expense of adding (n-1)*4 sensors (where n is the number of mirror pans) and the annoyance of requiring some precision of receiver placement relative to the mirrors once the pinholes and sensors are placed (precision you always need to some extent) the problem is brilliantly simplified to running an identical tracking scheme independently for every mirror. 

There are other ways to decouple the problem besides adding pinholes and sensors, such as viewing the mirrors with a camera mounted at the receiver, but this happened to be one clever way to break a difficult problem into several simplified independent problems that could recombine into a total system solution.