二牛学FPGA
现在主流的自动驾驶还是要看FSD,FSD采用纯视觉方案,如果想要走自动驾驶方向,还是把图像处理这不好好好学习一下
现在主流的自动驾驶还是要看FSD,FSD采用纯视觉方案,如果想要走自动驾驶方向,还是把图像处理这不好好好学习一下
自动驾驶对芯片要求比较高,并行处理、低延时是重点,FPGA都具备这个特点~
分享点个人经验。我最初是做传统FPGA通信的,转行到自动驾驶感知加速。最大的挑战是思维转变:要从硬件资源思维,转向算法效果和精度思维。比如实现一个神经网络加速器,不仅要考虑吞吐量和延迟,还要关心定点化带来的精度损失是否影响检测准确率。额外知识方面,强烈建议学Python和PyTorch/TensorFlow基础,现在很多算法原型都用这些,你得能理解甚至修改。控制理论对于做底盘控制的同学可能更重要,做感知和融合的话,优化理论和概率统计更实用。开源项目可以关注一些大学的研究,比如MIT的FPGA加速SLAM相关项目,或者看看Xilinx/Intel的官方机器人、ADAS参考设计,虽然不开源但文档有启发。保持动手,用开发板接个摄像头做实时的图像处理流水线,是最好的学习方式。
如果想进入这个领域,知识面需要拓宽。FPGA开发是基础,包括Verilog/VHDL、仿真、时序分析、资源优化。在此之上,自动驾驶/机器人领域的知识很重要:1. 传感器原理(相机、激光雷达、IMU)。2. 基本的计算机视觉和SLAM概念(特征点、点云、滤波、图优化)。3. 实时系统概念和总线协议(AXI、APB)。4. 脚本语言(Python)用于数据处理和原型验证。5. ROS的基本使用,了解节点、话题、服务。不一定需要很深的理论,但要能看懂算法论文并与算法同事沟通。学习路径可以先从FPGA基础开始,然后找一个简单的视觉处理项目(比如用FPGA做Sobel边缘检测),再逐步接触OpenCV、ROS和开源SLAM代码(如ORB-SLAM)。
我干的是更偏底层和接口的。在自动驾驶域控制器里,FPGA经常作为高速数据交换和预处理的枢纽。我的日常就是搞各种高速串行接口(SerDes),比如接摄像头、雷达的LVDS、MIPI、Aurora,还有和主处理器(如SoC)通过PCIe通信。确保数据稳定、无丢失地传输,时序收敛,做必要的预处理(比如图像畸变校正、雷达点云初步滤波)。这个方向对FPGA本身的时序、调试能力要求高。需要额外学点通信协议和信号完整性的知识。控制理论倒不是必须,但了解自动驾驶的整体架构有帮助。
从机器人SLAM加速的角度答一下。我们组用FPGA主要是加速特征提取、匹配和优化这些计算密集的模块。比如把视觉里程计的关键部分硬件化,能极大降低功耗和延迟。岗位工作更像是算法硬件协同设计,不是简单的移植。你需要和算法工程师紧密合作,理解算法核心,然后设计专用的计算架构。除了FPGA技能,ROS肯定要了解,因为它是机器人软件的框架,你得知道数据怎么流动。线性代数、概率论底子要好。可以看看VSLAM、FAST-LIO这类开源项目,思考里面哪些循环或矩阵运算能并行化。
我主要做传感器融合这块。简单说就是把摄像头、激光雷达、毫米波雷达这些不同传感器来的数据,在FPGA上做时间同步、坐标对齐,然后进行滤波和融合处理,生成一个更可靠的环境感知结果。FPGA的并行和低延迟特性在这里特别关键,因为等CPU慢慢算就来不及了。工作内容上,算法移植和优化占大头,得把Matlab或C写的算法拆解成能并行流水线实现的硬件结构。高速接口像MIPI CSI-2、汽车以太网这些也得懂,因为数据得先接进来。建议学一下计算机视觉的基础,还有卡尔曼滤波这类多传感器融合的经典算法。