自制简易激光雷达

网上有个使用一个单点激光笔,一个电机和普通USB摄像头做的一个激光雷达。这里简单介绍一下它的原理。
原理上来说,这也是一个三角测距激光雷达,和rplidar的原理本质是一样的。设计如图所示,

然后需要使用图像算法去检查这些激光光点。当然最好的方法是加一块滤光片,只让激光的光谱通过,其他的都滤除。由于电机旋转,光点在平面上会变成线状。
不过使用激光笔做的激光雷达对人眼可能不太安全。转速太快,不容易捕捉到,太慢,容易对人眼造成伤害。



前言: 说起来,该3D激光扫描测距仪(3D激光雷达)就核心设计原理来而言,应该在激光键盘(https://www.cirmall.com/circuit/2978/detail?3)设计项目之后。现在给大伙讲讲3D扫描测距仪的相关原理和制作细节。请耐心读完,方可吸收其中的精华。 在开始介绍原理前,先给出一些扫描得到的3D模型以及演示视频,给大家一个直观的认识 扫描得到的房间一角: 扫描的我 扫描仪实物 激光三角测距原理这里统一列出他们的参数: 摄像头:VGA画质的USB摄像头,30fps (市面普遍可以购买的型号)。非广角 激光器:50mW 红外一字线激光 808nm 滤光片:10mm直径红外低通滤光片 舵机:HS-322hd 43g标准舵机 本文结构简单介绍了激光雷达产品的现状 : 线状激光进行截面测距原理 3D激光扫描仪的制作考虑 参考文献 简介-激光扫描仪/雷达: 这里所说的激光扫描测距仪的实质就是3D激光雷达。如上面视频中展现的那样,扫描仪可以获取各转角情况下目标物体扫描截面到扫描仪的距离,由于这类数据在可视化后看起来像是由很多小点组成的云团,因此常被称之为:点云(Point Clould)。在获得扫描的点云后,可以在计算机中重现扫描物体/场景的三维信息。 这类设备往往用于如下几个方面: 机器人定位导航 目前机器人的SLAM算法中最理想的设备仍旧是激光雷达(虽然目前可以使用kinect,但他无法再室外使用且精度相对较低)。机器人通过激光扫描得到的所处环境的2D/3D点云,从而可以进行诸如SLAM等定位算法。确定自身在环境当中的位置以及同时创建出所处环境的地图。这也是我制作他的主要目 的之一。 零部件和物体的3D模型重建 地图测绘 现状: 目前市面上单点的激光测距仪已经比较常见,并且价格也相对低廉。但是它只能测量目标上特定点的距离。当然,如果将这类测距仪安装在一个旋转平台上,旋转扫描一周,就变成了2D激光雷达 (LIDAR)。相比激光测距仪,市面上激光雷达产品的价格就要高许多: Hokuyo 2D激光雷达截图: 上图为Hokuyo这家公司生产的2D激光雷达产品,这类产品的售价都是上万元的水平。其昂贵的原因之一在于他们往往采用了高速的光学振镜进行大角度范围(180-270)的激光扫描,并且测距使用了计算发射/反射激光束相位差的手段进行。当然他们的性能也是很强的,一般扫描的频率都在10Hz以上,精度也在几个毫米的级别。 2D激光雷达使用单束点状激光进行扫描,因此只能采集一个截面的距离信息。如果要测量3D的数据 ,就需要使用如下2种方式进行扩充: 采用线状激光器 使用一个2D激光雷达扫描,同时在另一个轴进行旋转。从而扫描出3D信息。 说明: 第一种方式是改变激光器的输出模式,由原先的一个点变成一条线型光。扫描仪通过测量这束线型光在待测目标物体上的反射从而一次性获得一个扫描截面的数据。这样做的好处是扫描速度可以很快 ,精度也比较高。但缺点是由于激光变成了一条线段,其亮度(强度)将随着距离大幅衰减,因此测距范围很有限。对于近距离(<10m)的测距扫描而言,这种方式还是很有效并且极具性价比的,本文介绍的激光雷达也使用这种方式, 对于第二种方式,优点是可以很容易用2D激光雷达进行改造,相对第一种做法来说,他在相同的激光器输出功率下扫描距离更远。当然,由于需要控制额外自由度的转轴,其误差可能较大,同时扫描速度也略低。 这类激光雷达产品目前在各类实验室、工业应用场景中出现的比较多,但对于个人爱好着或者家用 设备中,他们的价格实在是太高了。当然,目前也有了一个替代方案,那就是kinect,不过他的成像 分辨率和测距精度相比激光雷达而言低了不少,同时无法在室外使用。 低成本的方案 造成激光雷达设备高成本的因素为 使用测量激光相位差/传播时间差测距 高速振镜的高成本 矫正算法和矫正人工成本 对于个人DIY而言,第三个因素可以排除,所谓知识就是力量这里就能体现了:-) 对于前2个因素,如果要实现完全一样的精度和性能,那恐怕成本是无法降低的。但是,如果我们对精度、性能要求稍 微降低,那么成本将可以大幅的下降。 首先要明确的是投入的物料成本与能达成的性能之间并非线型比例的关系,当对性能要求下降到一 定水平后,成本将大幅下降。对于第一个因素,可以使用本文将介绍的三角测距方式来进行。而对于 扫锚用振镜,则可以使用普通的电机机构驱动激光器来替代。 本文介绍的低成本3D激光扫描仪实现了如下的成本/性能: 成本:~¥150 测量范围:最远6m 测量精度:(测量距离与实际距离的误差)最远6m出最大80mm误差,近距离(<1m),误差水平在 5mm以内 扫描范围:180度 扫描速度:30 samples/sec (比如以1度角度增量扫描180度,耗时6秒) 对于精
### 关于自制激光雷达的技术探讨 利用 Arduino 和 Raspberry Pi 制作 DIY 激光雷达是一个复杂但可行的项目。以下是关于该项目的关键技术和资源说明: #### 1. **基础原理** 激光雷达(LiDAR, Light Detection and Ranging)是一种通过发射激光束测量目标距离和角度的设备。其核心工作流程包括发送激光脉冲、接收反射信号以及计算时间差以确定距离。对于 DIY 项目来说,通常会采用旋转机构配合单点测距模块完成扫描。 Arduino 的特点使其成为理想的控制器之一[^3],而 Raspberry Pi 可用于更高级的数据处理任务,例如图像渲染或机器学习分析。 --- #### 2. **所需材料** - 单点激光测距模块(如 VL53L0X 或 TF-Luna) - 微型伺服电机或步进电机 - Arduino 开发板(推荐 Uno 或 Mega) - Raspberry Pi (可选,用于后期数据可视化) - 3D 打印零件(用于固定组件) 这些元件可以通过定制化的方式组合起来形成简易版 LiDAR 系统[^2]。 --- #### 3. **硬件搭建** 将激光测距模块安装到伺服电枢上,并由 Arduino 控制其转动方向与速度。每转过一定角度时触发一次测距操作并将结果记录下来。如果希望获得更高精度,则需考虑使用步进马达代替传统舵机[^1]。 ```cpp #include <Wire.h> #include <VL53L0X.h> #define SERVO_PIN 9 // 定义舵机控制引脚 #define MAX_ANGLE 180 // 最大旋转角度 int currentAngle = 0; // 当前角度变量初始化为零度位置处开始移动 Servo myservo; VL53L0X sensor; void setup() { Serial.begin(9600); Wire.begin(); sensor.init(); // 初始化 ToF 测量单元 sensor.setTimeout(500); myservo.attach(SERVO_PIN); // 将指定数字 I/O 连接到 Servo 对象实例 } void loop(){ for (currentAngle=0 ; currentAngle<=MAX_ANGLE; currentAngle +=1){ myservo.write(currentAngle); // 设置新的方位角数值给定至 servomotor 中去驱动它改变指向 delay(15); // 延迟等待足够长时间让机械部件稳定后再读取新坐标下的 TOF 数据 uint16_t distance = sensor.readRangeContinuousMillimeters(); if(distance != 0 && distance <= 2000){ // 如果有效范围内则打印当前角度对应的距离值信息出来供后续绘图或其他应用调用 Serial.print("Angle:"); Serial.println(currentAngle); Serial.print("Distance(mm):"); Serial.println(distance); } } } ``` 上述代码展示了如何设置一个基本的扫面循环,在此过程中不断调整传感器朝向并获取相应位置上的物体远近情况。 --- #### 4. **软件部分** 编写程序逻辑使能自动采集多组样本点位之后再传输至上层计算机做进一步图形绘制等工作流安排。Raspberry Pi 上运行 Python 脚本能够很好地承担起这部分职责。 ```python import serial from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np ser = serial.Serial('/dev/ttyUSB0', baudrate=9600) fig = plt.figure() ax = fig.add_subplot(projection='polar') while True: line = ser.readline().decode('utf-8').strip() try: angle_str,distance_str=line.split(":")[1].split(",") theta=float(angle_str)*np.pi/180. r=int(distance_str)/100. ax.scatter([theta],[r],c=[r]) plt.pause(.01) except Exception as e : pass plt.show() ``` 该段 python 实现了实时接受串口传来的极坐标形式的位置描述并通过 Matplotlib 库即时展现二维平面内的障碍物分布状况图表。 --- #### 5. **注意事项** - 需要特别注意安全防护措施以免强光直射眼睛造成伤害; - 提高采样频率可能带来更大的功耗需求所以得合理规划供电方案; ---
激光雷达(LiDAR,Light Detection and Ranging)是一种通过发射激光束并测量反射信号来探测目标距离和形状的技术,广泛应用于自动驾驶、机器人导航、地形测绘等领域。其硬件原理图通常包括激光发射模块、接收模块、扫描机构、信号处理单元以及电源和控制电路等部分。 ### 激光雷达硬件原理图的主要组成部分 1. **激光发射模块** 该模块负责发射短脉冲或连续波激光束。激光器通常工作在近红外波段(如905 nm或1550 nm),以避免对人眼造成伤害。发射模块包括激光二极管、驱动电路和光学准直系统,确保激光束以一定的方向性和聚焦性发射出去。 2. **接收模块** 接收模块由光电探测器(如雪崩光电二极管APD或单光子雪崩二极管SPAD)、光学滤波器和放大电路组成。其作用是捕获从目标反射回来的激光信号,并将其转换为电信号进行后续处理。 3. **扫描机构** 为了实现多方向探测,激光雷达通常配备机械旋转镜、MEMS微镜或光学相控阵等扫描装置。例如,Velodyne的64线激光雷达采用旋转镜面实现360°扫描,而固态激光雷达则采用电子扫描方式。 4. **信号处理单元** 包括时间-数字转换器(TDC)或模拟-数字转换器(ADC),用于测量飞行时间(Time of Flight, ToF)并计算目标距离。此外,还包括FPGA或专用处理器,负责实时数据处理和点云生成。 5. **电源与控制系统** 提供稳定的电源供应,并通过微控制器(MCU)或嵌入式系统控制激光发射、扫描动作和数据传输。 ### 获取激光雷达技术文档和原理图的渠道 1. **厂商官网与开发者资源** 如Velodyne、Luminar、Ouster、Innoviz等主流激光雷达厂商通常提供产品规格书、SDK、驱动程序及部分硬件接口说明。部分厂商会提供详细的硬件原理图供授权开发者使用。 2. **开源硬件项目** 一些开源激光雷达项目(如OpenLidar、Ainstein US-D1等)在GitHub或Hackster.io等平台上发布完整的硬件设计图、PCB布局图和BOM清单,适合研究和DIY实现。 3. **学术论文与技术报告** IEEE、SPIE等学术平台发布的论文中常包含激光雷达系统架构图和关键模块的设计原理,例如基于FMCW的相干探测系统或基于SPAD的高灵敏度接收系统。 4. **电子设计自动化(EDA)工具库** 使用Altium Designer、KiCad等工具时,可在元件库中搜索激光雷达相关模块的参考设计,结合数据手册进行电路搭建。 ### 示例:简易激光雷达发射与接收电路 以下是一个简化的激光雷达发射与接收电路示意图: ```c // 简化的激光雷达发射与接收电路示意代码(非实际电路) #include <stdint.h> #define LASER_PIN 13 #define DETECTOR_PIN A0 void setup() { pinMode(LASER_PIN, OUTPUT); pinMode(DETECTOR_PIN, INPUT); Serial.begin(9600); } void loop() { // 触发激光发射 digitalWrite(LASER_PIN, HIGH); delayMicroseconds(10); // 激光脉冲持续时间 digitalWrite(LASER_PIN, LOW); // 读取接收信号 int signal = analogRead(DETECTOR_PIN); Serial.println(signal); delay(100); // 采样间隔 } ``` 上述代码仅为模拟激光雷达发射与接收的基本流程,实际电路中需加入高速比较器、锁相放大器、ToF测量芯片等组件以提高精度和响应速度。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值