Rplidar Review


Intro:

Recently the nifty new sensor RPLIDAR came out. I was one of the first people to get one, and I thought I’d test out how it behaves. Short story? I'm very happy with it. 

I have a Hokuyo URG-04-LX-UG01, which is probably the lowest end of the range of professional laser sensors for robots. 

The documentation for the laser can be a bit hard to find. At the time of writing the downloads are here: 


Test Rig -- Comparing the Hokuyo and the RPlidar:

I lasercut some plates to hold the Hokuyo laser upside-down vertically over the RPLIDAR. This got the plane of both sensors as close as it's possible to get. Even so, there's about 40mm gap between the two. This means that we shouldn't expect the scans to line up perfectly (for sloping objects), but it should be fairly close. 

Test, and bag files to download:  

You don’t have to take my word for it. Here’s a ROS bag file containing the data from both sensors. 
Note: I haven’t done anything special to sync the data between the two. The laser drivers may allow better fine-tuning of comms delays with calibration.  

These files were recorded using commands like:
    rosbag record —output-name=laserbag —all —bz2 

You can play it back using: 
    rosbag play laserbag —loop
(After running roscore in another window)
And the topics will then appear for you to look at in Rviz. 

For more info on rosbag usage read here: 
http://wiki.ros.org/rosbag/Commandline

Laserbag.bag:

Laser on the table. Person walking backwards and forth in front of it. 
Rough view from the laser's point of view. Stairway, posts and other crap in abundance. 

Laserbag_loop.bag:

Laser on a wheely chair, rolled for a loop around the hackerspace. This gives a bit more realistic view of the dynamic environment a mobile robot will see. 



Do the scanners ‘fight’ each other? 

One important question is whether you can use these scanners in an environment with other robots using the same (or similar) sensor. As far as I can tell, there isn't any interference. 

When you see neat advanced research on self-driving cars, it’d be a shame if it didn’t scale just because two self-driving cars would end up blinding each other’s sensors. 
(Note: as far as I’m aware, there aren’t actually any issues with sensors fouling each other. I’ve talked to quite a few people in the industry and never heard researchers complaining about cross-talk or similar. But it’s something to be wary of)

Verdict:

I'm bloody happy with this sensor. For $400, it's simply amazing, and seems pretty well designed. 

Red dots are RPLIDAR, white dots are Hokuyo

Yes, it has more obviously moving parts and it's probably not going to last as long as the hokuyo in the field, but for now it looks good. 

Things I haven't tested: 

  • Long term stability (I did notice a bug with the driver's use of timestamps, but I haven't fixed it yet)
  • Behaviour in sunlight
  • Using the sensor with GMapping or AMCL (although the manufacturer has a nice video demonstrating this) 

Test scripts for ROS:

Heres’s the scripts I used for launching both sets of lasers at once: 

Compare_lidars.launch:

<launch>
  <include file="$(find rplidar_ros)/launch/rplidar.launch" />
  <include file="$(find rplidar_ros)/launch/hokuyo.launch" />

  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find rplidar_ros)/rviz/rplidar.rviz" />
</Launch>

Hokuyo.launch: 

<launch>
  <node name="myhokuyo"      pkg="hokuyo_node"  type="hokuyo_node" output="screen">
  <param name="port"     type="string" value="/dev/ttyACM0"/>  
  <param name="frame_id"        type="string" value="laser"/>
  <param name="min_angle"        type="double"   value="-2.09"/>
  <param name="max_angle"        type="double"   value="2.09"/>
  <remap from="scan" to="hokuyo_scan"/>
  </node>
</launch>

Rplidar.launch:

<launch>
  <node name="rplidarNode"      pkg="rplidar_ros"  type="rplidarNode" output="screen">
  <param name="serial_port"     type="string" value="/dev/ttyUSB0"/>  
  <param name="serial_baudrate" type="int"    value="115200"/>
  <param name="frame_id"        type="string" value="laser"/>
  <param name="inverted"        type="bool"   value="false"/>
  </node>
</launch>

ċ
laserbag.bag
(243k)
Gavin Smith,
May 13, 2014, 2:50 AM
ċ
laserbag_walk.bag
(352k)
Gavin Smith,
May 13, 2014, 2:50 AM
Comments