pid摄像头循迹(opencv和openmv)

用摄像头进行循迹的方法参考

去年用openmv做了一个循迹小车,效果还不错,实验室里做了汇报,这里也同步分享一下制作的一些细节。
小车灰常简陋,当时硬件水平有限,轻喷>_<
在这里插入图片描述
csdn视频放不出来,只能放已经投稿的视频,这里就不展示了叭。
运行效果其实和openmv官方教程给的视频里小车效果类似,大家可以作为参考。

硬件选型方面

  1. 稳压模块x2
  2. 9v锂电池x1
  3. openmv
  4. 减速电机(6v 280rpm)
  5. 万向轮
  6. L298N直流电机驱动模块
    (插一下,这里的稳压可以稳压到7V和3.3V,L298N本身可以将电压稳压到5V)

软件思路

在这里插入图片描述
如上图所示,分为图像预处理、线性拟合以及PID控制转速。

一.图像预处理:

1.按阈值取二值化 (可以加入中值滤波或高斯滤波)
2.腐蚀操作 (去除噪点)
3.膨胀操作(可有可无)
因为openmv的算力有限,若是同时加上了膨胀和腐蚀操作,运行循迹程序时帧率会变得很低(可能低于15fps)。

代码部分

图像预处理在openmv和opencv中均有现成的库函数,直接调用即可。
1.openmv

img.dilate(2) #膨胀
img.erode(2)# 腐蚀
img = sensor.snapshot().binary([THRESHOLD]) # 按阈值二值化

2.opencv

mask=cv2.inRange(img,black_min,black_max) #二值化
kernel=np.ones((3,3),np.uint8) #半径大小
erode=cv2.morphologyEx(mask,cv2.MORPH_ERODE,kernel)# 腐蚀

腐蚀膨胀 示意图如下所示:
在这里插入图片描述

二.线性拟合

这里的线性拟合采用的是最小二乘法进行拟合,遍历所有像素点,复杂度为O(n²)
openmv有现成的库函数:

line = img.get_regression([(100,100,0,0,0,0)], robust = True)

官网给的解释是快速鲁棒线性回归
可以直接返回得到拟合的直线对象

参考文档:https://docs.singtown.com/micropython/zh/latest/openmvcam/library/omv.image.html?highlight=get_regression#image.get_regression

官方文档介绍:
在这里插入图片描述

opencv线性拟合:

由于我没有找到相关的线性拟合函数,于是自己写了一个函数:
传入参数img为二值化图像,result为原图。

# 线性拟合
def liner(img,result):
    # print(img)
    n=[len(img[:
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值