沥青路面裂

摘    要

针对我国城市化水平的迅猛发展和现代化程度的不断提高,机场跑道、城市道路、高速公路等出现老化,设计了一款基于STM32F103C8T6单片机为控制核心和基于跨平台计算机视觉库OpenCV的沥青路面裂缝检测机器人。本设计主要由机械结构设计,硬件电路设计,以及软件程序编程等部分组成。机械机构设计主要是履带式底盘设计。硬件电路部分主要分为主控芯片选择、直流电源选择、图传模块选择、电机驱动模块选择等部分;软件编程部分主要用软件STM32CubeMX和STM32CubeIDE对STM32单片机进行LL库编程、用PyCharm进行OpenCV图像处理开发以及用Arduino对ESP32-CAM进行图像传输编程。

通过对各机械零部件、电气元件的选型与设计,搭接出最终的沥青路面裂缝检测机器人,并完成实物调试。本设计是按照模块化的思想进行设计的,具有搭接简便、开发周期短、维护便捷等优点,对未来的裂缝检测机器人发展具有一定的参考价值。

关键词OpenCV;裂缝检测;检测机器人;STM32;ESP32-CAM

Design of Asphalt Pavement Crack Detection Robot

Abstract 

Aiming at the rapid development of China's urbanization level and the increasing modernization, the aging of airport runways, city roads and highways, an asphalt pavement crack detection robot based on STM32F103C8T6 microcontroller as the control core and OpenCV, a cross-platform computer vision library, is designed. The design is mainly composed of mechanical structure design, hardware circuit design, and software program programming. The mechanical mechanism design is mainly the crawler chassis design. The hardware circuit part is mainly divided into main control chip selection, DC power supply selection, map module selection, motor drive module selection and other parts; the software programming part mainly uses the software STM32CubeMX and STM32CubeIDE for LL library programming of STM32 microcontroller, PyCharm for OpenCV image processing development and Arduino for ESP32-CAM for image transfer programming.

Through the selection and design of each mechanical component and electrical component, the final asphalt pavement crack detection robot is lapped and the physical commissioning is completed. The design is designed according to the modularization idea, which has the advantages of easy latching, short development cycle, and convenient maintenance, and has certain reference value for the future development of crack detection robot.

Key Words:OpenCV; Crack detection; Detection robot; STM32; ESP32-CAM

目    录

摘    要

Abstract

1  绪论

1.1  设计背景及意义

1.2  国内外研究现状分析

1.2.1  国内研究现状

1.2.2  国外研究现状

1.3  本文主要内容

2  裂缝检测机器人总体方案设计

2.1  设计目标

2.2  机械系统方案

2.3  电路系统方案

2.4  软件程序方案

2.4.1  单片机程序

2.4.2  图像传输程序

2.4.3  裂缝检测程序

2.4.4  用户界面设计程序

3  机械系统设计

3.1  履带底盘设计

3.1.1  连接架设计

3.1.2  侧板设计

3.2  底盘驱动设计

3.2.1  主动轮设计

3.2.2  履带选型及设计

3.2.3  驱动电机设计

4 电路系统设计

4.1  主控芯片选择

4.2  电源模块

4.3  降压模块

4.3.1  LM2596S DC-DC 降压模块

4.3.2  MP1584EN 降压模块

4.4  电机驱动模块

4.5  无线通信模块

4.6  图像传输模块

4.7  GPS模块

5  下位机软件设计

5.1  软件开发环境简介

5.2  引脚输出程序设计

5.3  PWM输出程序设计

5.4  串口接收及中断程序设计

5.5  自定义函数设计

6  裂缝检测上位机软件设计

6.1  图像获取

6.2  图像预处理

6.2.1  灰度化处理

6.2.2  图像滤波

6.2.3  Gamma变换

6.2.4  形态学操作

6.3  边缘检测

6.3.1  高斯滤波

6.3.2  Sobel算子

6.3.3  非极大值抑制

6.4  最大宽度计算

6.5  用户界面设计

6.5.1  视频及图像显示

6.5.2  检测功能按钮

6.5.3  机器人控制功能按钮

7  实物调试

7.1  机器人底盘调试

7.1.1  爬坡测试

7.1.2  沥青路面测试

7.2  图传调试

7.2.1  图像发送测试

7.2.2  图像接收测试

设计总结

致    谢

参 考 文 献

附录清单

附录A-元器件清单

附录B-电路原理图

附录C-主要程序代码

1  绪论

1.1  设计背景及意义

智能机器人技术涉及仿生技术、机械制造技术、人工智能技术、计算机科学与技术、自动控制技术、智能感知技术、机电一体化以及材料学等多个研究领域,是一种多领域融合技术。机器人的价值在于改变从业人员的工作环境,代替人类做一些重复、繁琐和机械性的工作,解放那些原先被束缚住的劳动力,帮助人类更好地完成工作。

第十三个五年规划期间,我国机器人产业在大家的共同奋斗之下蒸蒸日上,规模逐渐扩大,技术不断革新,应用层面不断扩展,龙头企业更加强壮。可是我国的机器人产业在技术的积累、产业基础、精密器件供应上与国外一些发达国家的先进技术水平相比仍然存在着诸多问题。在第十四个五年规划中指出,在2025年,我国的机器人技术将取得很大程度地进步,在高端设备制造上成为新高地。

随着各行业科技的蓬勃发展,现如今机器人科技的研究也发展到了一个崭新的层次,需要更多的个人、企业与院校加入到这个领域来。机器人技术现如今是我国工业化和信息化进程中的核心技术和主要驱动力,现已应用于灾后救助、交通、医学健康、农业生产、海洋研究、社区服务、娱乐、航空和军事工业以及宇宙探测等领域,而其中又以检测机器人最为突出。

近年来,互联网经济的高速发展推动了各地区之间的贸易往来,同时也对道路交通运输提出了新要求,尽管我国不断完善各级道路的建设与维护,但仍有部分服役期较长的道路出现了不同程度、不同类型的路面病害。无论是飞机的跑道、公路,还是普通的城市路面,这些路面的性能都是公共交通得以正常运转的必要条件。对于路面安全性能的维护与检修都是现今相当重要的工作,对航空安全、行车安全等起到至关重要的作用。

路面病害是指由于车辆超载、自然环境条件、正常磨损老化等原因造成道路表面的可见缺陷,包括横向裂缝、纵向裂缝、块状裂缝、龟裂裂缝、修补裂缝和坑洞等。当道路存在这些类型的轻微路面病害时,车辆行驶的稳定性会降低,从而影响行驶的舒适性,如果不及时进行道路养护,病害程度会随着时间的推移逐渐加重,当道路上出现较大路面病害时,会对道路交通参与者的人身安全造成严重威胁。因此及时对各级道路进行养护管理,这会在很大的程度上保证交通的正常运行以及能够很好地保护人民群众的生命和财产安全。通过检测的工作人员来对路面的安全性能进行检测和评估是目前比较常见的方法。

目前主要依靠人工巡检的方式定期对路面进行巡查和养护,这种工作方式不仅效率较低而且成本较高,同时存在着巡查期间占用道路资源、难以保障工作人员安全和检测标准存在主观判断等缺陷。在我国公路里程不断增长、交通流量日益增大的背景下,继续使用该方法来进行路面检测很难满足现实需求,因此实现设计一款路面裂缝检测机器人是十分有必要的。

当沥青路面存在比较明显的裂缝时,检测人员可以在室内便捷和高效地远距离实时控制机器人完成巡检,从而快速准确地检测出路面裂缝,对沥青路面损伤程度做出评估与表征。如此便可大大提高裂缝检测效率与检测准确度,能够快速有效地帮助工作人员完成路面裂缝检测。

