Open Source Time-of-Flight DIY Lidar
github.com
github.com
For the source they are using an osram SPL PL90_3 laser diode which provides 75W peak output at 900nm, with pulse duration roughly 10ns and costs $10.
For the detector they are using a MTAPD-07-013 avalanche photodiode, which has a quantum efficiency of about 80% and an internal avalanche gain of 100 and 0.6ns rise time. Also costs about $10.
For the time measurement they are using a TDC-GP21 time to digital converter with 22ps resolution, although the author has it configured for 90ps counts. Costs a bit over $5.
It is really a testament to the amount of development work that has gone into the lidar and related field, that for under $100 you can build a full lidar system out of parts from digikey including custom pcb's and scan mirror. When I was in grad school we paid $7500 for our avalanche photodiode, $25k for our pulsed laser, and used a $50k oscilloscope to read it out.
Why did you write "they are using"? Thre was no team, it's my own project.
"This use of they isn't ungrammatical, it isn't a mistake, it's a feature of ordinary English syntax that for some reason attracts the ire of particularly puristic pusillanimous pontificators, and we don't buy what they're selling."
There's not a man I meet but doth salute me
As if I were their well-acquainted friend
- A Comedy of Errors, Act IV, Scene 3> What kind of details do you want to know?
What is the limiting factor on the precision - is it just the specs of the TDC-GP21 or something else?
How did you calculate the appropriate laser lens and standoff?
Is the CS mount lens's focal length important, or is there no need for a sharp image at all distances?
Why use one CS-mount lens and one M12 lens, rather than two M12 lenses?
Do you need any sort of dynamic gain or optical filtering on the received signal? Is it vulnerable to getting washed out by bright sunlight?
Did you need much fancy $$$$ test equipment to get the design working, or did you achieve it with tools mere mortals can afford?
Precision in this project is limited by rise time of the received signal. Meanwhile, this time is limited by rise time of laser's current. It is too long now - 10 ns.
Theoretical TDC resolution is ~13mm per BIN.
You could see real results here: https://github.com/iliasam/OpenTOFLidar/wiki/Resolution-of-t...
> "How did you calculate the appropriate laser lens and standoff"
I can't say that there was too much calculations.
The is some information here: http://www.ti.com/lit/ug/tiduc73b/tiduc73b.pdf (part 2.3.5)
and here: http://www.ti.com/lit/ug/tiducm1b/tiducm1b.pdf (part 2.3.2)
Laser's lens should have maximum possible focal length, but it must not crop light beam from the diode.
Photodiode's lens should have maximum Entrance pupil
> "Is the CS mount lens's focal length important, or is there no need for a sharp image at all distances?"
You need to have sharp image at big distances. At short distances it is not important - light signal is high enough.
> "Why use one CS-mount lens and one M12 lens, rather than two M12 lenses?"
I think that it is easier to find lens with big "Entrance pupil" with CS mount that with M12 mount. Bigger mount - bigger lens diameter, bigger "Entrance pupil".
> "Do you need any sort of dynamic gain"
I don't have any kind of electrical gain control. There is an ability to change APD gain, but I don't use it.
> "optical filtering on the received signal"
I don't have filter in my LIDAR, but it is necessary to have it if you are going to run LIDAR at sunlight. I give links to a several interference filters in "LidarTotalBOM.xlsx".
> "Did you need much fancy $$$$ test equipment to get the design working".
All that I have is Tektronix TDS540D oscilloscope (bought at the Ebay for $300) and multimeter.
Peak power vs. SNR favours pseudorandom sequences with a peaky autocorrelation function. In practice, an LFSR is typical, but if you use e.g. AES-CTR, you can get quite a lot of resilience against (intentional) jamming and be potentially undetectable as long as the sensor doesn't move directly into the beam.
There is no need for an FPGA, but you will rather quickly throw FFT correlation processing at it.
This would not use any delay lines. You'd just need to lock the sampling of your ADC to the signal generation, because 2ns jitter are 30cm/1ft jitter in distance.
However it still takes a lot of effort and most of your free time. You have to be extremely driven to complete such a complex project.
I took a serious "staycation" back in December, and wrote about it here: https://www.reddit.com/r/Coronavirus/comments/fgvbsv/staythe...
During those few weeks, I made what seems like a year worth of progress on several projects. Being able to dive in and focus, for hours at a time without worrying that I had other stuff I should be doing, made all the difference in the world.
Rearranging your week to have one "no-chores no-email" evening, when you just use a single large block of time to immerse yourself in a leisure activity, is worth a try.
This has basically become possible due to cheap and accessible TDCs. Both TI and Ams make them now, designed for gas ultrasound flow sensing. Most of the other components have been readily available for a while (not sure about the APDs, but certainly you could buy stuff from Hamamatsu or Thorlabs/Edmund). ROS makes SLAM quite easy if you have a hardware driver, though the utility that the author made for debugging is very neat.
How about measuring through translucent or transparent surfaces? Should work as is if there is no reflection (e.g. measurement at Brewster’s angle for this wavelength) but is it possible to TOF multiple reflections from? Or multiple depth slices (e.g. by gating TOF to specific depth ranges? 1ns=~1ft=~30cm
Measuring through translucent or transparent surfaces is theoretically possible (TDC is supporting multiple measurements), but received pulse width is too high now - it could be > 30ns after amplifier.
I know I don't have anything smart to say about this specific subject, and I usually try to follow the old german saying "Selig sind die, sie nicht zu sagen haben und trotzdem schweigen" (hope I got it right - I don't actually speak german), which means "Blessed be those, who have nothing to say and nevertheless remain silent..."
If I can provide more feedback, while looking at your project, I had the following thoughts:
- This is super impressive.
- I'm thankful that people spend time making technology
opensource.
- I'm sure this will grow over time and more "complex"
technology will become open this way.
- I'm curious in which context the author decided to
dedicate that much time to this cause (probably in
academia? or someone with access to a lab and a lot of
experience in all the fields involved in this project).Selig sind die, die nichts zu sagen haben und trotzdem schweigen
I was under the impression that it a well known saying when I first heard it, but google doesn't come up with many hits for me (and some with wrong spelling) - likely because of my google bubble / history.
Is this a common/well-known saying?
One variation I’m thinking about and want your opinion on. I’m building a circuit that VERY precisely (think <1ms accuracy) marks the start and end of when a high speed object passes the field of view. The exact scenario is a bit hard to describe if you aren’t familiar with the subject area, but an analogy that works well is imagine having two sets of cones laid out on the ground with 10 meters between the groups. Then imagine a car doing 100mph between the two sets of cones. What I need to be able to answer is:
- did the car go between the first set of two cones?
- what’s the exact time it went between them?
- did the car go between the second set of two cones?
- what’s the precise time it went through the second set?
- what’s the calculated speed between the two sets?
The real scenario isn’t touching the ground, so anything pressure sensitive doesn’t work. I’ve been currently experimenting with using lasers on both the start and end gates and an fpga doing the calculations, but I’d love if I could do this with a single laser setup using a scanning setup like yours.
Can you speak to how hard it would be to use something like this to precisely (1ms or better accuracy) measure a low flying object between a starting and ending point?