直立车控制算法分析

在上一节中讲述直立车的每一个闭环控制都是通过PID算法来实现的,PID算法主要针对有偏差的控制系统,也就是当前值与目标值存在误差,PID算法就将误差作为输入,通过预设好的P、I、D三个参数的值,调整最后的输出,让当前值与目标值尽可能的接近,直到当前值与目标值相等为止。

位置式PID算法:

float* Place_PID(PID *sptr, int16 Setpoint, int16 Nowpoint)

{

static float result;

int16 Error[2] = {0, 0};

//Error[0]:误差

//Error[1]:误差微分

Error[0] = Setpoint - Nowpoint;//求取偏差

sptr->SumError += Error[0];//误差积分

Error[1] = Error[0] - (sptr->LastError);//误差微分

sptr->LastError = Error[0];//更新误差

//积分限幅

if(sptr->SumError <= -300)

sptr->SumError = -300;

if(sptr->SumError >= 300)

sptr->SumError = 300;

//PID核心运算

result = (sptr->Kp*Error[0])+    //比例

(sptr->Ki*sptr->SumError)+ //积分

(sptr->Kd*Error[1]);       //微分

return &result;//返回计算结果

}

以上是位置式PID算法,我们先来一步步分析:

float* Place_PID(PID *sptr, int16 Setpoint, int16 Nowpoint)

名称

含义

float*

函数返回值类型为float*,相当于返回地址(指针)

Place_PID

函数名

PID *sptr

PID结构体的指针,结构体中包含于PID运算相关的变量

Setpoint

目标值,根据预期控制效果来设置

Nowpoint

当前值,通常为传感器实时采集到的数值

static float result

定义需要用到的变量,result定义为静态局部变量,存储每一次PID运算的结果,静态变量在编译时自动赋值为0。

int16 Error[2] = {0, 0}

Error[2]为存储两个误差变量的数组,分别为误差,和误差微分。

Error[0] = Setpoint - Nowpoint

第一步计算偏差,偏差 = 目标值 - 实际值,存储到Error[0]中;

sptr->SumError += Error[0]

第二步计算误差积分,即累计误差,在计算机中,连续的离散数字信号累加可以得到积分结果,此处将误差积分,存储到结构体变量SumError中;

Error[1] = Error[0] - (sptr->LastError)

第三步计算误差微分,用本次的偏差Error[0]减去上次的误差LastError作为误差微分存储到Error[1]中;

sptr->LastError = Error[0]

第四步将上次误差赋值为本次误差,实现误差更新。

if(sptr->SumError <= -300)

sptr->SumError = -300;

if(sptr->SumError >= 300)

sptr->SumError = 300;

第五步对误差积分进行限幅操作,如果不进行限幅,可能会导致小车刚开启电源,零位漂移过大,导致PID输出过大,造成电机疯转。

result = (sptr->Kp * Error[0])+

(sptr->Ki * sptr->SumError)+

(sptr->Kd * Error[1])

第六步进行核心运算,P*误差 + I*误差积分 + D*误差微分,存储到静态变量result中。

return &result

最后将结果以指针的形式返回。

在直立车控制中,采用的方案是串级PID,串级PID控制原理如图所示:

在串级PID中,直立控制部分包含了角速度环、角度环、速度环。根据图中可以看出,速度环的输出是角度环的输入,角度环的输出是角速度环的输入,角速度环的输出供给电机,三个PID控制器串连起来,每一个PID控制器本身也是一个控制回路,称为副回路。

串级PID的核心

设定目标速度之后,速度环输出目标角度,角度环输出目标角速度,相当于前后台的关系,角速度环输出控制电机,角速度环由角度环来调节,角度环由速度环来调节,形成三环串级的PID。类似于公司里面老板给项目经理分配项目,然后项目经理又把项目交给开发人员,老板相当于速度环,项目经理相当于角度环,开发人员相当于角速度环。