近年来,为了满足沥青路面裂缝检测工作的需求,国内外很多研究机构展开了大量的研究工作,研究了许多有效的检测算法,如传统的边缘检测、基于卷积神经网络的裂缝检测等。机器人技术目前在世界上属于研究热点,国内机器人研究起步相对国外较晚,更应该投入大量资源与精力进行研发,才能最终实现弯道超车。同时我国地广物博,基础建筑,如道路、桥梁众多,因而检测机器人需求较大,对我国来说研究和生产检测机器人更显得刻不容缓。本设计旨在设计一款沥青路面裂缝检测机器人,其主要功能是对路面裂缝进行检测,同时工作人员可以对其进行远程控制。其次要功能将会在搭建硬件并实现主要功能后进行不断完善与优化。

1.2  国内外研究现状分析

1.2.1  国内研究现状

1980年后期,我国开始了大量修建道路,许多道路修建完成并通车运营,道路维修与保护工作越来越繁重。我国的科研院校及相关技术公司开始自行研究路面破损图像检测系统,经过长期的不懈奋斗,虽然开始研发的时间较晚,但是发展速度较快,获得了不错的成果。

最近几年,国内利用路面损坏检测系统来完成路面检测的趋势明显上升,并且已经投入商业使用。在该领域内比较突出的有长安大学的技术研究中心、中公高科养护科技股份有限公司、武汉武大卓越科技有限责任公司等数家。

根据西部交通科技建设工程的研究,同时结合自身的研发设计,长安大学完成了CT-501A高速激光道路检测车的设计研发,如图1.1所示。该检测车和检测系统是通过面阵相机搭配激光手段来获取路面信息,在检测路面平滑程度、车轮痕迹、裂缝等方面有精准的检测效果。此外,多种照明系统能够为检测车检测时提供良好的光照环境,能够使得拍摄的道路图片清晰度更高,使检测结果更为准确,为路面损坏的自动检测提供了基础。

图1.1 基于中通客车车型的CT-501型多功能道路检测车

中公高科养护科技股份有限公司也设计出了CiCS道路检测车,如图1.2所示。与CT-501A不同,该系统获取道路图片的方式是结构光照明和线阵相机。检测时,对于路面的检测宽度能够达到3.6m,同时其最高检测精度在1mm,检测车的检测速度在每小时100km。CiAS是该机构开发的软件,专门用于路面损坏的处理,该软件能够对裂纹、车轮痕迹、路面平整度等一系列指标进行自动处理。

图1.2 CiCS多功能检测车

ZOYOM-RTM 路面检测系统是由武汉武大卓越科技有限公司开发的,如图1.3所示。针对几何性非常明显的裂缝能够进行精准的识别,同时能够反映出裂缝的位置信息,可是在识别龟裂型裂缝时,识别的准确率不够高。

图1.3 ZOYOM-RTM 智能检测系统

这些年来,计算机视觉和图像处理技术都在不断地发展。我国的许多工作人员和科研机构将这些不断发展的新技术运用到路面的自动检测系统当中去,使得路面检测的技术越来越完善,精确度不断提高,适用范围越发广泛。其中,一些研究人员对怎样来提升道路裂缝图像的清晰度比较关注,其他的一些则对道路检测当中所使用的检测技术,即图像处理算法更为关注。王鑫等人[3]提出了一种基于阈值的路面裂缝分割方法,使用K-means方法对图像进行预处理,根据裂缝与背景的灰度差异设定阈值进行分割,再通过形态学的膨胀和腐蚀操作增强分割效果。刘晟等人[4]针对阴影路面提出了一种基于局部阈值的路面裂缝分割方法,通过直方图均衡化的方式增加路面图像对比度,并采用分数阶积分的方法对图像进行去噪,选择适当大小的滑动窗口对每个像素进行阈值分割和连通域分析,从而分割出路面裂缝。

1.2.2  国外研究现状

1970年后期,有部分国家把小型摄像机安装在车上,以此来获取道路的破损信息。

道路在不断的建设,路面维护和检修的工作量也在不断加大,路面损坏的自动检测技术逐渐产生。就像加拿大的ROADWARE公司在上世界60年代末进行了路面数据采集的探索。

由日本设计的Komatsu系统,使用摄像机、信号处理装置、传感装置以及记录图片的设备来对路面的损坏数据进行采集,并且在检测的设备车上装设人工光源来提供光照条件。将路面破损数据采集后,将这些数据全部保存在磁带记录器里面,同时又按照两个步骤来进行对破损数据的图像处理,这两个步骤是并行处理的。第一个步骤是进行图像分割以及路面特征的提取,第二个步骤是实现图像的噪声点去除、子图像的融合以及复原。在当时的硬件技术条件下,该系统是最先进的代表。但是在对裂缝类别的判断上仍然无能为力。除此之外,该系统还具有一些问题,比如只能够在夜间进行检测,因为要控制光照条件,同时检测车的速度要低于10 Km·h-1,这些都是该系统没有得到推广的原因。

在这一时期,瑞士的学者们在上世纪九十年代中期设计了CREHOS系统,他们的目的是要研发检测范围广、精度高的路面检测系统,以此弥足之前的一些不完善之处,比如在局部清晰度和实时处理技术上。该系统将采集到的路面信息存储下来,通过模拟方法分析得出道路破损情况,并能够对道路的破损进行类别的判断。该系统相比以往能够减短工作时长,在一定程度上提高了检测效率。可是系统所要求的路面环境比较高、路面状况条件要好。并且在进行检测的过程中不能做到全自动检测,需要操作人员来进行图像摄取以及处理分析,所以该系统仍然处于研究阶段。

1990年末期,计算机视觉技术和摄影设备取得了很大的突破,CCD技术的进步尤为明显。因此,研发人员利用CCD技术来获取道路的图像信息获得了很大的进展。CCD相机抗冲击与震动能力强、噪声低、图像的畸变小。同时,对于所获取的路面图像信息可以直接通过采集卡来导入至计算机中进行存储或处理。电子元气件不断的发展,CCD相机的成本逐渐降低。因此,利用CCD相机和计算机视觉技术来实现道路破损检测的研究得到了很大的推广。

“数字公路数据车”是由阿色州大学设计的路面裂缝检测系统。该系统可以进行实时路面检测,可以对路面裂缝的图像进行检测处理并且提供了系统实现工具。使用CCD相机来采集路面裂缝图片,相机被安设在检测车上。拍摄完成之后,利用GPS模块来对路面裂缝的位置进行确定,同时对于距离信息的获取是利用距离测量设备完成的。这些数据是通过双CPU的微型处理器采集的,采集完成后,这些数据被传输到一个计算机中进行实时的数据分析,该计算机拥有多个CPU,更适合完成大量计算。在该系统的帮助下,能够在比较快速和准确的情况下对路面的裂缝进行采集、检测以及对裂缝类型进行判定,裂缝图像的获取以及检测处理都在该系统中实现。但是由于数据量较大,需要利用强大的计算机来进行处理,对设备要求比较高。此外,美国ETC公司开发的PCES系统、IMS公司开发的PAVUE系统、英国WDM公司设计的路面裂纹检测车等都可以进行路面探测。

