Lighthouse laser tracker, design comments & part recommendations wanted
coderdragon wrote 03/27/2015 at 15:12 • 5 pointsI'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!
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
I found some more information about lighthouse stations over at reddit -> https://www.reddit.com/r/Vive/comments/40877n/vive_lighthouse_explained/
They are using HDD motors for sweeping the laser. How easy is it to drive hdd motors reliably ? (let say with arduino) - speeking of arduino, is it capable of tracking/measuring so low time intervals needed for lighthouse ?
PS: How will they solve frequency division multiplexing problem? Can photodiodes sense diferent laser frequency?
Are you sure? yes | no
"...an ADC output to gray code to turn a stepper motor" ? I'm trying to understand how gray code is related to turning a stepper motor.
Are you sure? yes | no
Hi coderdragon. How is this project going? Im intrested in this too,and Googling for some time. So maybe we can share some idea.
I found a chip tda_gp22 maybe better for this job. It can measure the time between two pulse with ns resolution.Its commonly used for laser rangefinder. And not expensive.
Also there is several kinds of photodiode. Maybe PIN diode is better? Im not sure. Need test.
My problem now is how to distinguish the signal between two lighthouse emiter?
Sorry for my English.
Are you sure? yes | no
Great idea (and i really love the HTC Vive too!)
I think your concept is actually pretty solid, i'm just not sure if you would even need to use capacitor's, you can prolly just constantly poll the photosensors and instantly act upon a detection (i would read out all sensors, then process that output into a detection, then read out again)
Keep us posted!
Are you sure? yes | no
huh... Maybe? Since I ran the numbers last, it was revealed that the lighthouse lasers might do a total of 100 sweeps a second instead of 100 for each laser. So if the laser dot is 1/8th inch wide, at 15 feet it would be over the sensor for about 4000 ns, and you'd need to check the every sensor at a rate of 230 kilohertz?
You need a lot of accuracy to calculate depth but even then I might be shooting high at nanoseconds... Hmm. I didn't realize the sensor was going to be on that long. I will have to think about that. Thanks!
Are you sure? yes | no
You may wanna re-think a small part, im thinking it shouldn't use 'straight' lasers, but rather 'tall' lasers, so you basically get a single vertical line that goes the entire height of the room, scanning it vertically. Also, know that Valve actually said that while their current version uses lasers, the retail version will not, so lasers may not be the best approach.
Finally, there may actually be a a part missing too your idea, because the Vive uses multiple 'SteamVR base stations' (with a minimum of 2) which means there needs to be a way to differentiate between the lasers of the different stations (could possibly be done by different wavelengths, but i don't know nearly enough about lasers to give you any sort of certainty about that)
What you could try is simply send a mail to Gabe Newell, asking him to put you in touch with somebody (within Valve or HTC) that can give a little more inside in the tech of the HTC Vive, in my experience the guy is really great & responsive, so theres a fair chance you could actually get some details trough that route. gaben@valvesoftware.com
Are you sure? yes | no
it does in fact sweep with lasers that are spread out in a line :). One vertical and one horizontal sweep per base station. In theory the base stations might take turns with each laser, but I don't think that's something I can count on so it does need to have some logic to associate groups of hits with a single sweep.
I've emailed valve, the response was 'Sorry, no information yet, more later...' :)
Are you sure? yes | no