从零造一个激光雷达,需要多久?
激光雷达(LiDAR)是激光探测及测距系统的简称,目前广泛应用在无人驾驶和扫地机器人等领域。这种广泛的应用一方面得益于激光雷达的性能提升,一方面也得益于其成本的下降。
根据扫描方式,激光雷达可分为 MEMS 型、Flash 型、相控阵型、机械旋转型;根据线数,可分为单线型和多线型:
话说回来,有没有可能自制一个激光雷达?B 站的一位硬核 UP 主「不想宅的技术宅」还真就把这个小目标实现了。
UP 主用了大半年的业余时间,用一个激光测距传感器整出了一个单线机械旋转式激光雷达,总共包括硬件设计、结构设计、FPGA 开发和 3D 打印几个步骤。对于 UP 主来说,这不算是新的挑战,只能算是「把以前学过的东西复习了一遍」:
虽然 UP 主很谦虚,但很多人播放完视频之后,只能表示「不懂,但受到震撼」:
做一个激光雷达,需要哪些基本部件?
UP 主选用了一款 FPGA 开发板,主芯片为 Xilinx ZYNQ7000,板上搭载了一个最高可输出 1080p60 帧视频的 HDMI 接口、32 个 GPIO(通用输入输出接口)等其他外设。在这块开发板上,将要完成雷达数据的采集、运算和显示。
此外还有一个直流减速机,额定电压为 12V,减速比为 1:30,最大输出转速为 300 转每分钟,电机尾部安装了 500 线的光电编码器,通过光电编码器可以获知输出轴的转动角度。
最后,还有一个激光测距传感器,测距精度为 1cm,量程为 12m,每秒钟可以测量 1000 次,输出接口为串口。
这些就是自制激光雷达所需要的基本部件,然后就是结构设计的问题了。
结构设计
UP 主表示,激光雷达在工作时,探头需要连续旋转,因此探头和底座的信号传输无法用导线连接,否则会引发缠绕问题,他通过导电滑环解决了这个问题。导电滑环内部是一组电刷,可以解决信号线在旋转情况下的缠绕问题:
如此,激光雷达就设计好了:
探头和底座之间设计了一对红外对管,用来确定探头转动的初始位置:
硬件电路设计
整体框架如图所示,包含定子 PCB 和转子 PCB:
下图是整个电源以及隔离设计的框图,整个电机控制部分和其他电路没有实际的连接,电机在工作时不会干扰其他电路:
再之后是 PCB 设计:
一番装配之后(此处省略一万个步骤),激光雷达就做好了:
而主要的难度恰恰在于 FPGA 部分。UP 主表示:「要把雷达数据叠加在视频数据流上,费了我不少脑细胞。」
最后,看下实际运行效果
受限于激光测距传感器测量频率,探头转动一圈采集 500 个点的数据,所以激光雷达的扫描频率只能做到 2Hz 每秒。
为了视觉效果,UP 主加上了雷达扫描线,最终实现的效果还是不错的:
项目传送门:https://github.com/Messi-xiong/LiDAR.git