Saturday, November 26, 2011

Laser Pulse Analysis

I have seen on a few forums where people discuss safety issues related to the laser used in a LIDAR. How long can the laser be powered on, etc. Mostly concerning eye safety so you don't go blind!

I setup a test with the Neato LIDAR so I could measure the laser pulse while the LIDAR assumed it was rotating at 300 RPM. Using a microcontroller (msp430F1232) I simulated the pulse train that is normally received by the Piccolo Board from the slot sensor. This meant I could connect the scope to the LIDAR and take some measurements.

Here are a few pictures of my test setup and from my notebook on what I found.  Keep in mind until I determine more about the laser module this information is incomplete.  I'm just getting warmed up!

The test setup...  Black box above the breadboard is used to supply the 3.3V for the Neato Piccolo board and supply the simulated rotation signal.  The small red board on the breadboard is a FTDI board feeding data from the LIDAR into my PC.  

Laser is pulsed on for 200uS and off for 350uS while operated at a simulated 300RPM.

Scope probe in the back of the module measuring laser feedback photodiode.  Wires from the Piccolo Board are soldered to a header which is placed in the breadboard.

Some information about the LDS HORIZ BOARD which the Piccolo board and module above mounts too.  Pulse train shown at the top, notice the start is a half long pulse followed by 14 full length pulses.  This is how the module determines its rotational speed and makes adjustments to the motor speed which is spinning the module.

Observational data about the laser pulse, maximum and minimum rotational speeds that the laser will operate, etc.


  1. Hello,

    I have been following your amazing work on the Neato reverse engineering.

    Given your measures of the laser pulse length according to the rotation speed, we can compute the number of pulses per turn :
    At 478 RPM => laser pulse period = 488 +200 = 688 µs => laser pulse frequency = 1453 kHz => 3 pulses/tr
    At 300 RPM => laser pulse period = 352 +200 = 552 µs => laser pulse frequency = 1812 kHz => 6 pulses/tr
    At 180 RPM => laser pulse period = 720 +200 = 920 µs => laser pulse frequency = 1087 kHz => 6 pulses/tr

    The question is about the measure at 478 RPM. If I am right, there are only 3 pulses per turn at this speed, compared to the 6 pulses per turn at lower speed.

    Is it that the 488µs measure is wrong ? Or maybe it is written 188µs (that would lead to about 6 pulses/turn) ? Or finally is it a problem with the laser diode that cannot be activated at 50% of the period, so the system reduces the on/off ratio ?

    I hope theses remarks can help you, maybe by taking some more measures to validate the laser period at 478 RPM, or by checking at which rotation speed the system drops from 6 to 3 pulses per second.

    Keep up the good work ! I learn a lot on Lidar with it !

  2. Arnaud,

    Thank you for the analysis. I believe you are correct in your assumption that at 478 RPM the LIDAR is reducing the pulses. It may even be reducing the pulses long before 478 RPM, I did not ramp up the RPM's slowly and watch to see what happens.

    I will be posting a schematic of the Piccolo board soon along with scans of the bare PCB. Looking forward to your feedback!

  3. This comment has been removed by the author.

  4. Don't take my previous comments into account.
    I made a mistake between RPM and RPS... so I have an error factor of 60. Here are the corrected values:

    At 478 RPM = 8 RPS => laser pulse period = 488 +200 = 688 µs => laser pulse frequency = 1453 kHz => 180 pulses/tr
    At 300 RPM = 5 RPS => laser pulse period = 352 +200 = 552 µs => laser pulse frequency = 1812 kHz => 360 pulses/tr
    At 180 RPM = 3 RPS => laser pulse period = 720 +200 = 920 µs => laser pulse frequency = 1087 kHz => 360 pulses/tr

    At 300 RPM and below, we have one pulse for 1°.
    At 478 RPM the system drops to one pulse for 2°.

    So the DSP processing should be straight-forward !

    It seems the system can not reach the 10 Hz refresh rate, as it can make less than 10 turns in one seconds. It seems it is more close to 5 Hz.

    Sorry again for the mistake, I'll have to check more closely my assumptions next time...

  5. I think Neato's initial testing and protocol may have supported a 10 Hz rotation speed. There was a lot less to the initial protocol, you can see that on Sparkfun's website where they provided a stream dump of an older XV-11 LIDAR.

    I am working on the Schematic of the Piccolo board now so should be done soon and available on the blog for review along with detailed pics of the PCB.

  6. The slip ring probably isn't rated for much more than 5 RPS. As for the neat down sampling at 8 RPS it could imply be that the linear ccd array can't be sampled faster.