pyAi-K210+OpenMV4连体学习-05、寻迹小车的实现

目录

前言

预备知识

1、什么是RPM

2、简单了解PID算法

①、PID控制小车控制系统的应用

②、什么是PID算法

3、简单了解腐蚀膨胀算法:

寻迹部分:

K210代码部分讲解:

K210完整代码:

OpenMV4代码部分讲解:

 OpenMV4完整代码


前言

本人所用为01 studio的pyAi-K210和pyAI-OpenMV4,本人在学习完K210后,学习openMV时发现很多实验K210和openMV可以一起学习,所以写下此篇分享,本人基本都是个人笔记,非常希望有大佬提出错误和改进之处,但大佬轻喷哈!!!

预备知识

1、什么是RPM

RPM是转速(Revolutions Per Minute)的缩写,表示每分钟转动次数。它是测量旋转设备如马达、轴、齿轮等旋转频率的单位。

比如一个转速为3600 RPM的马达,意味着它的轴每分钟转动3600圈,每秒转动60圈(3600/60)。RPM常用于指定和控制马达、风扇、轴、齿轮等旋转设备的转动速度。例如:
- 电动工具(如电钻)的转速
- 风扇的转速,控制其风量
- 机器人减速器的传动比计算
- 3D打印机轴的转速计算两者间的RPM转换公式为:

1. RPM 转  rad/s: RPM * π / 30 
2. rad/s 转 RPM: rad/s * 30 / π其中π≈3.14。

所以举个例子:
- 一个转速3600RPM的马达轴,其对应的弧度每秒为:3600 * 3.14 / 30 = 188.4 rad/s
- 一个转速300rad/s的轴,其RPM为:300 * 30 / 3.14 = 2850RPM

所以RPM是一个很重要的工业单位,理解转速单位对于机械、机电控制很有帮助。 

2、简单了解PID算法

①、PID控制小车控制系统的应用

PID控制器在小车中的应用非常广泛,主要用于控制车辆的速度、方向等。

例如:
1. 速度控制
我们可以使用PID控制器来控制小车的速度。设置一个目标速度,然后通过获取小车的编码器读数计算实际速度,并作为PID控制器的反馈。PID控制器输出一个PWM信号来控制电机速度,从而达到速度控制的目的。

2. 航向控制
我们可以使用PID控制器控制小车的航向。设置一个目标航向角,通过电子罗盘获取小车的实际航向角作为反馈。PID控制器输出PWM信号控制左右电机转速不同,产生差速转向,来控制小车航向,达到航向控制。

3. 跟踪控制
我们可以采用PID控制器实现小车的路径跟踪。设置一个预定路径,通过获取小车实时位姿,计算路径误差作为反馈。PID控制器输出控制信号,控制小车轮速和转向,使小车能及时修正路径,追踪预定轨迹。

4. 姿态控制
对于有倾角传感器(陀螺仪)的小车,我们可以使用PID控制器实现小车的姿态控制。设置一个目标倾角,从陀螺仪获取实际倾角作为反馈,PID控制器输出一个控制信号驱动伺服电机,调整小车的倾角,达到姿态控制的目的。等等。

总之,PID控制器通过获取反馈信号,计算出控制量来驱动执行机构(电机、舵机等),从而实现对小车各项状态量(速度、航向、倾角等)的控制,这在小车控制系统中有很广泛的应用。

②、什么是PID算法

PID算法是一种较古老而简单实用的控制回路反馈机制。PID的英文全称为比例-积分-微分(Proportional-Integral-Derivative)。

PID控制器会根据误差的比例、积分和微分三个因素产生控制量,从而影响控制对象,使其输出能够达到预期的参考输入。

PID算法用数学公式表示为:

u(t) = Kp*e(t) + Ki*∫e(t)dt + Kd*de(t)/dt 

