摘要:在本项目中,我们成功利用树莓派的能力,结合速度编码器和数模转换器(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
如果觉得文章不错记得点赞,收藏,关注,转发~
来源:上海晶珩