在检测算法方面,Abdel QaderⅠ等人针对混凝土桥梁裂缝检测问题,比较了Sobel算子、Canny算子、Fourier变换和Haar小波变换四种检测方法的效果,得出结论,在裂缝检测中Haar小波变换是最有效的。Medina R等人将Gabor滤波器进行改进,并设计出了一种路面裂缝检测方法,使用改良遗传算法设置滤波器参数,对图像的每个像素进行分类,从而实现了对于隧道混凝土裂缝的有效检测,并且可以不考虑裂缝方向,有效检测出任何方向上的裂缝。

1.3  本文主要内容

总体而言,就裂缝检测方面来说,多数检测的方法是通过将设备安装在汽车上进行检测,对于独立的检测机器人而言研究较少。当前,国内路面已逐渐步入养护时期,越来越多的维护工作将会来临,在今后的检测工作中当中,需要一种效率高、精确度高、适用范围广的路面检测手段。可仍然有部分需要更加深入解决的问题,特别是在检测路面的破损情况方面,基于图像的路面损坏检测和识别方法还需要进一步研究,特别是对于裂缝的长度、宽度以及深度进行表征。本课题的主要内容:

(1)沥青路面裂缝检测机器人的机身总体设计:主要针对于履带式底盘的机械设计,以及各部分机构的零部件选型;

(2)电控模块设计:主要集STM32单片机控制技术、ESP32-CAM图像传输技术、电机控制技术、远距离控制技术于一体,并且配备了远程控制技术。设计出一款能够进行远程控制、实时显示路面检测结果的机器人;

(3)裂缝检测算法设计:通过OpenCV中的降噪、形态学操作、边缘检测等算法处理来自图传模块的路面图像,完成裂缝检测。

(4)将所有零部件搭接完成,并连接好硬件电路后,对其实物调试。主要对履带式底盘的障碍通过能力,裂缝检测的精确度等调试。

2  裂缝检测机器人总体方案设计

2.1  设计目标

设计一种具备图像传输和远程控制功能的小型履带式机器人,并在电脑端利用OpenCV来对图像进行处理,完成裂缝检测。该机器人能够进行远程控制,工作人员可以在室内操纵机器人完成沥青路面的裂缝检测,提高检测的准确度与效率。该机器人采用差速驱动,利用两侧轮子旋转方向的不同来控制机器人的运动方向。

2.2  机械系统方案

常见机器人移动方法有很多种,包括履带、三轮、四轮驱动,考虑到检测的路况存在沙粒、石块、陡坡等复杂路况,因此使用履带式底盘更为合适,控制效果也更好。使用履带式底盘时检测机器人在运动过程中表现更加稳定,具备一定的越障能力和防滑能力。为加强车体结构强度,检测机器人车身材料选择了铝合金板。

  检测机器人可以使用的电机类型种类繁多,其中含有直流电机、交流电机、步进电机、伺服电机等,一般而言运用最多的是直流电机,直流电机的起动和调速特性优异,有着比较广的调速范围,有很强的过载能力,较大的转矩,并且易于进行控制。经市场调研,本设计最终采用直流电机作为检测机器人的驱动电机。

2.3  电路系统方案

设计嵌入式硬件时,首先要选择一款核心控制器,能够满足检测机器人各模块要求并留有一定余量。需要多方面综合考虑:接口数量、串口数量、ADC资源数量、定时器数量、价格、总线规格等。本设计中的检测机器人对串口和定时器有要求,同时又要满足价格较低,综合性能较好的32位单片机。经综合考虑本设计选用STM32F103系列单片机作为核心控制器。

设计图传模块时,考虑体积和价格等因素,选择ESP32-CAM来实现实时图像的传输,其不仅可以完成无线图传,而且可以配合OpenCV完成图像处理,实现裂缝的识别与检测。

设计降压模块时,由于考虑到该电路有两处都需要降压,因此选取LM2596S DC-DC降压模块来进行12V至10V的降压和MP1584EN降压模块来进行10V至5V的降压。前者用于为TB6612FNG电机驱动模块提供驱动电压,后者用于为单片机和ESP32-CAM图传模块进行供电。

设计无线通信模块时,考虑到传输距离较远、环境相对空旷且传输的数据量较少。LoRa模块使用简单、成本低、通信距离远、体积小。因此选择LoRa模块来实现远距离无线通信,完成对机器人的远程控制。

选用的直流电机型号为MG513,设计对应的电机驱动接口与电机驱动模块接口电路,便于使用单片机内置的定时器PWM输出口进行直流电机的驱动。

TB6612FNG电机驱动模块来带动额定电压12V,额定功率4W,额定电流0.36A,堵转电流为3.2A的直流电机MG513。

硬件框图如图2.1所示。

图2.1 硬件框图

2.4  软件程序方案

图2.2 主程序流程图

2.4.1  单片机程序

本设计的电控程序通过STM32CubeMX来对单片机的引脚进行初始化,如图2.3所示。

图2.3 引脚功能配置图

然后通过STM32CubeIDE,利用LL库来进行电控程序编写,电控程序主要包括三方面:第一方面是配置串口以及串口中断,当单片机收到来自LoRa的数据信息时,触发串口中断,在串口中断程序里面来具体判断所接收到的数据,并执行相应的操作;第二方面则是通过定时器配置PWM输出来控制电机的转动速度;第三个方面是配置电机转向的引脚,通过对这些引脚的电平进行置高或置低来控制电机的转向,进而控制机器人的前进、后退、左转、右转等动作。

2.4.2  图像传输程序

图像传输程序是基于Arduino 编写的,在图像采集及上传过程中,首先,OV2640 摄像模块将采集的图像存储在PSRAM中,然后通过wifi.begin()函数启动ESP32的网络服务,初始化相机后再通过 esp_camera_fb_get()函数拍摄图片,经 http.begin()函数请求url、通过 http.addHeader()函数请求头部信息,最后完成图像上传。

2.4.3  裂缝检测程序

裂缝检测程序是在Pycharm IDE上基于OpenCV开源视觉库进行编写的,首先获取ESP32-CAM传输在网页上的视频流,然后利用OpenCV中的功能函数以及将参数进行适当的调节,从而完成裂缝的识别与检测。

2.4.4  用户界面设计程序

本设计的UI界面是由Qt Designer、PyQt5构建的,本UI中设置了QLabel控件、按钮以及对应的槽函数,从而实现相应的视频显示、图片显示、检测结果显示以及机器人远程控制的功能,实现了工作人员远程控制机器人和进行路面裂缝检测。

3  机械系统设计

3.1  履带底盘设计

由于本路面裂缝识别机器人工作路况相对恶劣,路面可能存在沟壑、裂纹、坡度不一致以及存在凹凸不平的情况。一般的轮式底盘难以胜任此工作路况,故选用履带式底盘更为合适。它是轮式移动机构的拓展,履带可以增大机身对地面的受力面积从而降低压强,并且更容易穿过障碍物。本设计采用单节双履带式底盘,该结构的优点在于设计简单,驱动控制方便。由于本设计是在路面进行检测,不会出现上下楼梯的情况,故选用单节双履带式底盘更为合适。

3.1.1  连接架设计

连接架是整个机器人的基础构件,用于搭载整个电路系统、ESP32-CAM模块及与驱动电机和履带等部分结构进行连接。因此需要满足强度高,质量轻,耐腐蚀等诸多优点。

图3.1 连接架示意图

根据上述要求,本设计主要采用铝合金作为连接架材料。铝合金使用范围广泛,被誉为最有前途的合金。铝金属在空气中氧化,形成致密的氧化膜,因此其有较强的抗腐蚀性,易于焊接。强度较高,特别是抗疲劳强度高。不仅如此,该合金易于加工,比较容易成形。

