树莓派 opencv循迹 c语言,树莓派图像识别处理与循迹小车经验分享

简单 且枯燥

软件准备

Opencv库

Opencv是一个开源计算机视觉库,无论是大神还是小白都爱它,Opencv被广泛的应用在人脸识别、边缘检测、自动驾驶等领域。

安装和使用OPencv的方法网络上非常多,就我本人的个人体验来说,这里推荐“同济子豪兄”的Opencv安装教程。[3]

安装这个库的目的是更方便的使用树莓派摄像头,其具有强大的内置函数和活跃的开源社区,在学习过程中出现问题也能够很容易找到帮助你的人。

RPI.GPIO库

GPIO(Gwneral Purpose I/O Ports)即为通用输入/输出口,在树莓派上就是指那40个引脚,它们的用法和其他单片机的用法类似,都是通过控制输出高低电平或者读入高低电平来进行控制外接元器件的。

有这个库,可以保证你能够通过树莓派自带的引脚控制电机。

serial库

serial库用于和Arduino或者其他单片机进行通信。

理论上我们可以用树莓派的GPIO口直接控制,但是为了防止手不老实的同学的作死举动,比如乱往树莓派上电导致树莓派GG,建议通过Arduino控制电机,Arduino通过USB线缆或者蓝牙与树莓派进行交流,毕竟,一块树莓派几百块,一块Arduino只要十几块。

逻辑分析

这里放一张我们很早之前参加的学院里举办的循迹小车比赛的图,当时用的是光电对管,现在用摄像头,其实核心思想并没有什么不同,都是得到当前前进方向与目标前进方向的偏差,进而进行控制。

就这样的一个赛道而言,赛道是黑色的,我们可以把其他部分看作是白色的(当然摄像头回传的画面必定不会是严格的只有黑白色面),事实上,我们不需要分析摄像头传回来的完整的画面,举个例子:

假如摄像头回传的画面类似于上图,我们只需要将上图

先二值化(非黑即白),再

选取合适的某一行的某些像素点(甚至全部像素点)进行分析,左边右边都是白色,只有中间是黑色,所以只要找到黑色部分的中点,让小车朝着中点方向前进即可。

即偏差决定了左右轮的速度之差,检测到当前向左偏就让左轮速度加快,向右偏就让右轮速度加快。

这过程中会有很多问题,因为这种策略是一种偷懒的方法,也因此,效果并没有想象中好,比较需要关注的问题有摄像头得到的图像如何腐蚀膨胀、转弯时速度和控制策略如何调整等等[4],这里感谢CSDN大佬@yzy_1996,我参考了很多他的思路和程序,这里就不拿自己的程序在这里班门弄斧了。

最后,感谢达尔闻通过了我的树莓派板卡申请,树莓派——>python——>视觉循迹小车,非常感谢达尔闻带给我的支持与帮助。

【参考文献】

[1]牛顿色散实验百度百科

https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%89%B2%E6%95%A3%E5%AE%9E%E9%AA%8C/2991009?fr=aladdin

[2]图像识别与处理--图像的表示与通道数问题

https://blog.csdn.net/mao_hui_fei/article/details/78217049

[3]子豪兄教你在树莓派上安装OpenCV

https://github.com/TommyZihao/Zihao-Blog/blob/master/%E5%AD%90%E8%B1%AA%E5%85%84%E6%95%99%E4%BD%A0%E5%9C%A8%E6%A0%91%E8%8E%93%E6%B4%BE%E4%B8%8A%E5%AE%89%E8%A3%85OpenCV.md

[4]【方法】树莓派小车自动循迹(摄像头) https://blog.csdn.net/yzy_1996/article/details/85318179?utm_source=app

你可能感兴趣的:(树莓派,opencv循迹,c语言)