pid巡线

简介: “【5月更文挑战第25天】”

这段代码是一个使用PID控制算法的简单示例,它用于控制两个马达(M1和M2)以实现机器人的巡线功能。PID代表比例(Proportional)、积分(Integral)、微分(Derivative),这是一种广泛应用于控制系统的反馈控制算法。下面是对代码的详细解释:

  1. 导入模块

    import rcu
    

    这行代码导入了rcu模块,这个模块可能是用来与硬件通信的库,例如控制电机和读取传感器数据。

  2. 定义全局变量
    这些变量用于存储速度、偏差值、PID控制器的参数(比例系数Kp、积分系数Ki、微分系数Kd)、光电传感器的读数、积分和微分项以及转弯速度。

    VAR_Speed = 0
    VAR_offset = 0
    VAR_Kp = 0
    VAR_Ki = 0
    VAR_Kd = 0
    VAR_light = 0
    VAR_I = 0
    VAR_E = 0
    VAR_D = 0
    VAR_turn = 0
    VAR_LE = 0
    
  3. 定义任务函数 task1
    这个函数包含了PID控制算法的实现。

  4. 设置PID参数
    while循环之外,设置了速度、光电传感器的目标值、比例系数、积分系数和微分系数。

    VAR_Speed = 30 # 设定速度
    VAR_offset = 2000 # 光电传感器目标值
    VAR_Kp = 0.007 # 设定比例系数
    VAR_Ki = 0.002 # 设定积分系数
    VAR_Kd = 0.002 # 设定微分系数
    
  5. PID控制循环
    while True: 循环是一个无限循环,它不断执行PID控制逻辑。

  6. 读取传感器数据

    VAR_light = rcu.GetLightSensor(1) # 光电传感器数值
    

    这行代码从光电传感器读取当前的数值。

  7. 计算偏差

    VAR_E = (VAR_light - VAR_offset) # 计算偏差值
    

    偏差值(Error)是传感器读数与目标值之间的差。

  8. 积分项

    VAR_I = (VAR_I + VAR_E) # 积分:累计偏差值
    

    积分项(Integral)是偏差值随时间的累加,用于消除稳态误差。

  9. 微分项

    VAR_D = (VAR_E - VAR_LE) # 微分:计算偏差值变化率
    

    微分项(Derivative)是偏差值变化率,用于预测偏差的未来趋势并提供超前控制。

  10. 计算PID输出

    VAR_turn = (((VAR_Kp * VAR_E) + (VAR_Ki * VAR_I)) + (VAR_Kd * VAR_D)) # 计算转弯速度
    

    PID输出是通过比例、积分和微分项的加权和计算得出的,用于控制机器人的转向。

  11. 设置马达速度

    rcu.SetMotor(1,(30 + VAR_turn)) # M1马达最终速度
    rcu.SetMotor(2,(30 - VAR_turn)) # M2马达最终速度
    

    根据PID输出设置两个马达的速度,使机器人向目标线靠近或远离,实现巡线功能。

  12. 更新偏差值

    VAR_LE = VAR_E # 将此时的偏差值记录为上一次偏差值
    

    更新偏差值,为下一次循环的微分项计算做准备。

这个PID控制算法的目的是使机器人能够沿着预定的线路行驶。通过调整光电传感器的目标值(VAR_offset),可以控制机器人在线路的哪一侧行驶。PID参数(Kp、Ki、Kd)需要根据实际情况进行调整,以达到最佳的控制效果。

import rcu

VAR_Speed = 0
VAR_offset = 0
VAR_Kp = 0
VAR_Ki = 0
VAR_Kd = 0
VAR_light = 0
VAR_I = 0
VAR_E = 0
VAR_D = 0
VAR_turn = 0
VAR_LE = 0

def task1():
  global VAR_Speed,VAR_offset,VAR_Kp,VAR_Ki,VAR_Kd,VAR_light,VAR_I,VAR_E,VAR_D,VAR_turn,VAR_LE
  VAR_Speed = 30 #设定速度
  VAR_offset = 2000 #光电传感器目标值
  VAR_Kp = 0.007 #设定比例系数
  VAR_Ki = 0.002 #设定积分系数
  VAR_Kd = 0.002 #设定微分系数
  while True:
    VAR_light = rcu.GetLightSensor(1) #光电传感器数值
    VAR_E = (VAR_light - VAR_offset) #计算偏差值
    VAR_I = (VAR_I + VAR_E) #积分:累计偏差值
    VAR_D = (VAR_E - VAR_LE) #微分:计算偏差值变化率
    VAR_turn = (((VAR_Kp * VAR_E) + (VAR_Ki * VAR_I)) + (VAR_Kd * VAR_D)) #计算转弯速度
    rcu.SetMotor(1,(30 + VAR_turn)) #M1马达最终速度
    rcu.SetMotor(2,(30 - VAR_turn)) #M2马达最终速度
    VAR_LE = VAR_E #将此时的偏差值记录为上一次偏差值

task1()
目录
相关文章
|
8月前
|
算法
初探PID—速度闭环控制
本文简单介绍了什么是PID,PID的作用,给出了PID实现程序。
95 0
|
1月前
|
算法 Python
PID
PID算法是一种广泛应用于工业控制和自动控制领域的算法,它的全称是比例-积分-微分(Proportional-Integral-Derivative)算法。PID算法通过计算系统的偏差值(设定值与测量值之差)的比例、积分和微分值,然后对这三者进行加权求和,得到控制器的输出,从而实现对系统的控制。
39 3
|
1月前
驱动保护 -- 通过PID保护指定进程
驱动保护 -- 通过PID保护指定进程
36 0
驱动保护 -- 通过PID保护指定进程
|
11月前
|
Linux Android开发
查看/proc/[pid]/ 查看进程状态
查看/proc/[pid]/ 查看进程状态
88 0
|
12月前
|
监控 Shell Linux
Linux下获取进程的PID
Linux下获取进程的PID
703 0
|
Linux Shell Perl
Linux下如何根据进程 名称/pid 结束对应进程(含 xargs kill -9报错问题)
Linux下如何根据进程 名称/pid 结束对应进程(含 xargs kill -9报错问题)
402 0
Linux下如何根据进程 名称/pid 结束对应进程(含 xargs kill -9报错问题)
|
容器
pid cgroup
pid cgroup 简介
154 0
如何查看pid?
一 说明 pid是一串2088开头的16位数字,一个支付宝账号对应一个PID,PID和USERID(也称UID)数值是一样的   二 如何查看 1 用户信息授权场景 用户信息授权文档:【[url]https://docs.
2480 0