设计一款由自主运行的树莓派 5 电脑驱动的汽车,它利用计算机视觉和硬件驱动程序实现实时车道保持和图像识别功能
扫描二维码
随时随地手机看文章
这是一款为 ELEC 553 课程的期末项目而开发的自主车道保持遥控汽车。它采用了车道保持流程,能够在蓝色车道间行驶,并在红色标记处停车,还具备使用 Ultralytics YOLO 进行物体识别的功能,以检测周围物体。
我们通过测试程序的性能,确定了最终使用的分辨率为 160x120,这一分辨率能确保汽车能够正确识别车道,并且在可接受的误差范围内正常运行。在转向方面,汽车关注的区域设定为车道底部的 15%,这样它就能专注于最近的轨迹。除此之外,通过测试找到了 0.06 的比例增益值,这是汽车在正确响应车道转弯时的最低点,以确保汽车以与车道转弯相同的坡度转弯。最后,对于导数增益,我们选择了 0 的值,因为在我们的测试中,导数值有时会导致汽车错误转弯,而将导数值设为 0 则能让汽车平稳转弯。
我们通过使用基于 HSV 颜色阈值的检测方法来实现纸张停止检测,该方法仅针对摄像头画面底部 30% 的区域进行限制。这样可以确保汽车仅在纸张正前方时触发停止信号,而不会对赛道上更远处的红色物体做出反应。一旦检测到第一张停止纸,汽车就会通过将 ESC PWM 脉冲宽度调制周期设置为零来停止,然后暂停三秒钟,接着通过恢复到其正常驾驶模式周期来继续保持车道行驶。为了处理赛道上的两个停止标志,我们使用了一个标志来跟踪汽车已经到达的停止位置,从而在第一次检测时产生临时暂停,在第二次检测时产生永久停止。
对于物体识别,我们使用了来自 Ultralytics 的预训练的 YOLOv5 模型,并加载了从其 GitHub 发布中下载的权重。我们编写了一个程序,该程序以 320×320 的分辨率对每个网络摄像头帧进行推理,并在检测置信度高于 0.25 的情况下覆盖边界框和标签。为了衡量性能影响,我们跟踪了每帧的总时间以及每次推理的时间,然后报告了一个 30 帧的滚动平均帧率。在 Pi 5 CPU 上,该程序大约运行 3 帧/秒,30 秒后平均为 2.65 帧/秒,这是当前设置的主要限制。一个更轻量级的物体检测模型可以提高帧率,但可能会降低检测精度。
以下是速度、转向以及误差与帧数的关系图,还有我们的 PD 值以及误差与帧数的关系图。
下面是我们的最终车辆的照片,照片中展示了车上的硬件设备。
代码
本文编译自hackster.io





