Lighthouse laser tracker, design comments & part recommendations wanted

coderdragon wrote 03/27/2015 at 15:12 5 points

I'm too impatient to wait for Valve to put out documentation on their Lighthouse VR tracking technology and want to at least get a leg up on making my own tracked objects.

If you don't know, Lighthouse sweeps the room with a hundred broad laser lines a second. The headset & controllers time when the laser sweeps over at least 5 IR sensors and calculate their location to withing a fraction of a millimeter up to 15 feet away, and the rotation.

From some simple calculations, I think a nanosecond of accuracy is about what you need for that tracking resolution, and I think I can get that with pretty cheap parts.

My plan right now:
Have ~15-30 photosensors, each trigger a small capacitor to be filled. The capacitor has a small resistor that bleeds it off at a constant rate. A chip or two with multiple ADCs constantly loops through, checking the voltage of each sensor's cap, recording 'how long since last signal', and sending anything it sees to another chip that will do the triangulation and pose calculation. It seems to me that a 12 bit ADC at 1 msps should get me up to a nanosecond with some error tolerance. 16 bits at 40+ksps might do as well, but I'm not sure how worried I might need to be of pulses that come close together.

So first off, please point out all the glaring flaws in this. The sum of my experience with microcontrollers so far is making a PIC convert an ADC output to gray code to turn a stepper motor. So I have no idea how to judge whether this idea is practical or not, or if there's some fantastically easier way to do this.

Second, what parts and constraints do I need to be considering?
1. Sensors - Will a cheapo IR photodiode do, or will I need one specifically made for speed? What circuitry will I need between the photosensor and the capacitor? Just a transistor, a full opamp? I probably need to have an adjustable threshold, how would I work that in?
2. ADCs - I was thinking about using a PIC or AVR with 20ish 12 bit ADC channels. Two+ chips with fewer channels might work also. Would it be better to go with a higher bit count and lower samples per second? How much room for error would I need?
3. Communication - I2C? UART? I know nothing of this.
4. Processing - will I be able to read a constant flood of I2C communications from the ADC-handling chips and do all the data cleanup and triangulation, or should I have some intermediate data cleanup handler. Should be noted that most of the time there won't be a lot of communication. Is interrupt handling a thing and something that might be appropriate here?

I'm probably also going to want a 6dof IMU, I haven't even thought about how to include that yet... and eventually this is all going to go over bluetooth. Is that something I need to worry about sooner or later?

So short term, once I have a good idea of the general parameters I'm going to need, I can start playing with photodiodes and prototyping. Should I persue the draining cap -> ADC route, or something else? On board or external ADCs? fast and lose or slow and precise?

Thanks!