LiDAR Forest Mapping (Capstone Project)

Photo and point cloud of Ell Hall in Boston

The senior capstone project I worked on at Northeastern involved LiDAR forestry.  Our project was sponsored by a research lab that was interested in creating high resolution scans of entire forest canopies, something that wasn't possible with their ground-based system.  Our task was to deliver a portable system that could maintain a high point cloud density at all heights up to 15 meters.

Comparison of old system (left) and our project results (right)

We quickly split the project into two parts: a lift system, and an integrated LiDAR/controller package.  As the only team member with sensor integration experience, I took on the second part.  For the lift system, it was ultimately decided to purchase an off the shelf pneumatically actuating mast.  While the ascent was jerky (using a hand pump), the descent was smooth and slow - perfect as a platform for creating a scan.  The stability of the mast also gave the added bonus of not having to worry about translation or rotation about the x and y axes, simplifying the problem of point cloud reconstruction.

Operation of the pneumatic mast, with sensor package prototype on top

Our sponsor graciously provided us with a Velodyne puck and a VectorNAV inertial measurement unit (we wouldn't have had the money otherwise!) to use for the project.  Based on the UDP protocol of the LiDAR and memory requirements, I chose to purchase a raspberry pi for data collection and processing.  I also purchased a 12V battery pack and a buck converter, for field testing and eventual package integration.

Initial coms testing... on a tripod.

After writing functions to handle and parse the UDP and RS232 packets (LiDAR and IMU), I wrote a first version of the collection and processing script, which collected data and timestamps serially while also computing the cartesian coordinates and transforms, and finally outputting to a .csv file.  The test results were poor - most of the LiDAR packets were being dropped, and the vertical and rotational transformations were off.  In my diagnosis, I realized the runtime of the script (~50 Hz) was an order of magnitude slower than the incoming data packets (700 Hz and 400 Hz for the LiDAR and IMU).  Because each LiDAR packet contained 1000 coordinate sets, the number of mathematical operations required were too much for the raspberry pi to do in real time, leading to buffer overflows for the incoming packets and mismatched data.

Improvement in point cloud quality from single to multi pass

To remedy this issue, I decided to rewrite the script with multiple passes.  In the first pass, the byte packets from the LiDAR and IMU would be saved as a tuple in a list along with a corresponding timestamp.  In the second pass, the packets would be translated and the cartesian coordinates would be calculated, transformed with the integrated IMU data, and output as a .csv file.  The runtime of the collection script increased by 20x (1000 Hz), resulting in no lost packets and accurate positional transformations.

To mount and house the sensor and components, I worked with another team member to design an internal housing block for an off the shelf enclosure.  It included mechanical vibration and shock damping for the IMU, an ethernet knockout for in-field point cloud file access over FTP, and enough battery power for 20 scans.

Designs for (left) and actual (right) LiDAR sensor package




Carbon Nanotube Quality Control System

This project was driven by a need for N12 to scale up quality control throughput to enable large scale production of carbon nanotubes.  O...