Hokuyo LiDAR interfaced with Arduino Mega 2560 board

3689433407?profile=originalSuccessfully interfaced Arduino Mega 2560 with Hokuyo URG-04LX-UG01 LiDAR using a USB Host Shield 2.0 from Circuits @ Home....the LiDAR gives the device descriptors fine....next step is to send the VV commands and receive info from LiDAR using other USB library functions.....


I'll mount this lidar on ardupilot mega quad once this is done....planning to send lidar data to GCS via XBee....


So the modules connect like this:


LiDAR -> USB Host Shield -> Arduino Mega 2560 (on quad) -> Xbee -> GCS -> ROS

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • Thanks Randy...it was a team work...

  • Developer


         Looking great!  Very stable altitude hold.


  • Our altitude hold with a LiDAR at about 1m agl (no sonar).....


    A small mirror mounted at 45 degree wrt lidar diverts the beam to ground to sense altitude....

  • Latest work with Vinculum VDIP module: http://diydrones.com/forum/topics/communicating-with-hokuyo-lidar-u...

  • Developer


         Normally multiple sensors can share an SPI bus.  For example, in APM1 the dataflash and optical flow share an SPI bus.  On APM2 the barometer and MPU6000 share an spi port.  If you check out the optical flow library you can see how it backs-up and restores the SPI settings to ensure there's no interference even when the SPI settings required for each device are different.

  • Found a better to interface usb slave devices to arduino - Vinculum USB Host Controller. There are 2 advantages over USB Host Shield:

    - USB Host Shield uses SPI interface interface to communicate to arduino. That's 4 spi + 3 power pins + SS! + INT so total of 9 pins...vinculum connects through standard tx-rx serial so 2 + 2 (power pins). much lesser hardware compexity.

    - If one plans to use optical flow sensor with apm, there is a conflict since optical flow sensor uses an spi port too. If the interface cannot be time-shared, no other usb slave device can be used with this setup (usb host shield).......while vinculum can talk to any of the 4 serial ports on apm, and optical flow sensor can still keep using spi port....

    Yet to test the hardware and code.......!!!

  • Recmaster, ur right.....UG01 doesn't respond very good in dust and snow....but following are its drawbacks wrt UG01:

    1) Kinetic FOV is 57.8 degrees, UG01 has 240 degrees FOV....faster and better for 2d mapping (which we needed to do in our project)

    2) Physical dimensions and weight: doesn't look like it can be mounted on ardu pilot quad rotor.....

    3) as Randy rightly pointed out, dumps out tons of data to be processed....this either requires powerful processor to estimate depth frm sensor data, or comm channel with high bandwidth to send to GCS for further processing.....

    4) Last but not the least, our project is university funded....n we were supposed to use a LiDAR for map creation.....


  • Developer

    I've thought about this a bit so I'd like to jump in for a minute...one of the issues with the kinect is you need a powerful machines to pull all the data from it.  In particular I've heard that the circuits@home usb host (or the equivalent sparkfun usb host) can't handle the high speed usb that the kinect uses for the depth camera (although I know some functions like turning on/off the light on the front of the kinect can be accomplished with the usb host).  Also the kinect spits out >300k of data 15 or 30 times per second.

  • Hello Anant,

    Is it releability for dust and snow? I mean UG01.

    Didnt u think about Kinect using? It has the same stucture and more chipper.


  • Randy, we're planning to build a cage on top of quad that holds the LiDAR.....not started work on it, but will post pics once we've made some progress....the angle challenge is real....yet to figure that one out....working on the electronics only yet....

    Also, the UG01 model is $1200...(that's around $1100 lesser than classical model...:))



This reply was deleted.