其中:
- u(t) - 控制量(输出)
- e(t) - 误差,设置值与反馈值之间的差值
- Kp - 比例增益,对误差的影响
- Ki - 积分增益,对误差积分的影响
- Kd - 微分增益,对误差的变化率的影响 
- ∫e(t)dt - 误差的积分
- de(t)/dt - 误差的微分,即误差的变化率

PID控制器的目的是控制控制对象(被控系统),使其输出y(t)尽可能跟踪输入的参考值r(t)。其原理是:
- 比例项Kp根据误差e(t)的大小调节控制量u(t),使e(t)趋 toward 0。但仅依赖这一项,无法完全消除稳态误差。
- 积分项Ki根据误差e(t)的积分∫e(t)dt来消除稳态误差,但是该项会引入超调量,甚至引起系统失稳。 
- 微分项Kd根据误差e(t)的变化率de(t)/dt来补偿比例项和积分项的不足,加快系统的相应速度和稳定性。

通过三项的结合,可以获得一定的控制效果。PID控制简单易用,应用非常广泛,用于工业控制、运动控制和各种自动化系统中。

3、简单了解腐蚀膨胀算法:

膨胀腐蚀算法(Dilation-Compression Algorithm)是一种基于形态学操作的图像处理算法,用于压缩二值图像中的连通区域。

该算法的基本思想是将连通区域先进行膨胀操作,然后再进行腐蚀操作。通过这样的迭代过程,可以将连通区域中的像素逐渐膨胀,然后再收缩回原来的形状,从而实现连通区域的压缩。

具体的算法步骤如下:

  1. 对输入的二值图像进行膨胀操作,将连通区域进行扩张。
  2. 对膨胀后的图像进行腐蚀操作,将连通区域进行收缩。
  3. 迭代以上两个步骤,直到连通区域不再发生变化为止。

膨胀腐蚀算法常用于图像处理和形态学图像分析中,可以对图像进行去噪、连接分割、轮廓提取等操作。它适用于处理具有连通性的图像区域,能够有效压缩图像数据并保持区域的形状特征。

需要注意的是,膨胀腐蚀算法的效果取决于膨胀和腐蚀操作的次数和结构元素的选择。根据具体应用场景,可能需要调整算法的参数和操作步骤,以达到期望的图像处理效果。

需要注意的是:在OpenMV4中有集成好的算法,

--`image.close(size[, threshold[, mask=None]])`:处理图形内部的噪点(先膨胀后腐蚀)
-- `image.open(size[, threshold[, mask=None]])`:处理图形外部(背景)的噪点(先腐蚀后膨胀)

寻迹部分:

使用OpenMV4进行巡线通过光敏传感器进行自适应调整阈值,将偏转角度传给K210控制编码电机,占空比进行调整姿态。

K210代码部分讲解:

# todo 在K210中需要自己先定义IO:

#导入模块
from fpioa_manager import fm
from Maix import GPIO
import utime,time,lcd
from machine import Timer,PWM,UART

#初始化屏幕
lcd.init()
lcd.clear(lcd.WHITE)

#定义电机IO
fm.register(9, fm.fpioa.GPIO0)
fm.register(26, fm.fpioa.GPIO1)
fm.register(27, fm.fpioa.GPIO2)
fm.register(8, fm.fpioa.GPIO3)
GPIO(GPIO.GPIO0,GPIO.OUT,value=0)
GPIO(GPIO.GPIO1,GPIO.OUT,value=1)
GPIO(GPIO.GPIO2,GPIO.OUT,value=1)
GPIO(GPIO.GPIO3,GPIO.OUT,value=0)

#定义电机A/B编码读取IO
fm.register(18, fm.fpioa.GPIOHS0)
fm.register(19, fm.fpioa.GPIOHS1)
fm.register(10, fm.fpioa.GPIOHS2)
fm.register(11, fm.fpioa.GPIOHS3)
INR_A =GPIO(GPIO.GPIOHS0,GPIO.IN)
INR_B =GPIO(GPIO.GPIOHS
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广寒学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值