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.
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 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.