前言
各位参赛同学,大家好!新的一届智能车大赛已然拉开序幕,新的挑战已经来临。今天,我们将聚焦双车跟随组,由龙邱工程师为大家带来双车跟随组的保姆级讲解。
本次讲解涵盖七个部分:组别简介、硬件清单、开发工具、外设基础、通用控制算法、双车跟随赛项分享以及备赛建议与资源推荐。我们精心编写这本手册,旨在帮助新同学快速入门智能车大赛,感受智能车的魅力。同时我们也会毫无保留地分享双车跟随组的方案与调车心得。我们深知没有绝对的最优解,但我们希望这些经验能为大家提供清晰的探索思路,让大家在备赛过程中少走弯路,从容应对比赛挑战。
如果大家想要探讨智能车相关话题,欢迎加入我们的QQ讨论群。在这里,无论是智能车的硬件设计、软件编程,还是比赛策略、技术难题,都能展开交流。相关资料,开源库,工具也可在QQ群里下载,同时也会在gitee进行开源。
龙邱20届智能车综合技术交流群228227119
龙邱20届智能车双车组交流群311091469
1. 组别简介
1.1. 赛题要求
关于第二十届全国大学生智能汽车竞速比赛的规则,详⻅卓晴教授在 CSDN 博客上的⽂章《第二十届全国大学生智能汽车竞速比赛规则》。该文详细阐述了本次竞赛的各项规定及要求。链接如下:
第二十届全国大学生智能汽车竞速比赛规则_20届智能车-CSDN博客
赛题要求:
1.2. 规则解析
前车要求使用三轮,后车使用四轮车
前车选用三轮车辆,能够有效减少祖传代码带来的影响。通过实际测试发现,“前车三轮、后车四轮” 的配置,在系统性能上限方面显著优于 “前车四轮、后车三轮” 的配置。这是因为前车位置优于后车,四轮车模性能优于三轮车模。将三轮车模置于相对更具优势的前车位置,有助于平衡整体性能下限。在调试过程中,“前车三轮、后车四轮” 的组合速度能达到 2.8m/s 以上,而 “前车四轮、后车三轮” 的组合速度仅能达到 2.5m/s
限制后车摄像头的安装位置
对于后车,需对其摄像头的安装位置进行限制。 后车摄像头需要距离前轮轴心15cm以上,此位置大致处于后轮电机处。摄像头中心高度需小于10cm 此位置大约略高于舵机。这两条的目的在于确保后车无法直接看到赛道,只能依靠前车的引导灯来实现循迹。在实际测试中,限制后车摄像头的位置,并不会影响对前车的追踪。
限定通讯的途径
两个车模之间只允许使用LED灯与声音作为循迹方式,禁止采用其他方法循迹。LED也分为两种如果使用可见灯光则需要使用英飞凌的LED驱动芯片(TLD7002或TLD2331)来制作灯板,如果使用的是红外LED则对驱动芯片没有限制。
可以增加负压
在双车跟随赛项里,车模允许添加负压,但并非前后车都需要添加负压。因为三轮车模上限低于四轮车模。若前车添加负压,后车仍能稳定顺畅地跟随,那么仅为前车增设负压即可。若三轮车模添加负压后,四轮车模不能稳定跟随,此时双车均添加负压。双车跟随赛项本身就极具观赏性,现在又有了负压的加入,如同锦上添花,必定让比赛更加精彩!
赛道没有坡道与路障
这一点其实是很容易理解的。在双车跟随的过程中,后车主要依靠接收前车的 LED 信息来实现的跟随。而坡道和路障的存在,会让后车迅速丢失前车信息。
注:自制的电路板需在正面覆铜面展示队伍信息,包括学校名称、队伍名称、制作日期。
2. 硬件清单
2.1. 车模选型
2.1.1. 前车三轮车模
在双车跟随赛项中。我们前车的三轮车模采用的是F车模。F车模拥有强大的电机与丝滑的万向轮。为竞速提供坚实的保障
F车模特点(三轮车模通用)
F 车模具备结构简易、转向灵动的优点。其结构设计简单,降低了组装与调试的难度,为搭建赛车提供了便利。转向系统灵活,展现出良好的操控性。不过,F 车模也存在一定的局限性。它仅能借助电机差速实现转向,虽然电机可以快速的响应,但是无法瞬间达到目标速度,在高速行驶时,面对弯道,转向就会显得颇为吃力。与此同时,频繁差速转向还会导致电机发热加剧,电池电量消耗也会加快。
在使用 F 车模搭建赛车时,重心的合理设置至关重要。若 F 车模重心靠前,会远离转向中心,导致转弯时阻力增大,转弯延迟增高。从理论上来说,将重心置于 F 车模的后轮中心位置最为理想,可实现最佳的转向性能。但在实际操作中,这样的重心设置会引发严重的翘头问。因此,在实际搭建过程中,通常会将重心设置在后轮中心稍靠前的位置,来兼顾赛车的稳定性与操控性。
2.1.2. 后车四轮车模
在双车跟随赛项中。我们后车四轮车模采用的是C车模。C车模更是经典中的经典。C车模经过了一届届大赛的考验,无论是稳定性还是性能都是无可挑剔的
C车模特点(四轮车模主动差速车模通用)
C车模依靠舵机打角与后轮主动差速来进行转向。虽然舵机转向会有延迟,但是当舵机完成打角后可以迅速的改变车模的行进方向,而且后车的主动差速可以很好的辅助前车进行转向。使用C车模调车的时候不仅要调试前轮的的舵机,还要调节后轮的差速,让后轮的差速能匹配前轮的舵机。缺点是当转向PID没有调试好的时候,舵机抖动严重,尤其是在环岛与十字的时候最容易发生。
C车模的重心影响会比F车模小。但是不同的重心也会对车模产生不同的影响。车模重心越靠前,舵机对转向的影响就越大,差速对转向的影响就会越小,反之同理。实测下来车模重心在车模中间略微偏后位置,效果最佳
2.2.主控
Infineon平台: TC212 TC264 TC364 TC377 TC387 CYT4BB7 CYT2BL3
STC平台: Ai8051U AI8052U STC32G12K128 8H8K64U
NXP平台: RT1064
龙芯平台: 久久派板卡
双车跟随中对主控的限制比较松,以上型号的主控都可以使用。但是结合处理器性能,片上资源与性价比等关键因素,这里推荐大家使用Infineon平台的TC297,TC377,TC387芯片。这几款芯片都是300MHZ的多核汽车芯片,性能强劲,运行稳定,是双车主控的不二之选。
2.3. 硬件模块
2.3.1. 主板
主板是电路连接枢纽,负责分配供电,保障各组件稳定运行。它还能高速传输信号,实现数据交互,配备丰富扩展接口,便于拓展功能,同时具备稳压作用,确保电力输出稳定。
2.3.2. 双路驱动
电机驱动可以PWM的占空比转变为相应强度的电压,施加在电机的两极来驱动电机旋转。占空比越高电机驱动输出的电压越高,电机的转速就越快。
采用门极驱动芯片 DRV8701E + N-MOS 管 TPH1R403NL 方案,无需升压电路,输入电源在 5.9V ~ 28V 均可使用,带过流保护功能。
控制方法:控制一个电机只需要输入一个 PWM 信号控制转速,通过一个普通 GPIO 输出高低电平来控制转向。
控制方法:控制一个电机只需要输入一个 PWM 信号控制转速,通过一个普通 GPIO 输出高低电平来控制转向。
PH-6P接口:隔离供电以信号输入。
XT30接口:直流电压输入,输入电压5-28V,一般大小为电机可承受的最大电压。
蓝色端子: 直流电压输出,输出电压与输入PWM值正相关。
连接架
由于后车摄像头需要安装到车身尾部,与驱动的位置相近。所以龙邱专门为双车后车设计了一个连接架,可以优雅的将我们的8701驱动与摄像头装到车上
2.3.3. 编码器
编码器是一种将信号(如位移、角度等)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。
编码器分为增量式与位置式,而我们只用增量式的编码器。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小,本例程使用的是此类编码器。
正交AB相512线编码器通过两个信号线的输出脉冲进行数据处理,一个输出脉冲信号就对应一个增量位移,编码器每转动固定的位移s,就会产生一个脉冲信号,通过读取单位时间t的脉冲信号的数量,便可以达到测速的效果(v=s/t),通过对脉冲信号的累加,和编码器码盘的周长便可以达到计算路程的功能(s=d0+d1+...)。
编码器的线数,代表了编码器旋转一圈所发出的脉冲数,如果一个编码器是512线,说明这个编码器转一圈对应的信号线会输出512个脉冲,AB两相转一圈发出的脉冲数一样的,不过存在90°相位差。
编码器反馈回脉冲信号,定时器引脚接收脉冲信号,通过AB信号的差异判断是正值还是负值。我们只需要看看定时器的计数器增加了多少,就能得到编码器旋转了多少。每次获取完计数值后要清空计数值,方便下次获取。要注意的是计数值大小会受时间的影响,所以记得配合定时器的定时中断来使用,从而获取有效的数据。
2.3.4. 摄像头
摄像头作为获取赛道信息的视觉传感器,是所有视觉类赛项最核心的传感器。摄像头我们推荐大家使用神眼摄像头。使用MT9V034 芯片的神眼摄像头,采用了全局快门技术,所有像素点可同时收集光线、同时曝光,能在同一时刻形成完整图像,拍摄运动物体时不会发生形变,适合拍摄快速运动的物体。并且神眼摄像头在不裁剪图像的情况下帧数可达到260帧,性能非常强
2.3.5. 其他模块
姿态传感器
陀螺仪在智能车中的应用:
- 与转向环串级使用,达到更好的控制效果。
- 调整平衡车姿态,使车身平衡且能正常转向和前进。
- 作为角度环闭环控制的输入。
- 积分角度作为元素状态切换条件,例如确定环岛的进环、环内、出环时机。
姿态传感器主要由加速度计与陀螺仪两部分组成。加速度计用于测量物体的加速度,陀螺仪用于测量物体的角速度。通过对加速度和角速度的测量,可以推导出物体的角位移。简单来说就是可以读取物体的偏移角度,以及移动的加速度。可以通过程序处理得到物体的欧拉角以及移动加速度。
显示模块
屏幕可以用来显示信息,方便我们来调试。 常见的信息显示比如有 图像的显示,图像偏差的显示,速度的显示,元素识别情况等,是调车及不可少的一个模块。这里推荐大家使用IPS屏幕。显示清晰,刷新速率高,图像色彩丰富。
蓝牙转串口模块
蓝牙转串口模块是一种实现无线数据传输的串口通信模块,它能够将蓝牙无线信号与串口通信协议进行转换,为设备提供便捷的无线通信能力。在车模调试与控制中,蓝牙转串口模块发挥着重要作用:通过它,我们可以实时获取车模的动态信息(如速度、方向、传感器数据等),并利用上位机远程控制车模的启动、停止以及其他操作。此外,蓝牙转串口模块还可以与上位机配合,将采集到的数据以波形图的形式直观显示,便于开发者分析和优化系统性能。无论是远程调试、数据传输,还是实时监控,蓝牙转串口模块都是一种高效且实用的解决方案。
3. 开发工具
3.1.硬件设计软件
在绘制电路图时,通常会使用 Altium Designer 或 立创 EDA。关于具体版本的选择及软件的下载方法,建议通过网络搜索引擎或者公众号等途径自行查询获取。对于未曾接触过该软件的用户,B 站和 CSDN 提供了丰富的相关学习资源供初学者学习。
注:自制的电路板需在正面覆铜面展示队伍信息,包括学校名称、队伍名称、制作日期。
3.2 搭建开发环境
3.2.1. ADS集成开发环境
由于这部分展开来讲有点多,所以这里提供了一个链接,大家可以跳转进去查看教程,新版ADS也可以去“龙邱20届智能车综合技术交流群”里自行下载,或者向淘宝客服询问链接。
https://www.bilibili.com/video/BV1wV411E7PY?from=search
3.2.2. 下载开源库
除了在gitee下载开源库以外,开源库还可以在QQ群的群文件里下载,或者询问淘宝客服,客服可以也会给大家提供。
3.2.3. 点灯程序测试
我们写一个最简单的点灯程序,来给大家演示一下烧录。
点击这个按钮,自动编译项目并且烧录。
3.2.4. 搭建环境时的常见问题
最常见的问题:板子与下载器都连接好了,驱动也没问题但是还是烧录失败?解决方法:先给母板外部供电后,再连接下载器。导入新工程后记得右击选择“Set Active Project”,来设置活动页面,其他的问题展开就太多了,这里不在列举了。其他问题可以进这个链接查看
3.3. 多功能调试助手
·我们新推出了一个多功能调试助手,包含了串口助手,波形图,无线图传上位机,网络助手。软件的获取与介绍请在龙邱20届智能车综合技术交流群里下载,同时也会在gitee开源。
4. 外设基础
4.1. GPIO
GPIO是通用输入输出(General Purpose Input/Output)端口的简称,通俗来讲就是单片机可编程控制的引脚。每个GPIO引脚都可以通过软件配置为输入或输出模式,用于与外部设备进行数据交互。在输入模式下,GPIO可以读取外部信号的状态(如高低电平);在输出模式下,GPIO可以驱动外部设备(如点亮LED或控制继电器)。芯片的GPIO引脚通过与外部设备连接,实现了单片机与外部世界的交互,所有的GPIO引脚都具备基本的输入输出功能。
常见输入模式
上拉输入:内部接上拉电阻,无外部输入时为高电平,外部信号为低电平时可拉低引脚电平。
下拉输入:内部接下拉电阻,默认状态为低电平,外部信号为高电平时可拉高引脚电平。
浮空输入:引脚处于高阻抗状态,电平由外部电路决定。
模拟输入:引脚直接连接到模数转换器(ADC),用于读取模拟信号(如电压值)。
常见输出模式
推挽输出:能主动输出高、低电平,驱动能力强,开关速度快。
开漏输出:可输出低电平,高电平需靠外部上拉电阻,能实现 “线与” 功能,吸收电流能力较强。
补充说明:所谓的驱动能力,就是指输出电流的能力。对于驱动大负载(即负载内阻越小,负载越大)时,例如IO输出为5V,驱动的负载内阻为10欧姆,于是根据欧姆定律可以正常情况下负载上的电流为0.5A(推算出功率为2.5W)。显然一般的IO不可能有这么大的驱动能力,也就是没有办法输出这么大的电流。于是造成的结果就是输出电压会被拉下来,达不到标称的5V。当然如果只是数字信号的传递,下一级的输入阻抗理论上最好是高阻,也就是只需要传电压,基本没有电流,也就没有功率,于是就不需要很大的驱动能力。
4.2 外部中断
外部中断是指由单片机外部的信号触发,使单片机暂停当前正在执行的程序,转而去执行预先安排好的中断服务程序,执行完毕后再返回原来的程序继续执行。这种机制能够实时响应外部事件,提高系统的响应速度和效率,广泛应用于按键检测、传感器信号处理、通信接口等场景
中断触发方式:
上升沿触发 当 GPIO 引脚的电平从低电平跳变到高电平时,触发中断。例如,连接一个按钮到 GPIO 引脚,当按钮按下时,引脚电平从低变高,可引发上升沿触发的中断。
下降沿触发 与上升沿触发相反,当引脚电平从高电平跳变到低电平时触发中断。比如在一些传感器应用中,传感器输出信号的下降沿可用于触发中断,告知单片机有特定事件发生。
双边沿触发 引脚电平无论是从高到低还是从低到高的跳变,都能触发中断。这种方式适用于需要捕捉信号变化方向的场景。
低电平触发 当 GPIO 引脚检测到持续的低电平时触发中断。但需注意,若低电平持续时间过长,可能会导致中断一直被触发。
中断优先级 在实际应用中,可能会有多个外部中断源同时请求中断。为了合理处理这些中断请求,单片机通常会为不同的中断源设置不同的优先级。优先级高的中断请求会优先得到响应,这样可以确保重要的事件能够及时得到处理。例如,在一个既连接了紧急报警按钮又连接了普通按键的系统中,紧急报警按钮对应的中断优先级可设置得较高,以便在紧急情况下能迅速响应。
4.3 定时器
定时器中断是一种基于定时器的中断,它允许在特定时间间隔内触发一个事件或一段代码。在智能汽车竞赛中,定时器中断常用于周期性任务,例如定时、传感器数据采集、车辆控制以及编码器计算速度或者陀螺仪角度积分。
例如设置中断周期为5ms,那么就会每5ms执行一次中断里的程序。
4.4. PWM
PWM 即脉冲宽度调制(Pulse Width Modulation),它通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟波形。
工作原理:PWM 信号由一个固定频率的方波组成,通过改变方波的高电平持续时间(即脉冲宽度)与整个周期的比例(占空比),来控制输出信号的等效电压或等效功率。例如,一个周期为 100ms 的 PWM 信号,若高电平持续时间为 50ms,则占空比为 50%。
应用场景:
电机调速:通过改变 PWM 信号的占空比,可以改变电机电枢两端的平均电压,从而实现对电机转速的控制。占空比越大,电机电枢两端的平均电压越高,电机转速也就越快。
LED 亮度调节:利用 PWM 控制 LED 的导通时间,改变单位时间内 LED 的发光时间比例,从而实现亮度调节。占空比越高,LED 越亮。
4.5. ADC
ADC 即模拟数字转换器(Analog - to - Digital Converter),它的作用是将连续变化的模拟信号转换为离散的数字信号,以便单片机进行处理和分析。
应用场景:
- 传感器数据采集:在温度传感器、压力传感器等模拟传感器应用中,ADC 将传感器输出的模拟信号转换为数字信号,供单片机进行数据分析和处理。例如,智能车中的电感值读取,红外测距。
- 电池电量检测:通过检测电池的输出电压,利用 ADC 将其转换为数字信号,进而分析电池的剩余电量。例如,航模锂电池过放后对电池损伤很大,甚至直接报废。
4.6. 串口
串口即串行通信接口(Serial Communication Interface),它是一种常用的数据通信接口,用于在设备之间按位(bit)顺序传输数据。
工作原理:串口通信有两根数据线,一根用于发送数据(TX),另一根用于接收数据(RX)。数据在传输时,按顺序一位一位地在传输线上发送或接收。通信双方需要约定相同的波特率(即数据传输速率,单位为 bps,如 9600bps、115200bps 等)、数据位(通常为 5 - 8 位)、奇偶校验位(用于简单的错误检测,可选择无校验、奇校验、偶校验等)和停止位(用于标识数据帧的结束,通常为 1 位、1.5 位或 2 位)等参数,以确保数据的准确传输。
应用场景:
- 设备调试:在单片机开发过程中,常通过串口将调试信息发送到电脑端的调试工具(如串口助手),方便开发人员查看程序运行状态、变量值等信息,以进行程序调试。
- 数据传输:用于不同设备之间的数据交换,如传感器与主控板之间的数据传输。传感器采集到的数据通过串口发送给主控板进行进一步处理。
- 与上位机通信:单片机通过串口与电脑上位机设备进行通讯。
5. 通用控制算法
5.1. PID算法
PID 算法是工业应用中最广泛算法之一,是一种常用的反馈控制算法,它是根据系统当前状态与期望状态之间的差异来调整控制器输出的方式。在闭环系统的控制中,可自动对控制系统进行准确且迅速的校正。PID 算法已经有 100 多年历史,在四轴飞行器,平衡小车、汽车定速巡航、温度控制器等场景均有应用。PID 是 Proportional-Integral-Derivative 的缩写,分别代表比例、积分和微分三个部分。
比例(Proportional)部分根据当前误差的大小,直接按比例调整控制器输出。如果误差较大,则输出也较大。
积分(Integral)部分根据误差的累积值来调整控制器输出。它可以用来消除系统的静态误差,即当系统达到稳定状态时,误差不为零的情况。
微分(Derivative)部分根据误差的变化率来提前调整控制器输出。它可以用来预测系统的未来变化趋势,以提前调整控制器输出,避免过冲。
PID控制算法将比例、积分和微分三个部分的输出进行线性组合,得到最终的控制器输出。通过调整三个部分的权重和参数,可以实现对系统的精确控制。
Kp:比例增益(调试参数)
Ki:积分增益(调试参数)
Kd:微分增益(调试参数)
Error:误差(理想值-实际值
根据实际系统的特性和需求,调整PID控制算法中的比例、积分和微分三个部分的权重和参数,以使系统能够以最佳的性能响应和控制的过程,我们一般称之为“调参”。
在调参过程中:
Kp 过大会对误差的变化做出过大的反应,从而导致系统动作幅度过大,容易引起振荡甚至不稳定。过小意味着对误差的调整力度不足,系统达到目标值的速度变慢,响应滞后。
Kp 即使设置得较好,仅靠 Kp 控制仍会存在部分问题:
Kp 控制对持续存在的小误差没有累计作用,无法完全消除系统的稳态误差。这是因为比例控制的输出直接与当前误差成正比,而当误差较小时,调整力度可能不足。需要Ki(积分)控制来消除这种误差。
Kp 控制对快速变化的误差反应不足,而Kd(微分)控制可以预测误差变化趋势,帮助提高系统动态性能,避免过冲,减少超调。
5.2. 通过PID实现电机的闭环控制
给定占空比 → 测转速 → 比较实际转速和目标转速 → 重新调整占空比,这样的过程其实就是一个闭环控制,我们发现这个过程形成了一个回环:每次调整的占空比大小都是基于上一次结果得到的。相比开环控制,闭环控制多了信息反馈环节(测电机转速),我们根据反馈信息再做出进一步调整,接着获得调整后的反馈信息,再基于更新过的反馈信息进行新一轮的调控,实现快速精准的电机控速。
6. 双车跟随赛项分享
6.1 前车元素识别
前车是经典的摄像头循迹,识别的难点主要在于环岛与十字。在这里就给大家分享一下这两个元素的识别方法。由于元素识别需要用到一些专用名词。这里也给大家做了一些名词的解释。
6.1.1名词解释
边界:图像中蓝布与赛道的交接线,分为左侧的边界与右侧的边界
丢线:我们在处理图像的时候需要对每一行像素的边界进行搜索,如果当前行找不到边界说明当前行丢线
大量丢线:很多行都丢线,比如图像有60行,但是30行都丢线,那么就说明图像大量丢线
补线:有的时候需要让车模按照我们想要的路线跑,那么就在图像中画出一条线作为边界,可以引导车模的路线
中线:左边界与右边界的中点值
6.1.2环岛识别
环岛分为左环岛与右环岛。顾名思义,在赛道左侧的环岛就是左环岛,右侧同理。左右环岛的处理方法一样,这里就以右环岛为例,给大家分享环岛识别的方法。
发现环岛:
赛道左侧不丢线;图像右下部分有角点,且右侧大量丢线;
准备进入环岛:
此阶段右侧会有大量的丢线。如果采用普通的中线循迹,车模也可以循迹行驶,但是车模会左右抖动。所以我们采用左边界单边循迹的方式获取误差,计算方式为:
误差 = 目标左边界 – 当前左边界
进入环岛:
当图像的右上部分有角点就进入此阶段,此阶段不仅有进入环岛的路口,还有出环岛的路口。出环岛的路口时会干扰到正常循迹的,所以我们补线把这个路口给“封住“,引导车模进入环岛内。
环岛中:
这个阶段相当于一直在弯道中,只需要正常的循迹就好了
出环岛:
当环岛内发现了角点,说明要出环岛了。我们需要从这个角点向图像的右上角补线,引导车模右转出环岛。除了通过角点判断出环岛以外,还可以通过陀螺仪来出环岛,当车模旋转大概270°时,说明要出环岛了。后续操作相同。
结束环岛:
出环岛阶段右上角再次发现角点,并且角点到了图像的右下角,则结束整个环岛元素,
6.1.3十字识别
十字处理的难点在于弯道接十字,由于车刚过弯道后视野还未回正,此时很容易被引导到错误的路口,如右图所示。
我们的解决方案是列举出十字所能遇见的所有情况,每种情况对应不同的循迹方法。
十字的识别:如果左右两侧大量丢线,或者一侧大量丢线,另一侧有一个角点,再或者找到了下方的两个角点,则认为进入了十字。下面是每种情况的处理方式,且优先级递减
1:如果找到了下方的两个角点:
误差 = 中值 -(左下角点x轴值/2 + 右下角点x轴值/2)
2:如果找到了上方的两个角点:
误差 = 中值 -(左上角点x轴值/2 + 右上角点x轴值/2)
3:如果找到了左侧的上角点与下角点:
误差 = 目标左边界 -(左上角点x轴值/2 + 左上角点x轴值/2)
4:如果找到了右侧的上角点与下角点:
误差 = 目标右边界 -(右上角点x轴值/2 + 右上角点x轴值/2)
出十字:如果找到的角点小于两个,则判定为出十字。
6.2 后车跟随方案
经过我们的反复测试,横向放置的两个红外LED灯就可以完美解决后车的追踪问题,具体实现放在了下方的原理讲解部分。
6.2.1. 摄像头镜头的处理
前车的循迹与后车的追踪都是通过摄像头来实现的。前车是经典的摄像头循迹,用135度无畸变镜头就行。但是后车就有些不一样了,当前车进入弯道的时候,后车会突然失去前车的LED灯信息。所以我们需要换成广角镜头,实测下来两车就算到了最刁钻的角度,后车同样也可以看到前车的LED灯信息。
解决了角度问题,其实还有一个比较烦恼的问题,就是室内的灯光会严重干扰后车的循迹。而且赛题要求后方摄像头视角必须平视或者仰视 ,那灯光问题就更难避免了。所以我们的前车引导灯使用的是红外LED灯,一是为了区分室内灯光(室内光内没有红线),二是减少对眼睛的伤害。后车的摄像头要使用红外透过的镜头,可以保证红外线轻松透过镜头,再加上红外滤光片可以过滤掉室内的灯光,但是无法过滤太阳光,因为太阳光中也有红外线。下方为IPS屏幕上的实拍灯光,可以看到呈现的图像质量是很高的。
6.2.2. 跟随原理
后车想要跟随前车需要获取与前车的偏差和与前车的距离。我们经过摸索实践,最终采用的方案是 “横向双红外LED方案” 以下是偏差与距离的计算
偏差的计算
我们采用获取图像中所有白色像素点平均坐标的方法。具体来说,先计算出这些白色像素点的平均坐标值,然后将该平均坐标的 x 轴数值与图像中点的 x 轴坐标值进行差值运算,所得结果即为后车相对于前车的横向偏差。
距离的计算
对于后车与前车之间距离的计算,我们借助图像中所有白色像素点的方差来实现。实际情况中,车辆间距的变化会直接影响到前车 LED 灯光斑在图像中的呈现效果。当两车距离较远时,光斑在图像中显示较小,同时两个光斑之间的间距也更近,这种情况下图像中白色像素点的分布更为集中,进而导致方差较小;反之同理。通过对白色像素点方差的计算与分析,我们能够有效获取两车之间的距离信息。
为什么双灯要横向呢?
首先我们要了解车距对后车的影响,当车距较远的时候,PID是很容易调稳的,但在弯道处,后车会提前转弯,所以会造成后车内轮出界。车距较近的时候PID调节难度会相对高一点,但是在弯道处后车车轮不会出界。所以LED灯我们采用横向,这样双车可以在平时维持一个较远的距离,让后车的跟踪更为稳定。弯道的时候由于视角原因,两个光斑会就靠近,后车就会认为与前车距离变远,从而会提前加速靠近前车防止车轮出界。
7. 备赛建议与资源推荐
- 学习路径:C语言 → 单片机基础 → 传感器实验 → 算法移植。
- 团队分工:硬件(电路设计)、软件(算法调试)、机械(车模改装)。
- 学习资源:CSDN、往届技术报告、Gitee、GitHub、B 站学习视频。
- 基础解疑:官方Q群客服、官方淘宝客服。