设计一种能够利用计算机视觉和控制技术在预设轨道上自主行驶的车辆
扫描二维码
随时随地手机看文章
系统采用基于OpenCV的图像处理技术,实时检测车道线并估算车辆轨迹。根据这些信息,计算出转向角度,使车辆保持在车道中央行驶,并通过PID控制器确保转向行为平稳稳定。
电子元件安装在机器人框架的顶部。此外,我们还设计了一个3D打印的摄像头支架,以便更轻松、更可靠地调整角度。至于电机编码器,我们将其安装在车体后部,使车辆能够自主行驶,在直线和弯道中均能保持稳定可靠的性能。
硬件设置
电子元件安装在机器人框架的顶部。此外,我们还设计了一个3D打印的摄像头支架,以便更轻松、更牢固地调整角度。至于电机编码器,我们将其安装在车体后部。
软件设置
系统运行在搭载Raspbian Bookworm的Raspberry PI 4B上。在内核之上,我们实现了一个编码器模块,用于计数脉冲并计算转速(RPM)。程序其余部分运行在应用层,主要使用Python编程语言,并依赖一些库,包括OpenCV、Matplotlib和YOLOv5。
车道检测
车辆沿着用蓝色胶带标记的车道行驶,该标记通过集成在OpenCV中的基于视觉的处理流程进行检测。首先,每一帧图像都被转换为HSV颜色空间,以实现对不同光照条件下的鲁棒性颜色分割。随后应用遮罩,将对应车道标记的蓝色区域分离出来,并定义感兴趣区域(ROI),以便聚焦于图像下方、车道位置预期所在的部分。
从遮挡图像中提取检测到的像素坐标,并利用这些坐标估计车道几何形状。当左右车道边界均可见时,对两侧分别拟合二阶多项式,然后通过两曲线的平均值计算出中心轨迹。
最后,这条中心线用于计算一个转向角度,控制系统随后利用该角度来调整车辆的方向。
转向与速度PID控制
车辆的转向由一个PID控制器控制,该控制器以期望方向(正前方)与视觉系统估计的角度之间的差值作为输入。该误差用于计算校正量,并将其映射为驱动转向伺服电机的PWM信号。
为了实现速度控制,光学编码器可实时测量电机的转速。这种反馈使得闭环PID控制器能够通过调节电机的PWM信号来控制车辆速度,即使在负载或路况发生变化时,也能保持恒定的速度。
PID参数通过反复实验进行调整。我们首先通过手动移动机器人在轨道上进行测试,以优化转向控制器,随后再调整速度控制器。在两种情况下,均通过分析测量值与目标值的对比图以及随时间变化的误差来评估性能,从而不断优化增益,以实现稳定且响应灵敏的行为。对于每个控制器的Kp、Ki和Kd,我们先通过调整Kp实现快速响应,然后调整Kd以修正误差,当曲线显示过度振荡时,则调整Ki。
停止标志检测
除了车道跟踪外,系统还能检测轨道沿线的红色标记,这些标记用作停车信号。这些标记由地面上的红色纸方块组成,并通过HSV颜色空间中的颜色分割进行识别。检测到的红色像素总面积被用作一个简单的指标,以判断是否有标记存在。
当检测到的红色信号超过预设阈值时,车辆将启动停止动作。第一个检测到的标记会使车辆暂时停下,然后恢复行驶。当检测到第二个标记时,车辆会完全停止,结束运行。采用标志位方法可确保每个标记仅被计数一次,防止同一信号被多次检测。
车道保持与停车检测
机器人能够沿车道行驶,且不会超出车道超过6英寸。此外,机器人在第一个红色方框处停下,继续移动直到检测到第二个红色方框后,程序即结束。同时,我们从第一人称和第三人称视角分别记录了机器人的运动过程。
物体识别
除了车道跟踪外,我们还在树莓派上使用内置摄像头,通过YOLOv5实现了目标检测。为此,我们使用了Ultralytics官方仓库,并根据我们的设备进行了适配。输入图像被调整为320×320像素,以在检测性能和计算成本之间取得平衡。
为了评估系统的性能,我们首先对单个测试图像进行推理,测量了预处理、模型推理和非最大值抑制(NMS)所花费的时间。结果表明,吞吐量约为 3.8 FPS。虽然该数值可作为参考,但在实时流媒体中实际性能可能会因额外的延迟、摄像头瓶颈以及内存开销而有所差异。
本文编译自hackster.io





