设计一种采用KR260的智能轨道巡检机器人
扫描二维码
随时随地手机看文章
利用AMD现场可编程门阵列(FPGA)硬件部署量化和改进的神经网络用于轨道故障检测,解决了在资源受限的边缘设备上实现自动轨道缺陷检测的挑战。
背景:随着人们对铁路运输安全的要求越来越高,传统的轨道检测方法需要工人定期沿着轨道行走,观察轨道的磨损、变形和裂缝。该方法虽然可以直观地检测到一些明显的故障,但耗时、费力、效率低。这种方法已不能满足现代铁路系统的需要。为了解决铁路故障检测的自动化和高效性问题,本课题开发了一种基于FPGA的铁路故障检测系统。该边缘人工智能系统通过摄像头捕捉轨道图像,利用卷积神经网络(CNN)实时检测轨道缺陷,并自动报告故障信息。
项目市场价值分析
利用FPGA进行铁路轨道检测可以解决几个关键问题,包括:
•事故预防:铁路轨道上的缺陷,如裂缝、磨损和腐蚀,是火车出轨的主要原因。如果不及时发现和修复这些缺陷,将对乘客和货物的安全构成严重威胁。自动检查系统可以及早发现这些问题,从而防止事故的发生。
•提高效率:传统的人工检测方法效率低,容易出错。相比之下,FPGA与深度学习和计算机视觉技术相结合,可以显著提高检测效率和准确性,减少人为干预的需要。
•实时性和准确性:fpga提供并行处理能力,实现实时数据处理和分析。这对于需要持续监测和快速响应的铁路应用至关重要。
市场潜力
广泛的市场需求:随着全球铁路网络的扩展和升级,对高效可靠的铁路轨道检测系统的需求日益增加。铁路运输的频繁使用和铁路线路的不断延长,使轨道检查成为一个迫切需要解决的问题。
•技术优势:FPGA结合深度学习技术应用于铁路轨道检测,不仅提高了检测的速度和准确性,而且减少了环境和人为因素造成的误差。这使该项目在技术上具有强大的竞争优势。
•经济效益:通过提高检查效率,减少事故的发生,铁路运营公司可以降低维修成本和事故赔偿费用。此外,尽量减少事故造成的运输中断可以提高运营效率和经济效益。
•初步探索:通过Vitis AI进行设计和部署尝试
除了传统的流程,AMD还提供了一个名为Vitis AI的强大工具。此工具链提供了优化的IP、工具、库、模型以及资源,例如在整个开发过程中帮助用户的示例设计和教程。它的设计考虑到高效率和易用性,在AMD自适应soc和Alveo数据中心加速卡上释放AI加速的全部潜力。这种方法比传统工艺简单得多。我们还尝试从AMD的模型动物园中训练Resnet18网络,优化它,并使用Vitis AI部署它。以下内容概述了总体开发过程:
搭建环境:在运行Ubuntu的主机上安装Docker: xilinx/kria developer: 2022.1。这个Docker环境对应于我们正在使用的Vitis AI v3.0版本。
量化模型:在Docker环境中,Vitis AI提供的强大工具可用于分析、量化和导出模型。S只需导入训练好的模型(.pth)文件,用很短的命令完成模型检测和量化过程。
接下来,使用vai_c_xir工具来编译模型。此时,编译后的(.xmodel)文件就可以在duczdx8g体系结构上运行了。
将Vitis AI对应的Petalinux镜像刻录到Kria KR260上,加载对应的DPU固件,导入模型和测试数据,使用Vitis AI运行时API直接运行。
然而,最终我们并没有选择这种方法来进行轨道误差识别的开发。我们需要一个更快、更轻的网络设计,以及与机器人汽车控制和ESP8266模块的集成。最后,我们决定进行全新的网络设计和部署。
贡献:
为了减小模型尺寸并在Kria KR260开发板上部署合适的钢轨缺陷检测模型,实现机器人汽车的上位机通信和部署,本项目采用五步方法:
•设计一个专门适应KR260开发板资源的神经网络模型。
•对模型参数进行训练后量化,采用混合精度量化(不同模块和精度要求的量化位宽不同)。
•使用AMD HLS工具提高编码效率。
•通过WiFi通信模块实现与上位机的通信。
•集成车载通信协议,实现KR260对机器人汽车平台的控制。
本项目中使用的神经网络架构如图所示。本设计基于ResNet网络结构,保留了基本的残块结构。输入图像大小为128x128。对数据集进行过滤,并将其分为两类:有缺陷的图像和没有缺陷的图像。数据增强技术,如模糊,噪声添加,随机翻转和旋转应用。
•模型参数:261 kb
•MAC操作:24.66M
•准确率:88.9%
参数提取和环境设置:
在确定最佳模型后,需要在FPGA上提取参数进行推理。有两种方法可以做到这一点:
使用中子网站提取模型权重和偏差。
编写Python代码来提取模型参数也是一种可靠的方法。
开发环境配置:参数提取完成后,使用Vitis HLS 2022.2进行PyTorch神经网络模型的推理过程。需要进行以下环境配置:
Vivado HLS:选择Kria KR260作为目标,流量目标设置为Vivado IP flow target。
导入源文件和测试台文件。在源中包含先前提取的权重和偏差。
在Vivado 2022.2中,为Kria KR260开发板创建一个项目,并使用PYNQ在处理系统(PS)和可编程逻辑(PL)之间进行通信。
处理系统(PS)是指通常由嵌入式处理器组成的系统。它负责执行大多数软件任务,包括操作系统、应用程序和驱动程序。PS可以处理高级计算任务,并提供广泛的外设接口,如串行通信、以太网、USB等。在PYNQ框架中,PS通常运行Python代码,管理控制和数据处理。
可编程逻辑(PL)是指系统中通常由FPGA构成的部分。PL用于实现硬件加速,并且可以根据需要动态配置为不同的硬件电路,以提高特定任务的执行效率。PL适用于并行处理、广泛的数据处理和自定义硬件功能。在PYNQ框架中,PL可以使用硬件描述语言(如VHDL或Verilog)或高级合成工具(如Vivado HLS)进行编程,允许用户通过Python接口配置和利用这些硬件加速模块。
Kria KR260开发板需要使用PYNQ环境进行闪现。
代码的解释:
HLS代码部分:
这是一个标准的卷积运算。输入图像大小为128x128,卷积核大小为5x5,输出通道号为32。
卷积层是cnn的核心构建块,也是大多数计算发生的地方。
这是一个标准的最大池化操作,用于缩小图像大小并提取特征。池化层(也称为子采样)执行下采样,减少输入中的参数数量。像卷积层一样,池化操作在整个输入上滑动一个过滤器。然而,与卷积滤波器不同的是,这个滤波器没有权重。相反,内核对其接收字段中的值应用聚合函数,填充输出数组。当过滤器移动到输入上时,最大池选择要发送到输出数组的最大值像素。
在编写了所有HLS代码之后,需要进行合成和联合仿真操作。
通过这两个步骤,我们可以检查资源使用和计时错误,从而生成综合报告。通过Co-simulation后,通过运行export RTL命令导出RTL设计,该命令将写入活动解决方案的impl文件夹。zip文件是IP及其内容的zip归档文件,可以直接添加到Vivado IP目录中。
在完成HLS部分后,我们转移到之前创建的Vivado项目,开始块设计过程。首先,找到导入hls生成的IP包的设置。
块设计是FPGA硬件系统图形化设计和管理的一种方法。它允许开发人员通过图形界面更直观地创建和配置硬件设计。块设计支持模块化设计,使开发人员能够将复杂的硬件功能划分为多个独立的模块,每个模块都可以单独设计、测试和验证。这些模块可以是预定义的IP核或自定义硬件逻辑。
设置完成后,在左侧列表中选择“创建块设计”。导入PS模块和IP模块,并进行连接。Vivado可以自动生成IP核之间的连接,减少手工布线的错误和复杂性,包括总线接口、时钟信号和复位信号。
验证连接是否正确,然后继续进行合成、实现和比特流生成。合成是将高级HDL(如VHDL或Verilog)代码转换为门级网表的过程,该网表描述了特定的逻辑门及其连接。在合成过程中,Vivado解析设计代码,执行逻辑优化,删除冗余逻辑,并将其映射到FPGA的基本逻辑单元(如查找表和触发器)。
实现过程的目标是确保设计在FPGA上正确运行,并满足所有时间和资源限制。生成比特流将实现的设计转换为可下载到FPGA的二进制文件。位流包含配置FPGA的内部逻辑和连接所需的所有信息,并在上电或重新配置时加载到FPGA中。生成比特流后,开发人员可以将其下载到FPGA中,使其根据设计逻辑和连接进行操作。
在写入比特流之后,在Vivado项目目录中找到三个重要的文件:(.tcl,。Bit和。hwh)文件。TCL脚本文件用于自动化和管理FPGA设计流程。
(.tcl)文件通常包含一系列用于设置项目、综合设计、实现设计和生成位流的命令。
(.bit)文件是由Vivado生成的二进制文件,包含配置FPGA所需的所有信息。该文件可以直接下载到FPGA芯片上,使FPGA按照设计的逻辑和连接进行工作。
(.hwh)文件是描述硬件设计的高级元数据文件,通常与PYNQ和其他嵌入式系统相关联,包含有关硬件设计的详细信息,例如IP核、总线连接和寄存器映射。
PYNQ开发和主板测试:
上电Kria KR260开发板,打开Jupyter可视化界面。
上传所需的项目文件并创建a.p ipynb文件来编写PYNQ代码。
使用overlay导入位文件的内容来调用PL端。
通过地址读取和传递图像信息和识别结果。查找地址的方法如下:在Vitis HLS中找到.h文件,然后找到输入和输出地址位置。
测试成功后,KR260可用于钢轨缺陷检测。
数据集增加:
第一步是对图像进行基本的图像增强操作,包括水平镜像和垂直镜像。
在此基础上,对所有镜像处理后的图像进行45°翻转操作。此时,一个图像已经扩展到8个图像。
最后,在之前的基本增强之后,对每个图像执行四种不同的处理:模糊,盐,亮白和暗化。
通过数据增强,每张原始图像被扩展到40张。
ESP8266的开发及与上位机的通信
使用Arduino编写和开发程序,首先将开发板接口和配置设置为“Generic ESP8266 Module”,并加载相应的工具环境包。
在开发过程中,两个库ESP8266WiFi.h和WifiLocation.h分别用于ESP8266网络和地理位置获取。
在使用ESP8266连接上位机时,由于上位机使用套接字协议,ESP8266的编程也遵循同样的设计。连接WiFi后,打开socket服务器等待连接。实现了基本的数据收发,以及接收到“sendLocation”命令后的地理位置信息传输:
地理位置信息通过谷歌API获取,需要使用谷歌API密钥进行访问和时钟信息,以便在通话过程中获取具体的位置信息。在确保代码能够正常工作后,由于本项目选择的ESP8266是DevSKit,因此可以通过microrousb进行刻录和通信,可以通过串口连接ESP8266并将上传速度设置为115200进行刻录。
最终实际运行的上位机如下所示:
机器人车的功能和使用方法:
机器人车配备了多个模块,但在本项目中主要使用的是伺服云台和四轮驱动电机。该车配备了一个定制的驱动板和一个STM32核心板进行基本控制。整个驱动板由一个PR12V锂电池组供电,通过microrousb与KR260连接,进行串行通信。
伺服转盘倾斜部分由两个伺服电机组成,控制转盘的左右旋转和上下俯仰角的调节。配备高清USB摄像头,实现精准切割、定位、采集。通过对伺服云台的精确控制,摄像机可以准确地捕捉到铁路轨道的每一个信息。
该车使用四个电机分别控制四个车轮,实现四轮驱动,使其能够快速加速和减速前进和后退。同时,由于是四轮驱动,该车的转向系统采用四轮差速转向,实现静止转向。这种灵活的机动性适合在狭窄的环境中工作,使其成为铁路轨道上工作条件的理想选择。
该车集成了一套指令操作系统,封装了各个模块的特定时钟、中断等一系列复杂的基本操作。通过串口接收指令,可以直接实现指令的相应功能,如将汽车伺服云台操作到一定角度。以下是一些基本说明:
具体来说,我们设计了一个单独的伺服云台控制指令系统。汽车的整个程序是使用Keil μVision V4.10编写和烧录的。以下是伺服框架控制协议的示例(示例命令为$4WD, PTA180, PTB90, PTC90#)
所有指令都通过串口接收,Kria KR260可以通过PYNQ终端实现对汽车的完全控制。
结论:
本项目通过在Kria KR260 FPGA平台上部署神经网络,并将整个系统集成到机器人汽车中,实现了实时准确的钢轨缺陷检测。通过WiFi通信将检测到的钢轨缺陷信息上传到上位机,实现远程监控和数据分析。这也反映了使用AMD工具实现的FPGA开发效率的显著提高。该项目实时性强、平台性能高、功耗低、集成度高、适应性强,为铁路安全检测提供了高效可靠的解决方案。未来的工作可以着重于进一步优化算法和系统架构,以提高检测效率和准确性,扩大应用范围,为铁路运输的安全高效做出贡献。
本文编译自hackster.io