不仅能跑,还能自己刹车,用树莓派打造自主驾驶的 RC 车!

360影视 动漫周边 2025-05-29 17:58 4

摘要:在本项目中,我们成功利用树莓派的能力,结合速度编码器和数模转换器(DAC)进行运动控制,分别通过内核空间的gpiod驱动和Adafruit的I2C函数进行接口连接,从而创建了一辆能够保持车道的遥控车。我们使用网络摄像头和OpenCV方法实现了车辆的车道保持能力

团队致力于编程一辆自主遥控车/玩具车,使其能够沿车道行驶并在红色停车标志处停下。

本项目所用物品

硬件组件

罗技® HD Pro 网络摄像头 x 1

树莓派4B x 1

光学速度编码器 x 1

便携式充电器 x 1

软件应用与在线服务

OpenCV——开源计算机视觉库

手工工具与制造设备

无绳电钻/驱动器

锉刀

通用电烙铁

项目背景

在本项目中,我们成功利用树莓派的能力,结合速度编码器和数模转换器(DAC)进行运动控制,分别通过内核空间的gpiod驱动和Adafruit的I2C函数进行接口连接,从而创建了一辆能够保持车道的遥控车。我们使用网络摄像头和OpenCV方法实现了车辆的车道保持能力,使车辆能够通过PD控制熟练地检测并自主跟随车道标记。车辆保持在车道范围内,在第一次看到红色(即第一个停车标志)时停下,3秒后再次启动,并在遇到第二个停车标志(第二次看到红色)时永久停止。

本项目参考了用户raja_961在AutoDesk Instructables上的项目:

“使用树莓派和OpenCV的自主车道保持车”。Instructables。

网址:https://www.instructables.com/Autonomous-Lane-Keeping-Car-Using-Raspberry-Pi-and/

此外,我们还参考了此Hackster项目以指导我们的停车标志检测逻辑。

https://www.hackster.io/beagle-bone-baja-blast/beagle-bone-baja-blast-eae48e

为了优化车道保持遥控车的性能,我们在摄像头的分辨率上做出了战略性决策。尽管原生分辨率为1280x720,但我们明智地将其降为176x144。这一调整在计算机视觉功能所需的细节与我们的树莓派4的处理能力之间取得了平衡。选择更高的分辨率会损害帧生成率,而帧生成率是实时响应性的关键因素。

我们通过实时数据分析过程精心指导了预定义比例增益(kp)和微分增益(kd)值的调优,该过程涉及比较程序期望的转向角度与实际转向角度,并将其与车辆PD控制前后的转向值进行比较。由此,我们确定了给定的kp和kd值变化将在车辆的实际转向中产生多大影响。在尝试了各种比例增益值后,我们确定了kp = 0.08的最佳初始增益,以确保车辆对车道偏离做出准确响应。微分增益旨在抵消比例分量引起的振荡,被设置为kd = 0.3 * kp。在反馈回路中同时使用这两个分量,我们的代码根据计算出的偏差动态调整转向量。偏差计算为期望转向角度与预定义角度(本例中为90度)之间的差值。

停车标志逻辑涉及停车标志检测、第一个和第二个停车标志的处理以及计时。摄像头每隔几帧就会定期扫描红色地面(模拟停车标志)。一旦检测到第一个停车标志(通过摄像头有限区域内存在一系列RGB值来表示),车辆将暂停计算出的3秒钟。在此间隔后,车辆将平稳恢复速度。为了防止在第一个停车标志后立即检查第二个停车标志,我们引入了故意延迟。这确保了第二个停车标志仅在定义的宽限期后才被考虑。一旦开始,检测到第二个停车标志将促使车辆永久停止。这一复杂的逻辑增强了车辆对交通信号的响应性和遵守性。

以下图表显示了车辆在赛道上单次运行过程中误差、转向电压和速度电压随时间(帧数)的变化:

聚焦于速度电压值:

(图表显示,基于编码器定时,速度电压有非常微小的波动变化,这与我们的预期一致)

以下图表显示了车辆在赛道上单次运行过程中误差、比例响应和微分响应随时间(帧数)的变化:

聚焦于比例增益值:

代码

https://www.hackster.io/code_files/649131/download

如果觉得文章不错记得点赞,收藏,关注,转发~


来源:上海晶珩

相关推荐