Update (17/10/2020): I made a new Lidar sensor. It has a lot of improvements compared to this one: link to the article.
Presentation
In order to perform an accurate 3D scan of a room/environment, I created this lidar (LIght Detection And Ranging) turret as a 3-day project. Based on the Garmin™ LIDAR-Lite v3, it scans its surroundings using an infrared laser beam and rotating it using small servomotors. This video shows the completed apparatus:
The scan time mainly depends of the step size we chose. It ranges from less that a minute to about 30 minutes (full resolution, more that 32,000 data points). The accuracy of the measurements is about 1 cm, up to 40 meters in range.
The acquisition and visualization software I created for this project can extract the point cloud for further use (3D Printing, CAD software, etc.).
Hardware
Hardware-wise, the scanner is rather basic: two 9g micro servomotors control the roll and pitch rotational axes. The brackets that hold them together are 3D printed.
Download the 3D files (SolidWorks & STL)
Concerning the electronics, I used:
- Arduino Nano: the controller for the turret. It drives the servomotors and control the lidar while doing a small amount of computation to output the point cloud.
- LIDAR-Lite v3: a compact, high-performance optical distance measurement sensor.
- 9g SG90 Servomotors: actuators to rotate the lidar. Although these weak motors are a major bottleneck to the system, I used them simply because I already had them. Some more powerful and less "wobbly" servos would definitely enhance the quality and speed of the capture.
- 650uF capacitor: this large electrolytic capacitor prevents the micro-controller from rebooting during the current spikes that both the lidar and the motors create.
This is the wiring diagram for the my lidar turret:
Software
The software that operates this project is divided into two distinct bits of code: the micro-controller side and the data acquisition/visualization software. It is of course fully open-source, and you can download the complete source for both parts by clicking on this button:
Arduino code
Thank to the Servo.h and LIDARLite.h Arduino libraries, the code to control these elements is made much easier. The basic work-flow of the code is the following:
Init. lidar, servos and serial;
for YawAngle = 0 to 180:
for PitchAngle = 0 to 180:
Compute_coordinates();
Send_value();
The micro-controller only knows the angles of the servos and the distance to the obstacle. A small amount of computation is required to convert the yaw angle, pitch angle and range information into much more usable X, Y and Z coordinates.
Using these spherical to Cartesian coordinates system conversion formulas, it outputs the position of the point on the serial port.
Data acquisition and visualization software
In order to collect, display and use the turret, I created a software using Processing. It is a very convenient open-source Java framework made for graphic related work. LidarViewer reads the serial port to get the data; displays it as a 3D point cloud we can zoom, pan, rotate and move; and saves it to a file so we can use it later on (in Meshlab for instance).
Author: Charles Grassin
What is on your mind?
#1 SHAHID
on November 21 2018, 1:37
#2 Author Charles
on November 22 2018, 7:23
#3 Hardrone
on February 6 2019, 11:18
#4 Janu
on February 8 2019, 5:32
#5 Jaime Candelaria
on February 18 2019, 20:44
#6 Author Charles
on February 19 2019, 21:40
#7 Author Charles
on February 19 2019, 21:46
#8 janu
on March 5 2019, 6:47
#9 Author Charles
on March 5 2019, 10:53
#10 Paul
on March 15 2019, 0:01
#11 Author Charles
on March 20 2019, 8:04
#12 Alexander
on March 27 2019, 20:57
#13 Alexander
on March 27 2019, 20:58
#14 Alexander
on March 27 2019, 22:49
#15 Olga3
on June 17 2019, 23:46
#16 olga
on June 17 2019, 23:48
#17 Dario
on July 29 2019, 13:18
#18 Author Charles
on July 30 2019, 7:25
#19 pablo
on December 26 2019, 4:55
#20 Rob
on April 18 2020, 3:17
#21 Richard
on May 28 2020, 16:11
#22 Author Charles
on May 28 2020, 16:49
#23 Richard
on May 28 2020, 17:36
#24 Richard
on May 28 2020, 17:37
#25 Jacob
on August 4 2020, 15:36
#26 Author Charles
on August 7 2020, 8:52
#27 Jacob
on August 25 2020, 10:06
#28 Author Charles
on August 26 2020, 7:33
#29 Jimmy
on August 31 2020, 7:20
#30 Jimmy
on August 31 2020, 7:25
#31 Author Charles
on September 1 2020, 23:20
#32 Jimmy
on September 2 2020, 13:27
#33 Casey
on March 15 2021, 20:58
#34 Nilekina
on May 24 2024, 23:27
#35 higueve
on July 4 2024, 8:21
#36 kur
on September 15 2024, 4:43