Real-Time Point Cloud Visualization with the RobotEye Lidar Scanner
The PCL-Ocular Robotics code sprint has concluded. For this event I participated as the code sprint developer and worked with engineers at Ocular Robotcs to develop a lidar grabber interface to the RE0x laser scanners for the Point Cloud Library. This was my second time participating in a PCL code sprint; last year I worked on a code sprint to develop point cloud streaming mobile apps.
The goals of the PCL-Ocular Robotics code sprint were to develop a point cloud grabber using the pcl::Grabber interface and to develop visualization code to support real-time visualization of lidar point cloud data acquired by the RobotEye laser scanner.
I developed a cross-platform Qt application called RobotEye Viewer, which uses the RobotEye C++ API to send control messages to the RobotEye scanner and displays point cloud streams acquired using the newly-developed pcl::RobotEyeGrabber interface. The visualization is performed using the PCLVisualizer. The PCLVisualizer is a C++ class provided by the pcl visualization library which is built on VTK. The PCLVisualizer wraps a vtkRenderWindow which is embedded into the RobotEye Viewer application using the QVTKWidget.
The following video demonstrates the RobotEye Viewer application in action using a RE05 laser scanner:
Earlier in the development process, Ocular Robotics sent me some lidar scans in a binary format to get started. The data was stored in binary files with azimuth, elevation, range, and intensity fields. I wrote some code to load the binary data and convert it to the pcl::PointCloud data structure. From there, I saved the data in the pcd file format and opened it with ParaView using the PCL Plugin for ParaView. I used ParaView’s animation controls to create a video of the lidar scan.
Here is a video of a RobotEye scan (not displayed in real-time) of the Great Hall in Sydney, Australia:
Here’s a screenshot of the RobotEye Viewer application running on MacOSX:
The RobotEye grabber was developed using the pcl::Grabber interface. PCL incudes grabber interfaces for other sensor types, too. For example, RGB-D cameras like the Microsoft Kinect can be used through the pcl::OpenNIGrabber.
The PCL Plugin for ParaView uses a VTK filter to wrap the grabber interface so that you can use ParaView to acquire point clouds from Kinect cameras. The following video shows how ParaView can be used to build a point cloud segmentation pipeline to process point cloud streams captured from the Kinect camera:
Additional resources:
- http://pointclouds.org/blog/orcs/
- http://pointclouds.org/documentation/
- http://www.paraview.org/Wiki/ParaView/PCL_Plugin
This looks like a lot of fun, I’m impressed by the update rates considering the segmentation pipeline. Nice!