当前位置: 首页 > article >正文

平衡车PID算法 学习日记

我的学习日记是基于平衡车pid算法上,在其他方向可能会有欠缺。

开环与闭环

开环控制系统(Open-loop Control System)是指被控对象的输出(被控制量)对控制器(controller)的输出没有影响,在这种控制系统中,不依赖将被控制量返送回来以形成任何闭环回路。

闭环控制系统(Closed-loop Control System)的特点是系统被控对象的输出(被控制量)会返送回来影响控制器的输出,形成一个或多个闭环。

闭环控制的优点就是可以根据目前与期望的差距,更精确的调整数据的输入,更好达到你的期望数值,达到想要的结果。

PID总述

        PID算法是闭环控制系统中常用的算法,PID分别是 Proportion(比例)、Integral(积分)、Differential(微分)的首字母缩写。它是一种结合比例、积分和微分三个环节于一体的闭环控制算法。在闭环控制系统中,引入了反馈回路,利用输出(实际值)和输入(目标值)的偏差,对系统进行控制,避免偏离预定目标。闭环控制系统又称反馈控制系统

流程图

PID模拟程序

下面是一个最简单的pid程序,用于理解算法的原理

int PID_value(float measure, float calcu)
{
    err = measure - calcu;  // 计算误差
    err_sum += err;        // 误差积分
    I_xianfu(2000);        // 积分项的限幅,防止积分饱和
    err_difference = err - last_err; // 计算误差的微分
    last_err = err;       // 更新上一次的误差

    return Kp*err + Ki*err_sum+Kd*err_difference;     // 返回PID控制信号
    /*
        p值乘以误差 用于矫正系统达到期望值
        i值乘以误差总积分,用于平衡稳态误差
        d值乘以变化的数值,用于减小单次,所改变的数据防止出现大幅度震荡的情况
    */
}

PID在线模拟程序(镜像)这是文章所用到的模拟程序

Kp 比例环节( Proportion)

我们需要根据所需要的数量级,合理调节p的值,也可以通过实际测试,来预估判断,不能过大,也不能过小

 计算公式 Kp*err

kp值为0,无法对系统进行矫正。

通过p值的调节,可以使误差减小,但是还是会存在一些差距,我们称他为稳态误差,这时就需要进行ki的调节

稳态误差(个人鄙见):Kp乘以误差相当与力的输出量,方向是向上的,有重力等其他的力会对系统进行干扰,这个状态是相对静止的

 Ki  积分环节(Integral)

通过调节ki的值,误差不断减小

计算公式 Ki*err_sum

调节ki的输出总量这个状态是运动的,由上面状态转化为下面状态时一个移动的过程,需要时间,你们可以在调试时,更直观的感受

积分限幅的作用

当我对原来只有kp的数据调节加上ki的时候 无人机会迅速向上冲一段距离,这是由于err 的总和在不断累加,根据时间的延长他的总和会逐渐扩大,甚至成为一个难以想象的数值,这是积分限幅的作用,防止长时间的开机后,出现一些难以预测的错误。

ps  冲上去后,也会逐渐下降到我们的目标高度,只是时间问题,因为err是有正有负的,正的累加负的输入也可以中和,逐渐变为一个相反的值,i积分的输出量中和回去

Kd 微分环节(Differential)

计算公式 Kd*err_difference 

Kd微分环节,有利于减小高频振荡,在起步或是改变期望值时,会出现过调,在目标高度线周围震荡的效果

difference 是调整的幅度,幅度大就会阻尼,减小震荡的幅度,进行精确控制

在目标高度附近来回震荡,减小步进的幅度

小结

并不是所有控制都需要用到pid三个环节,而是其中的两个,或三个,这些要根据控制量的不同,综合选择。


http://www.kler.cn/a/458987.html

相关文章:

  • HAL 库------中断相关函数
  • 【论文阅读笔记】IceNet算法与代码 | 低照度图像增强 | IEEE | 2021.12.25
  • windows下vscode使用msvc编译器出现中文乱码
  • TCP粘/拆包----自定义消息协议
  • 头歌实训2-1:面向对象程序设计-基础部分
  • 一文理清JS中获取盒子宽高各方法的差异
  • 如何删除Mac上的系统数据
  • 【论文阅读】DebSDF:深入研究神经室内场景重建的细节和偏差
  • Flink 中的 Time 有哪⼏种?
  • 【Python】正则表达式的艺术:轻松驾驭 Python 的re库
  • MySQLOCP考试过了,题库很稳,经验分享。
  • springboot521基于Spring Boot的校园闲置物品交易系统(论文+源码)_kaic
  • 损失函数-二分类和多分类
  • 使用Python实现医疗图像处理:探索AI在医学影像中的应用
  • 蓝桥杯真题———日期问题
  • 若依(spring-cloud)修改登陆密码加密算法
  • Redis 数据库
  • 百度地图绘制行政区域及设置中心点
  • 曹雪芹,梦断红楼留不朽
  • 模仿微信小程序wx.showModal自定义弹窗,内容可以修改
  • 云起无垠入选中国信息通信研究院2024年度首期“磐安”优秀案例
  • HTML——16.相对路径
  • MLA:多头潜在注意力
  • 【YashanDB知识库】启动yasom时报错:sqlite connection error
  • 概率论与随机过程--作业6
  • 小程序笔记