3.1.2  侧板设计

侧板用于固定主动轮、从动轮、承重轮和履带,是履带行走机构中必不可少的一部分,材质与连接架相同,均采用铝合金材料,通过L型连接件与连接架相连。

图3..2 侧板示意图

侧板的全身开设通孔若干,分别用来固定驱动电机、主动轮、承重轮、L型连接架等零部件。

3.2  底盘驱动设计

本设计的底盘采用履带式底盘,履带将主动轮和其他滚轮进行包围,使得轮子都不直接接触地面,而是通过主动轮的转动,再来带动履带与地面发生相对运动,同时履带在地面上不断地向前架设,进而带动机器人进行移动。

3.2.1  主动轮设计

主动轮是将电动机的输出动力传递给履带,主要由齿圈或滚轮、轮毂及固定和连接件等组成。主动轮有齿圈式和滚轮式,采用齿圈式的较多。齿圈的齿形有凸面、平面和凹面三种。驱动轮与履带啮合的好坏,直接会导致整车运行过程中是否平稳。为保证履带的啮合孔可以顺利地进入和退出啮合,减少啮合时产生的冲击载荷,选择主动轮的齿形为凸性。

3.2.2  履带选型及设计

履带将整车的重量传递给地面,因此履带的面积越大,与地面接触的压强越小,但接触面积多大,也会导致履带过重,转向不便,易脱落等。由于检测时的路况会出现凹凸不平的地面以及散落在地的砂石,因此还要有一定的越障能力。现目前我国的履带设计标准仅适用于部分大型工程机械,因此针对本检测机器人的履带选型设计均采用经验公式。

(1)履带的节距

。主要由车身重量所决定,与车子的重量呈正比例关系,根据经验公式如下:

                    (3.1)

式中:G——整车重量,kg。

    由于车声整体尺寸较小,以及为了增加运动的平稳性,适当降低履带节距。

(2)履带板宽度b。由工作条件所要求的平均接地比压进行决定,宽度与接地比成反比。宽度越大,接地比越小。根据履带设计要求,为了降低平均接地比,以及保证较小的转向阻力,一般参照公式为:

代入数据得:

(3)履带轨距B。其主要与履带板宽度有关,基本公式如下:

                          (3.3)

代入数据得,轨距为125mm。

(4)履带的接地长度

               (3.4)

代入数据得,接地长度为150mm。

(5)履带接地长度校核。计算所需的

应满足转向要求:

式中:B——履带轨距,mm;

      

——牵引附着系数,详见下表;

      f ——滚动阻力因数,详见下表;

      

——回转阻力因数,详见下表。

针对不同的路况“牵引附着系数、滚动阻力因数、回转阻力因数”存在较大差异。通过查阅资料,选取5种典型路况,具体数据如表3.1所示:

表3.1 针对不同路况的各项系数

路况

牵引附着系数

滚动阻力系数

回转阻力系数

铺砌道路

0.6

0.8

0.06

0.64

柔软沙路

0.6

0.7

0.10

0.53

泥泞道路

0.5

0.6

0.10

0.15

0.27

收割后草坪

0.7

0.9

结冰路面

0.2

0.03

0.04

0.35

  以铺砌道路为例,将数据代入得,

满足条件。

  (6)平均接地比P,即在重力作用下,单条履带对地面的压强,基本公式如下:

式中:G ——整车重量,kg;

 B ——履带宽度,mm;

      

——履带接地长度,mm。

因此,根据上式可得,平均接地比P=0.00025kpa

3.2.3  驱动电机设计

为保证有足够的驱动力来应对凹凸的路面以及陡坡,需要选择出合适的驱动电机。在此选取MG513直流减速电机。该电机结构尺寸小,转矩较大,噪音低,电机实物如图3.3所示。

图3.3 MG513直流减速电机

电机的基本参数如表3.2所示:

表3.2 MG513直流减速电机基本参数表

序号

参数名称

参数

1

额定功率

4W

2

电机类型

永磁有刷

3

堵转电流

3.2A

4

堵转扭矩

4.5kg

cm

5

额定电流

0.36A

6

额定扭矩

1.0kg

cm

7

减速前转速

11000rpm

8

减速后转速

366±26rpm

9

减速比

1:30

10

输出轴

直径6mmD型偏心轴

4 电路系统设计

4.1  主控芯片选择

本设计中选择STM32F103C8T6单片机为主控芯片,因为该芯片所占空间小、利于集成,耗电量低的同时性能强大。

STM32F103C8T6单片机作为主控芯片,其配置了工作频率为72 MHz的高性能ARM Cortex -M3 32位RISC内核、高速嵌入式存储器(最高128字节的闪存和最高20k字节的SRAM),以及连接到两条APB总线的大量增强型I/O和外设。STM32F103C8T6提供两个12位ADC、三个通用16位定时器和一个PWM定时器,以及标准和高级通信接口:三个串口、一个USB和一个CAN、最多两个I2C和SPI。此芯片功能完善可拓展性强,性价比高且完全满足本设计外设要求。具体引脚介绍如图4.1所示。

图4.1 STM32F103C8T6正面引脚图

STM32F103C8T6单片机核心板实物如图4.2所示。PB10、PB11、PA11、PA12输出高低电平,为两个电机的转向控制引脚。PB6和PB7为定时器4的PWM输出控制端,可以对电机转动速度进行调节。PA9和PA10分别为串口1的TX和RX引脚,负责接收来自LoRa模块的数据。

图4.2 STM32F103C8T6核心板实物图

4.2  电源模块

因履带式底盘的动力来自直流减速电机,因此选择11.1V的直流电源。考虑底板空间大小、机器人重量以及续航能力,在此选择狮子品牌的6000mAh、放电倍率为40C的航模锂电池。具体实物如图4.3所示:

图4.3 狮子6000mAh锂电池实物图

  电池具体参数见表4.1:

表4.1 狮子电池基本参数

序号

参数名称

参数

1

电压

11.1V

2

容量

6000mAh

3

尺寸

155*46*30mm

4

重量

约390g

5

持续放电倍数

40C

6

电芯

  锂聚合物动力电芯

4.3  降压模块

本设计中的降压模块有两种,LM2596S DC-DC降压模块用于将12V电源降压至10V,MP1584EN降压模块用于将LM2596S DC-DC降压模块输出的10V电压降至5V。

4.3.1  LM2596S DC-DC 降压模块

由于电源输出电压为12V左右,但TB6612电机驱动模块VM引脚的额定输入电压为10V以内。因此,无法将电源输出端的正负极与电机驱动模块直接相连,需要对电源进行降压调节。在此选用LM2596S DC-DC降压模块,具体实物如图4.4所示:

图4.4 LM2596S5降压模块

该模块具有高精度电位器,顺时针升压,逆时针降压,并且搭载0.1uf的电容位于电路板两侧,对于除去高频噪声有明显作用。

该模块具体参数见表4.2:

表 4.2 LM2596S基本参数

序号

参数名称

参数

1

输入电压

3.2~40V

2

输出电压

1.25~35V

3

输出电流

3A(最大)

4

转换效率

92%(最大)

5

输出纹波

<30mV

6

开关频率

  65KHz

7

工作温度

-45~+85℃

8

尺寸大小

43*21*14mm

4.3.2  MP1584EN 降压模块

由于电源经过LM2596S降压模块之后电压降至10V,而STM32单片机、ESP32-CAM以及LoRa无线通信模块都需要5V供电,因此必须再加入10V降至5V的降压模块来为上述器件供电。在此选取MP1584EN降压模块,具体实物如图4.5所示。