直立车控制之PID算法分析相关推荐

  1. 直立车各环的调试_大学生智能车竞赛之直立车控制,我之初见(四)

    原标题:大学生智能车竞赛之直立车控制,我之初见(四) 直立车控制之转向环 我认为转向环的控制是智能车控制的核心,前文也有提到,直立环和速度环其实可以并为一个环的控制而且控制的方法基本就是 P. D 或 ...

  2. 直立车控制方案原理附录源码

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本人是参加过三年(也可以说是两年)NX智能车竞赛的老菜鸡了,做的都有直立车.感觉大学就要过去了 ...

  3. 基于串级PID的直立车控制算法研究

    徐厚华 何哲嘉 向颖锋 2020-10-31 Saturday 00摘要   直立平衡车因其动力学系统同时具有多变量,非线性,不稳定,强耦合等特性,传统的单环PID控制平衡已经略显吃力.本文将采用内环 ...

  4. PID实践笔记-PID浅解及两轮直立车参数调试经验

    写在前面: 好快啊做车生涯就这么结束了,虽然无缘厦门但也没有遗憾了,大公主在预赛和决赛中都跑的不错,最后写这篇文章就当画上一个完美的句号吧,目的也在于总结一下大半年以来调车的玄学经历和解决方案,同时也 ...

  5. 直立车各环的调试_平衡小车调试指南(直立环 速度环)

    平衡小车之家出品 1 平衡小车调试指南 接下来将和大家一起以工程的思想去完成一个平衡小车的调试, 包括平衡小 车的直立环.速度环.转向环,一般我们是先调试直立环,再调试速度环,最好 调试转向环.另外需 ...

  6. [智能车]平衡车/直立车的入门经验(代码讲解)

    做为第十六届智能车的FW,在半年的做车经历中把能踩的坑都踩了个遍.写这篇文章是为了留个纪念,也是为了帮新车友快速入门(可能完全0基础).我自己的经验也不足,所以可能会存在一些漏洞,还请大佬指正. 车模 ...

  7. 第16届智能车竞赛双车接力组—直立车经验语录

    第16届智能车竞赛双车接力组-直立车经验语录 前言 直立环核心控制算法-串级PID 转向环控制算法 算法框架 搭车方法 波形拟合 调车方法 角速度环整定方法 角度环整定方法 速度环整定方法 转向环整定 ...

  8. 直立车各环的调试_平衡小车调试指南 直立环 速度环

    平衡小车之家出品 1 平衡小车调试指南 接下来将和大家一起以工程的思想去完成一个平衡小车的调试, 包括平衡小 车的直立环.速度环.转向环,一般我们是先调试直立环,再调试速度环,最好 调试转向环.另外需 ...

  9. 全国大学生智能车竞赛经验分享—直立车

    摘自:https://mp.weixin.qq.com/s/Jqy12s5BpsjBn1TocK260w 全国大学生智能车竞赛经验分享-直立车 原创 慕羽⭐ 古月居 1月26日 直立车涉及到的很多的东 ...

  10. 对比直立车模控制中的互补滤波、Karlman滤波和参考滤波方案

    前几天,有参加智能车竞赛的同学在公众号上询问一个关于直立车模控制中角度融合算法的问题.感觉这是所有初次准备智能车模竞赛的同学都会碰到的问题. 卓大大,请问您可以针对卡尔曼滤波.互补滤波.清华滤波的原理 ...

最新文章

  1. ORACLE数据库备份
  2. Idea自带工具解决冲突
  3. 单链表基本操作(可执行程序),二级指针使用必要性的初步理解
  4. ubuntu让/etc/hosts修改后立刻生效
  5. 举例说明层次分析的三大原则_一起来复习下陈印老师关于多选题做题思路的分析...
  6. 九、华为鸿蒙HarmonyOS应用开发之Java UI框架、常用Image组件使用
  7. Leetcode每日一题:659.split-array-into-consecutive-subsequences(分割数组为连续子序列)
  8. AUTOSAR实战教程pdf版
  9. 计算机毕业设计Java医院医患管理系统(系统+源码+mysql数据库+Lw文档)
  10. 自己做量化交易软件(38)小白量化实战11--双向高频马丁交易策略
  11. 全国计算机大赛游戏作品,计算机作品大赛优秀作品展示---数字动漫游戏栏目
  12. java程序猿面试问缺点怎么回答_当程序员面试被问“你的缺点是什么?”你该怎么回答?...
  13. 机械类和计算机类哪个累哪个难,这几个大学专业累死人还难学,但是毕业却很好就业...
  14. linux版虚拟示波器,借你一双慧眼——DSCope虚拟示波器评测
  15. F - 悼念512汶川大地震遇难同胞
  16. android触屏对焦_Android摄像头自动对焦与触摸对焦实现
  17. Emacs Stardict
  18. “2019世界计算机大会”新闻发布会在京召开
  19. Java中ASC码与字符互相转换
  20. 门外新手请教几个WM6 MFC的问题

热门文章

  1. mysql 间隙锁 的范围_mysql间隙锁
  2. 深度解读华为5G空口新技术:F-OFDM和SCMA
  3. STM32中断编程步骤
  4. 思科模拟器 交换机链路聚合(二层、三层)
  5. TikTok和抖音差别大吗?
  6. 太极图正确画法_八卦太极图的正确画法
  7. 利用python做淘宝_利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程...
  8. 虚拟机VMware安装PhoenixOS(凤凰OS)进入命令行黑屏页面无法进入图形界面
  9. IEEE会议(期刊)检索
  10. 用于文本去重(相似度计算)的Simhash算法学习及python实现(持续学习中)