图4.5 MP1584EN降压模块

该模块体积小,可以实现固定电压输出,能够长时间工作控制在1.8A以内。

该模块具体参数见表4.3:

表 4.3 MP1584EN基本参数

序号

参数名称

参数

1

输入电压

7V~26V

2

输出电压

5V

3

输出电流

3A(最大)

4

转换效率

96%(最高)

5

输出纹波

<30mV

6

工作温度

-40~+85℃

7

尺寸大小

22.3*17*4.2mm

4.4  电机驱动模块

根据前文计算,直流减速电机的型号为MG513,额定电压12V,额定功率4W,额定电流0.36A,堵转电流为3.2A。在此选取TB6612FNG电机驱动模块,具体实物如图4.6所示。

图4.6 TB6612FNG电机驱动模块

通过查阅相关数据手册,TB6612FNG驱动模块易于用户使用并且所占空间小,能够以1.2A的恒定电流对两个直流电机进行操纵,其最大输出电流为3.2A。相较于传统的L298N效率上提高很多,在额定范围内,芯片基本不会发烫。该模块共有16个引脚,VM接入10V以内电源,其电压越大,电机转速越高。VCC接入5V电源,给模块供电。STBY控制模块工作状态,接单片机的引脚,单片机引脚置低时,电机全部清零;单片机引脚置高时,可以进行电机控制。通过AIN1、AIN2、BIN1、BIN2来控制两个电机的正反转。PWMA和PWMB接单片机的PWM输出引脚,用于控制电机的转动速度,电机转向控制引脚真值表如表4.4所示。AO1、AO2和BO1、BO2 是电机驱动的输出端,分别与两个直流电机相连接。

表4.4 电机转向控制引脚真值表

电机A

电机B

机器人

AIN1

AIN2

转向

BIN1

BIN2

转向

转向

0

0

停止

0

0

停止

停止

1

0

正转

1

0

正转

前进

0

1

反转

0

1

反转

后退

0

1

反转

1

0

正转

左转

1

0

正转

0

1

反转

右转

具体参数见表4.5:

表4.5 TB6612FNG直流电机驱动模块参数

序号

参数名称

参数

1

驱动电压

4.5~10V

2

输出通道数

2路

3

工作电流

1.2A

4

峰值电流

3.2A

5

控制电压

3V

6.5V

6

尺寸大小

20.5*20.4mm

4.5  无线通信模块

由于需要远程控制机器人,而一般的蓝牙模块虽然可以实现无线控制,但距离受限。在机器人工作状态中远程控制的距离达到上千米,在此选取LoRa无线通信模块。其通信距离高达3Km,并且耗电量低、有较强的抗干扰能力,拥有实现功率消耗小以及传输距离远的优点。不仅如此,该模块配置与安装十分简便,容易上手。该模块与其他物联网无线模块相比,其成本更低,在无线通信领域有着更广阔的发展潜力。其使用效果远超过同类型的物联网无线模块。ATK-LORA-01无线串口模块因其体积小、功率低、功耗低、性能强、传输距离远等优点被广泛使用。该模块使用的是高效的 ISM 频段射频 SX1278 扩频芯片,其工作频率为 410MHz~441MHz,信道以 1MHz 频率为步进,共有 32 个信道,可在线修改模块的串口速率、发射功率、空中速率、工作模式和自定义通讯密钥等各种参数,具体实物如图4.7所示:

图4.7 ATK-LORA-01模块

具体参数见表4.6:

表4.6 ATK-LORA-01模块参数

序号

参数名称

参数

1

调试方式

LoRa扩频

2

工作频率

410MHz~441MHz

3

通信距离

≥3000M(测试条件:晴朗、空旷、最大功率20DB、空中速率2.4Kbps、外接天线)

4

通信方式

串口(TTL)

5

放射功率

100MW(20DB)

6

空中速率

6级可调(0.3、1.2、2.4、4.8、9.6、19.2Kbps)

7

模块地址

65536个地址配置

8

接口速率

默认115200bps

9

天线形式

SMA天线

10

工作电压

3.3~5V

11

工作电流

2.3UA~118MA

12

工作温度

-40~+85℃

13

尺寸大小

36*20mm

14

发射缓冲区

512B大小的环形FIFO缓冲区

15

接收缓冲区

512B大小的环形FIFO缓冲区

该模块的引脚中,MD0高电平有效,运行时进入配置状态,可对其地址、波特率等进行更改。AUX引脚与单片机连接后,可以读取该引脚来获取模块的工作状态。RXD和TXD是串口的接收和发送引脚。VCC和GND为电源引脚。该机器人中,将配置两个LoRa模块,接收端位于机器人上,与单片机串口1连接,用于接收操作者发出的控制指令。发送端与操作者的电脑通过一个USB转TTL模块进行连接,用于发送操作者发出的控制指令。

本设计中,将两块LoRa的各项参数配置成一样,波特率设置为115200,空中速率2.4K,模块地址为0,通信信道为24,发射功率为20dBm,工作模式配置为一般模式,发送状态配置为透明传输,如图4.8所示。配置完成后,两块LoRa模块之间便可以完成通信。

图4.8 LoRa模块配置图

4.6  图像传输模块

由于需要将检测路面的情况传回PC端,在PC端进行图像处理,因此需要配置一个图像传输模块来完成此功能。为了达到无线图传、安装方便等要求,故在此选取ESP32-CAM开发板。ESP32-CAM开发板搭载了小型摄像头模块。该模块拥有完善的最小系统,可以单独进行使用,该模块体积小,耗电量低,续航能力强,在物联网领域被广泛使用。该模块采用功耗比较低的双核32位CPU,主频高达240MHz,运算能力高达600DMIPS,内置520KB SRAM,外置8MB PSRAM,支持 UART/SPI/PWM/ADC/DAC等接口,支持OV2640和OV7670摄像头,内置闪光灯,支持图片WIFI上传,这一点也是选择该模块的重要因素。将ESP32-CAM与电脑连接在同一个局域网内,从而处理来自ESP32-CAM的图像。具体实物如图4.9所示。

图4.9 ESP32-CAM开发板

4.7  GPS模块

由于在远程检测的过程之中,在发现比较严重的路面裂缝之后,需要对该裂缝进行定位,便于后期工作人员的进一步检测和修复,因此需要GPS模块来进行精准定位,实时跟踪机器人位置。在此选取集成化好的GPS定位器。该定位器采用的是MYK2503D芯片,位置更新快速。此外,该模块小巧易放,内置高聚能电池,待机时间长。可以通过手机软件和电脑网页来查看机器人的实时位置。

5  下位机软件设计

5.1  软件开发环境简介

本设计中利用两个软件来进行单片机的开发,一个是STM32CubeMX,其是ST公司开发的一款图形化界面的单片机程序生成软件,利用图形化操作界面,能够相当便捷地配置单片机的一系列外设,时钟,中断,DMA等等各功能的一些参数,之后STM32CubeMX能够直接产生单片机各功能的初始化程序,这让开发的工作者能够将尽可能多的精力用于核心代码的研究之中,软件界面如图5.1所示。以往对于单片机的开发过程中,需要针对单片机的引脚以及外设做很多的初始化工作,非常繁琐。

图5.1 STM32CubeMX界面图

另一个是STM32CubeIDE,这是一种高级C/C++开发软件,该软件能够很方便对STM32单片机进行外设的配置,同时在该软件中可以实现控制程序的编写以及调试工作。它支持集成数以百计的现有插件。STM32CubeIDE与STM32CubeMX配合使用能够加强工作效率,STM32在后者中配置好后,前者能够集成其配置与项目创建功能。两者结合使用可以带来一体化的感觉,能够很大程度上提高开发者工作效率。在界面中选择所使用的单片机型号,对单片机进行预配置,将创建项目并生成初始化代码。开发者在编写控制程序的过程中,随时都可以对外设或引脚进行重新配置,并重新产生初始化程序,在这个过程中也不会对开发者的程序产生影响,软件界面如图5.2所示。该平台来编写检测机器人的控制程序,可以很大程度上提高效率。

图5.2 STM32CubeIDE界面图

ST有着非常丰富和便捷的单片机开发库。截至目前,提供了标准外设库(STD库)、HAL库、LL库三种不同的库。本设计中使用的库为LL库,LL库(Low Layer)对于硬件层更加紧密,对单片机中的外设都适用,但不适合比较繁琐的上层协议,LL库可以直接对寄存器进行操作。使用方法:LL库不需要依赖任何库,可以进行独立开发使用。在应用STM32CubeMX实现完单片机的配置之后,选中LL库进行代码生成即可。

5.2  引脚输出程序设计

本设计中需要对PA11、PA12、PB10、PB11这4个引脚进行初始化,其中PA11和PA12控制电机A的转向,PB10和PB11控制电机B的转向,为了便于编程方便,同时增强程序的可读性,对这些引脚进行宏定义:

然后,配置这些引脚的输出模式为推挽输出模式:

推挽输出,可以输出最高到VCC,最低到GND的电压,可以很好地作为控制电机转向的引脚输出模式。最后,在主程序文件中包含

文件,并对其进行初始化:

5.3  PWM输出程序设计

本设计中需要将TIM4配置为PWM输出模式,在进行PWM信号输出时,有两种PWM模式:PWM1模式和PWM2模式。PWM1模式:递增计数时,当

(计数值)< 

(捕获/比较值)时,输出的电平才有效,否则为无效电平。递减计数模式则刚好相反。 PWM2模式:递增计数时,当

(计数值)<

(捕获/比较值)时,输出为无效电平,否则电平是有效的。递减计数模式则刚好相反。 两种模式下的PWM信号波形如图5.3所示。

图5.3 两种模式下的PWM输出信号图

本设计之中配置PWM的工作模式为PWM1模式,如图5.4所示。

图5.4 PWM1模式配置图

同时,还需要设置PWM波的频率。首先,设置单片机的系统时钟频率为72MHz。

PWM频率的计算公式为:

                         (5.1)

式中,f——PWM频率,Hz

      ARR——自动重装载值

      PSC——预分频系数

时钟频率——72MHz

本设计中,ARR为7199,PSC为199,经过计算可得f=50Hz,同时,周期为20ms。

对PB6、PB7引脚进行初始化,设置引脚模式为复用模式,输出模式为推挽输出:

配置完成后还需添加定时器的使能程序:

最后,利用LL库函数设置PWM波的占空比即可进行PWM的输出:

5.4  串口接收及中断程序设计

本设计中配置串口1接收来自LoRa模块的数据,将串口1设置为异步通信方式,波特率为115200 Bits/s,如图5.6所示。

图5.6 串口配置图

在串口1中,PA9为TX引脚,负责发送数据;PA10为RX引脚,负责接收数据,因此对于PA9引脚的配置应该为推挽输出模式:

对于PA10引脚的配置应该为浮空输入模式:

当串口1收到数据之后触发串口中断程序:

将收到的数据用一个变量保存下来:

5.5  自定义函数设计

为了使用方便以及增强程序的可读性,本设计中定义了6个函数:

的作用是输入一个整型数据作为PWM的占空比:

的作用是通过改变PB10、PB11、PA11、PA12的高低电平输出来控制两个电机的正转,从而控制机器人的前进:

的作用是通过改变PB10、PB11、PA11、PA12的高低电平输出来控制两个电机的反转,从而控制机器人的后退:

的作用是通过改变PB10、PB11、PA11、PA12的高低电平输出来控制左电机反转,右电机正转,从而控制机器人的左转:

的作用是通过改变PB10、PB11、PA11、PA12的高低电平输出来控制左电机的正转,右电机反转,从而控制机器人的右转:

的作用是通过改变PB10、PB11、PA11、PA12的高低电平输出来控制两个电机停止转动,从而控制机器人的停止:

6  裂缝检测上位机软件设计

本设计通过OpenCV开源库来处理图传模块传输的图像,从而完成裂缝检测。OpenCV是一种开源计算机视觉库,它提供了一些用于处理图像和视频的工具和算法。它被用于各种各样的计算机视觉应用程序中,包括人脸检测、目标识别、图像分割、机器人视觉、运动跟踪、手势识别等,本设计中的裂缝检测程序流程图如图6.1所示。

图6.1 裂缝检测流程图

6.1  图像获取

首先应该在Arduino IDE中烧录ESP32-CAM的WIFI图传程序,通过串口获取ESP32-CAM的视频流上传网址。在保证开发板与电脑在同一局域网下,利用urllib 库 ,它是 Python 内置的 HTTP 请求库。urllib 库提供的上层接口,使访问网站上的数据就像访问本地文件一样。urllib.request 模块提供了最基本的构造 HTTP (或其他协议如 FTP)请求的方法,利用它可以模拟浏览器的一个请求发起过程。利用不同的协议去获取 URL 信息。使用 urllib.request 模块中的 urlopen()方法获取页面,其结果是返回一个类文件对象。再用Numpy库中的numpy.array()函数将列表中的数据转换为数组。最后用OpenCV中的cv2.imdecode函数来读取图像数据并将其转换为图像格式,主要是用来从网络传输数据中恢复出图像。图像获取的流程如图6.2所示。

图6.2 图像获取流程图

6.2  图像预处理

图像预处理能够尽可能消除原始图像中所存在的干扰点、噪声点,将真实的裂缝边缘信息突显出来,让图像更具备可检测性,并且能够将图像数据信息进行缩减,使得图像处理的计算量减小,处理速度提高。本设计中进行图像预处理的原因是为了将图像锐化、减少杂质的干扰、平滑图像、突显裂缝边缘,使裂缝更加明显、检测更加准确。

6.2.1  灰度化处理

图像的灰度化是指将彩色图像转化为灰度图像的变化过程,其目的是为了简化矩阵,提高运算速度。因为在彩色图像中,每个像素颜色是由R、G、B三个分量来决定的,而每个分量的取值范围都在0-255之间。彩色图像中,每一个像素点就会有2563=16777216种可能性存在,使得计算量比较大。而灰度图像是R、G、B分量相同的一种特殊彩色图像,对计算机来说,一个像素点的变化范围只有0-255这256种。彩色图片的信息含量过大,而进行图片识别时,其实只需要使用灰度图像里的信息就足够了,所以图像灰度化的目的就是为了提高运算速度。当然,有时图片进行了灰度处理后还是很大,也有可能会采用二值化图像(即像素值只能为0或1)。

6.2.2  图像滤波

由于采集到的图像可能存在较多的噪声,因此为了尽可能地避免噪声的干扰,提高裂缝识别的精确度,需要运用滤波器对图像进行预处理,使得图像尽量平滑。针对本次本设计,运用中值滤波的方式来进行滤波操作效果更好。中值滤波是一种非线性数字滤波。它会取当前像素点及其周围临近像素点的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值。在OpenCV中,运用cv2.medianBlur()函数来实现中值滤波。

当把滤波核设置为3时,滤波效果如图6.2所示。

图6.2 滤波效果图

将其邻域设置为3×3大小,对其3×3邻域内像素点的像素值进行排序(升序降序均可),按升序排序后得到序列值为:66、78、90、91、93、94、95、97、101。在该序列中,中值为“93”,因此用该值替换原来的像素值”78”,作为当前点的新像素值。

在实际情况中,中值滤波前后的对比如图6.3所示。

图6.3 中值滤波前后对比图

6.2.3  Gamma变换

  Gamma变换主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,增强对比度。变换公式就是对原图像上每一个像素值做乘积运算

                                 

其中,

代表输入,s代表输出灰度。

伽马变换对图像的修正作用其实就是通过增强低灰度或高灰度的细节实现的,从伽马曲线可以直观理解,如图5.4所示。

图6.4 伽马曲线

从图中可以看出,γ值小于1时,会拉伸图像中灰度级较低的区域,同时会压缩灰度级较高的部分,即使得图片变暗。γ值大于1时,会拉伸图像中灰度级较高的区域,同时会压缩灰度级较低的部分,即使得图片变亮。γ值以1为分界,值越小,对图像低灰度部分的扩展作用就越强,值越大,对图像高灰度部分的扩展作用就越强,通过不同的γ值,就可以达到增强低灰度或高灰度部分细节的作用。本设计中Gamma值大于1,因为在经过中值滤波之后,仍然会出现一些噪声来干扰识别,而这些噪声阴影的灰度级低于裂缝的灰度级,将Gamma设置为大于1,来压缩灰度级较低的部分,从而有效的降低干扰。Gamma变换前后对比如图6.5所示。

图6.5 Gamma变换前后对比图

6.2.4  形态学操作

形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征,其中腐蚀操作和膨胀操作是形态运算的基础。本设计中对图像先运用cv2.erode()函数进行腐蚀操作,使得图像边界向内收缩,可以消除细微的深色杂质,再运用从v2.dilate()函数进行膨胀操作,使得图像边界向外扩张,让裂缝更为明显,这种操作也被称为开运算。开运算能够去除孤立的噪声点、毛刺等,而裂缝主体基本保持不变。

6.3  边缘检测

本设计采用canny边缘检测算法,其为一个多级边缘检测算法。该算法能标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报,并且标识出的边缘与实际边缘比较接近。该算法输入为灰度图,输出为二值图像。

6.3.1  高斯滤波

使用高斯滤波器卷积处理图像,使得图像平滑,从而降低噪声给图像处理带来的影响。高斯滤波为 一种线性平滑滤波,它会对整个图像进行加权平 均,每一个像素点的值,都由其本身和邻域内的其 他像素值经过加权平均后得到。其具体操作为:用一个模板扫描图像中的每一个像素,用通过模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。高斯滤波公式为

                 (6.2)

其中,

是一个恒定值,该值不会改变像素点之间的关系,而且之后都会归一化处理,所以再实际的计算中,将其忽略,即

                        (6.3)

其中,(x ,y )为掩膜内任一点的坐标;(ux,uy)为掩膜内中心点的坐标,在图像处理中可认为是整数;σ是标准差。该步骤可以在一定程度上减小误识别率,提高边缘检测的准确性。

6.3.2  Sobel算子

计算梯度幅值和方向采用Sobel算子,图像矩阵分别与垂直和水平方向上的卷积核进行卷积,得到dxdy,总的图像梯度为

                          (6.4)

梯度方向

                              (6.5)

但是出现梯度的地方不一定就是裂缝边缘处,只是灰度变化明显的地方梯度较大,因此这是得到的边缘还是不确定的,需要进一步来确定。

6.3.3  非极大值抑制

非极大值抑制是一种边缘稀疏化处理技术。在获得了梯度的幅度和方向后,遍历图像中的像素点,去除所有非边缘的点。具体方法是:如果该点是正/负梯度方向上的局部最大值,则保留该点。如果不是,则抑制该点(归零)。如此一来,就可以将大部分伪点去除,进步确定边缘信息。

6.3.4  双阈值确定边缘信息

完成上述步骤后,图像内的强边缘已经在当前获取的边缘图像内。但是,一些虚边缘可能也在边缘图像内。这些虚边缘可能是真实图像产生的,也可能是由于噪声所产生的。对于后者,必须将其剔除。设置两个阈值,其中一个为高阈值,另一个为低阈值。根据当前边缘像素的梯度值与这两个阈值之间的关系,判断边缘的属性。按照以下三个规则进行:

  1. 边缘强度大于高阈值的点设置为确定的边缘点;
  2. 边缘强度小于低阈值的点被剔除;
  3. 边缘强度位于高阈值与低阈值之间的为虚边缘,需要保留。

对于上述过程之中保留下来的虚边缘点,可能是真实的边缘点,也可能是噪声点,因此需要对其做进一步处理。一般通过判断虚边缘与强边缘是否连接,来确定虚边缘的情况。只有这些点能按某一路径与确定边缘点相连时才会被保留。这样做是因为如果只保留确定边缘点,有些边缘可能不闭合。这就需要从满足边缘强度位于高阈值和低阈值之间的点中选取 合适的点来进行补充,使得边缘尽可能闭合。而高阈值与低阈值选择的大小也会影响到边缘检测的效果,所以要根据具体情况来设定高低阈值。

canny边缘检测结果如图6.6所示。

图6.6 边缘检测结果图

6.4  最大宽度计算

在识别出裂缝之后,需要检测出裂缝的宽度进而对路面损伤严重程度进行一个表征。本设计中检测裂缝宽度的方法是:

  1. 先固定每一行,然后遍历每一列的所有像素点,找出每一行之中所有的白色像素点;
  2. 用后一个白色的像素点来减去前一个像素点的值,从而可以得出两个像素点之间的距离;
  3. 再从这些距离之中找出最大的值,根据像素点和真实距离之间的关系,即可完成裂缝最大宽度的确定。

宽度检测结果图如图6.7所示。

图6.7 宽度检测结果图

6.5  用户界面设计

用户界面是指对软件的人机交互、操作逻辑、界面美观的整体设计,用户界面(UI)是系统和用户之间进行交互和信息交换的媒介,设计它UI的目的在于工作人员可以更便捷、更高效地操纵机器人进行路面检测,并且能够更加直观地反应裂缝的检测结果。

本设计的UI是基于PyQt5设计,其是基于图形程序框架Qt5的Python语言实现,由一组Python模块构成,作为GUI库,其功能强大,并且比较流行。PyQt API是一个包含大量类和函数的模块集。QtCore模块包含用于处理文件和目录等的非GUI功能,而QtGui模块包含所有的图形控件。

本设计采用Qt Designer进行界面设计,主要包含三个功能部分:视频及图像显示、检测功能按钮、机器人控制功能按钮。

6.5.1  视频及图像显示

首先创建一个QTimer对象,通过setInterval()设置定时时间,本设计中设置的为30ms,即30ms捕获一帧。然后通过QTimer中的start()开始计时,每当计时的时间超过了给定的时间后,就会调用一次timeout.connect()中的函数。而timeout.connect()中的函数主要作用是来获取ESP32-CAM传输的视频,并将获取的图像转变换成Qimage,最后在Qlabel上显示图像。

该UI中显示图像的地方一共有两处,一处是可以用于显示实时视频中截取的图像,即通过将视频流中当前帧的图像保存下来,并显示出来。同时也可以通过QFileDialog.getOpenFileName()的方法加载电脑中存储的图片,另一处是用于显示检测结果的图像。其都是通过采用 QLabel 组件来实现图像显示。

6.5.2  检测功能按钮

检测功能按钮一共有四个:打开摄像头、捕获图片、打开图片、裂缝检测。这四个按钮可以用于实现裂缝检测功能,每个按钮都有相应的槽函数。打开摄像头按钮所对应槽函数的作用是开启定时器,进行视频显示;捕获图片按钮所对应的槽函数的作用是将视频中当前帧的图像保存下来并显示;打开图片按钮所对应的槽函数的作用是将电脑内存储的图片显示出来;裂缝检测按钮所对应的槽函数的作用是利用OpenCV对图像进行处理,完成裂缝检测,并将检测结果显示出来。

6.5.3  机器人控制功能按钮

机器人控制功能按钮一共有五个:前进、后退、左转、右转、急停。这五个按钮用于实现工作人员对机器人的远程控制,同样每个按钮都有相应的槽函数。当按下这些按钮时,电脑就会通过串口向LoRa模块发送十六进制数据,这一数据又会通过LoRa模块传递给机器人,机器人收到数据后,再判断该数据为何种指令,从而完成实现相应动作。

用户界面如图6.8所示:

图6.8 用户界面

7  实物调试

本设计的实物调试主要针对于履带式底盘行走机构,图像收发:通过自行搭建斜坡与沥青路面实地测试,检测履带式机器人的通过性;对ESP32-CAM传输图像的帧数和清晰度进行测试。

7.1  机器人底盘调试

7.1.1  爬坡测试

实物调试过程中,为了检测机器人最大的爬坡角度,将机器人置于斜坡底部,以零初速度的方式启动并爬坡。首先,将斜坡倾角调整为大约10

和20

。如图7.1所示:

 

图7.1 爬度

测试

经过测试,机器人顺利到达斜坡顶部,为探求该机器人的极限爬坡角度,不断调节斜坡与地面夹角,当夹角大约为

时,履带与斜坡之间开始打滑,因此实际最大爬坡角度大约为

。如图7.2所示:

图7.2 坡度

测试

7.1.2  沥青路面测试

由于该裂缝检测机器人的工作场景是在沥青路面上,为使该检测机器人可以顺利应用于沥青路面,要求履带式行走机构可以在沥青路面顺利行走,检测机器人在沥青路面的行走测试如图7.3所示:

图7.3 沥青路面行走测试

7.2  图传调试

7.2.1  图像发送测试

通过在Arduino IDE中编写程序,为ESP32-CAM配置无线网络,将程序烧录进去,按下复位键后,通过软件界面上的串口监视器即可查看ESP32-CAM上返回来的视频传输网址,如图7.4所示。

图7.4 串口监视器图

7.2.2  图像接收测试

将电脑连入与ESP32-CAM相同的局域网中,然后进入ESP32-CAM传输回来的网址中即可查看ESP32-CAM传输的实时视频,如图7.5所示。

图7.5 网页视频流图

接下来需要将该视频用于OpenCV进行处理,进入到ESP32-CAM的视频源网页按下“F12”打开开发者模式,然后点击“网络”接着点一下左小角的“Get Still”。此时右边开发者模式框内会捕捉到一条请求,如图7.6所示,复制“请求URL”的内容,最后将刚刚复制好的内容粘贴进url变量里并在最后加上“.jpg”,并可以用urlopen()的方法来进行视频读取了。

图7.6 开发者模式图

设计总结

本文在较为全面的搜索国内外有关沥青路面检测相关技术的基础上,经过自身的学习与探索,设计了一款可以协助工作人员检测的沥青路面裂缝检测机器人。可以在一定程度上,代替工作人员进行检测。有效的提高了检测的效率,在一定程度上提高了准确率,为后续更深入的研究奠定的基础。本文主要设计成果如下:

(1) 利用LoRa无线串口模块设计了便捷、功耗低、距离远的无线通信方案,实现了工作人员对检测机器人的远程控制。

(2)为了实现无线图传,且考虑成本和体积等因素,利用ESP32-CAM完成了无线图像传输,且通过urllib.request 模块中的 urlopen方法和OpenCV来对传输的图像进行处理和显示。

(3)利用OpenCV开源视觉库实现了对裂缝的检测,并且能够对裂缝的最大宽度进行大致表征。

(4)根据沥青路面存在凹凸不平、陡坡等特性,对比传统的轮式行走机构,选择并设计了履带行走机构,并分别对履带行走机构中驱动电机等零件进行了选型设计,并进行了网上采购以及拼装。

 (5)遵照设计任务书中设计要求,首先绘制电路原理图。在网上采购主控芯片、电机驱动模块、降压模块、LoRa无线串口模块等一系列硬件电路模块,并根据电路原理图进行电路连线。在绘制完电路原理图的基础上,设计了PCB并将其制作出来。

(6)组装好机械结构与电路搭接后,导入程序,进行实物调试,满足设计要求。

本设计可以通过工作人员远程控制机器人进行路面检测,为检测人员提供了便捷。但本设计还有诸多不足:受到摄像头清晰度的限制,传输给电脑的图像存在模糊的地方,影响识别的准确度,无法满足实际检测的需要;在裂缝识别的图像处理过程中也无法做到将所有裂缝的边缘信息检测出来,并且对于裂缝的深度以及损伤程度需要做进一步的表征;同时当机器人在工作之中遇到高温天气和雷雨天气时,没有良好的安全保护措施。受到个人能力的限制,还有诸多技术上的难题在本设计中难以攻克,有望在以后的深入研究中加以解决。

致    谢

鲜衣怒马少年时,不负韶华行且知。相聚在2019年金秋,离别于2023年盛夏。逐梦交大,终要离别。四载青春打马过,三千往事浮眼中。回忆在脑海里缓慢铺陈,吉光片羽般的青春,一旦落幕便要永久封存。纵有万般不舍,满怀感恩之情,今借此文聊表谢忱。

饮水思其源,学成念吾师。感谢老师从大二开始带领我参与学科竞赛,为我们提供实验场地、实验设备,同时也是我毕业设计的指导老师,从开题到答辩的每一个环节都对我进行悉心指导,每一步都倾注了大量的心血。老师严谨的治学态度、负责的工作作风、诲人不倦的高尚师德都对我影响深远。感谢四年来所有的任课教师,本设计的顺利完成离不开各位老师们的倾囊相授。

平生感知己,方寸岂悠悠。感谢同学、朋友们,五湖四海汇聚在一个专业,这是难得的缘分。精彩的你们出现在精彩的人生之中,感谢你们在我需要帮助的时候伸出的援手,感谢你们给予的关心与照顾。愿各位前程似锦,天涯比邻。

父母之爱子,则为之计深远。感谢父母对我无微不至的照顾,感谢父母供我求学,予我温饱,让我见识了您们未曾见识过的、更加广阔的世界。悠悠二十载,三生难报答,唯有万般努力成为您们的骄傲,不负您们的期待。愿工作顺利,平安健康。

最后,感谢普通的自己,一路平凡但却不断努力前行。追风赶月莫停留,平芜尽处是春山,愿前路漫漫亦灿灿。

附录清单

附录A——元器件清单1份

附录B——电路原理图1张

附录C——主要程序代码1份

附录A-元器件清单

序号

元器件

数量

1

STM32F103C8T6

1

2

ESP32-CAM

1

3

航模电池

1

4

LM2596S降压模块

1

5

MP1584EN降压模块

1

6

TB6612FNG

1

7

LoRa无线通信模块

1

8

GPS模块

1

9

MG513电机

2

缝检测机器人设计

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