平衡步兵底盘PID参数调试记录

一、摘要

  1. 本文主要记录自己调试平衡底盘过程中的经验以及理解,涉及到自己的调试思路以及控制思路,未涉及到具体代码
  2. 芯片型号使用RoboMaster开发板C型,电机型号为MF9025
  3. 采用CAN控制+PID算法,C板自带的BMI088陀螺仪

二、PID算法理解

在测试之前先要弄清楚什么是PID算法?

PID算法是由比例(Proportional,P)、积分(Integral,I)和微分(Derivative,D)三种算法组成,通俗点理解就是通过PID三个参数一系列的计算,使得实际的目标值无限的接近于期望值。在实际控制中,会进行不同的组合来达到不同的控制效果。

下面分别对三个参数进行简单的理解:

比例(Proportional)参数

        比例参数是根据当前误差(实际值与目标值之间的差异)的大小来调整控制器输出的部分。减小测量值(如平衡小车实际角度)和理论值(如平衡小车平衡时期望的0度)之间的误差(差值),让测量值不断接近理论值。它使得系统对误差做出快速而直接的响应。

具体表达式:输出=p参数×误差(误差=测量者-理论值)。

可以看出,误差越大,p的输出也越大;

微分(Derivative)

        微分参数根据误差变化的速率来调整控制器的输出。它可以抑制系统的过度振荡,并提高系统的稳定性。可以将D的作用作用是“阻尼”。如果系统误差很大(比如把平衡小车放倒30度)或p参数较大,那么p的输出就会很大,导致系统剧烈响应,出现过冲现象(在平衡小车中表现为大幅度低频震荡),此时就需要用到D算法来抑制,让系统可以刚好停在理论值而不过冲。就好像在水里挥拳,挥的速度越快,受到水的阻力越大,越难继续挥拳。这个“水的阻力”跟D算法的作用很像,因此可以把d算法理解为“阻尼”,抑制过冲现象。

具体表达式:输出=d参数×(此次误差-上一次误差)。

此次误差与上一次误差的差值反映的是误差的变化速度(比如在平衡小车自平衡的过程中,t0时刻的误差是30度,t1时刻10度,t2时刻5度,那么t0到t1时刻的误差变化速度较大,t1到t2时刻较小)。可以看出,两次误差的差值越大,d的输出也越大,抑制效果越明显;

积分(Integral)

        积分参数考虑过去的误差积累,通过积分控制来减小稳态误差。换句话讲:I算法的作用是消除稳态误差。当系统误差已经接近0时,p的输出会很小,起不到继续减小误差的作用,导致误差始终没办法减小到0。这个时候就需要用到i算法,让误差值不断累加,并将累加后的值输出。I算法常用于精确的控制,比如控制小车的速度和转向角精确维持在某个值。它对于系统长时间处于偏离目标值的状态时非常有用。

具体表达式:输出=i参数×误差的累加。

可以看出,只要存在误差(这种误差叫稳态误差),不论误差有多小,i的输出也会像滚雪球一样越滚越大;

三、平衡底盘PID含义及算法关系

PID映射

我们可以根据PID原理将其应用到平衡底盘控制中,在这之前需要将正确获取陀螺仪的数据以及正常的电机控制。

参考网络上平衡车的说明以及其他高校开源的平衡控制,平衡车PID包含直立环、速度环、转向环三个环向控制。但是放在平衡步兵上,每个大环是不够的,所以又拆分为两个PID控制器。直立环包含倾角、倾斜角速度,速度环包含位移、运动速度,转向环使用串级PID计算,其中旋转偏角PID的输出作为旋转角速度PID的期望。

平衡步兵底盘PID参数调试记录_第1张图片 底盘各PID控制器划分及关系

 这里速度环和平衡环采用混连PID并联结构,转向环采用混连PID串联结构。

针对各PID控制器做出解释:

行进环

PID_k1:底盘位移(ecd)

该PID控制器用于维持平衡车底盘的位移在一个稳定的位置,使其保持在目标位置。

P部分:根据底盘位移的当前偏离值来计算控制输出,使位移回到期望值。

D部分:用于控制位移变化速度,以避免过冲或震荡。

PID_k2:底盘速度(speed)

该PID控制器用于控制底盘的速度,以实现平衡车的前进运动,同时避免速度变化过快。

P部分:根据底盘速度的当前偏离值来计算控制输出,以控制速度。

D部分:用于减小速度变化的速度,以防止过冲或震荡。

平衡环

PID_k3:底盘倾角(ecd)

该PID控制器用于维持平衡车底盘的倾角在一个稳定的位置,使其保持直立

P部分:根据底盘倾角的当前偏离值来计算控制输出,使倾角回到期望值。

D部分:用于控制倾角的变化速度,以避免过冲或震荡。

PID_k4:底盘倾斜角速度(speed)

该PID控制器用于控制底盘的倾斜角速度,以防止底盘倾角速度过快,导致失去平衡。

P部分:根据底盘倾斜角速度的当前偏离值来计算控制输出,以控制倾斜速度。

D部分:用于减小倾斜速度的变化,以防止过冲或震荡。

转向环

PID_k5:底盘旋转偏角

该PID控制器用于维持平衡车底盘的旋转偏角在一个稳定的位置,使其保持在期望的方向。

P部分:根据底盘旋转偏角的当前偏离值来计算控制输出,使偏角回到期望值。

I部分:用于处理积分误差,消除长期的静态偏角误差。

D部分:用于控制偏角的变化速度,以避免过冲或震荡。

PID_k6- 速度控制器,其期望值来自PID_k5

该PID控制器用于控制底盘的旋转速度,其期望值由前一个PID控制器PID_k5的输出提供,以实现方向控制。

P部分:根据底盘旋转速度的当前偏离值来计算控制输出,以控制旋转速度。

I部分:用于处理积分误差,以防止长期的速度误差。

D部分:用于减小速度变化的速度,以防止过冲或震荡。

针对上面的解释,就可以根据每个PID控制器所会影响的结果进行调参,根据调试的情况判断是否调试正确,更方便盲调。

调试过程

调试顺序

平衡步兵底盘PID参数调试记录_第2张图片

直立环调试过程

  1. 调试理想状态是在水平地面上在受力后仍可以直立不倒,且车体不会抖动。
  2. 调试的过程中会向前倾,原因是没有加行进环,他会向前倾倒,为了保持平衡他也要顺势往前给力,所以会出现向前动。
  3. 需要手扶着

先调试底盘倾角PID,目的是为了保证他立住保持平衡

  1. 先加P,调至大幅度低频摇摆但不倒下(手扶着)
  2. 再加D,调至反复摇摆频率较快,但是摇摆角度没有只加P的时候那么大。

再调试倾角速度PID,目的是为了保证他不会大幅度向前向后倾倒

  1. 先加P,调至倾角没有那么明显
  2. 再加D,调至倾斜速度反应快些(相较于没加D)只要不抖 就往上加D

调完直立环效果:

行进环调试过程

调试过程中没有明确需要调到什么样子,理论上来讲踢走但是可以返回(加了里程计),但是在调试过程中效果始终没有那么好。

  1. 位移在一个稳定的位置,使其保持在目标位置

  2. 前进保持平稳,停下快速返回平衡状态

在调试过程中由于没有加转向环,所以在静止状态下或者急停前进,方向会变化属于正常现象

先调试底盘的位移PID,目的是为了保持在目标位置不会乱动

  1. 这里说明一下,目标状态(肉眼)看很难看出来什么效果,都是凭感觉调试,但是需要注意的点是使用Kd,Kp;并且Kd加的很大,才可以消除位置误差使他保持原地不动。

  2. 先加P:P加的小,平步就软,容易推动,P加大到可以感受到明显阻力即可(要水平推,不要从上往下给力),静止状态下推动,平步有抖动并且会来回移动。

  3. 再加D:加大D以消除平步来回移动,直到推动或者运动状态下可以快速回正,我这里给的是P的40倍(这里很大,也是不断测试加上去的)

  4. 没有加I,因为效果不明显

    

    

再调试前进运动PID,目的是为了在移动过程中保持平衡且能快速回正

  1. 先加P:调至前进可以保持平衡状态即可,加大的效果与0时的效果区别比较明显,前进更加稳定。过大会轻微反复摇摆。

  2. 加I:P与I是200倍关系。

  3. 没有加D,加D会抖

  4. 调完行进环效果

转向环调试过程

串级PID调试流程,这里不做调试过程叙述(按流程调试,个人感觉串级PID不好调)。

四、参考内容

三天让车立起来!STM32平衡车入门PID —— 第三天(PID调参)_平衡车pid-CSDN博客

【平衡小车PID】直立环+速度环完整调参过程 (开源)_哔哩哔哩_bilibili

五、总结

平衡底盘重点可以分两大部分,一部分属于底层控制及获取数据正确,另一部分就是PID算法控制及参数调节,后部分属于非常耗时间且折磨的。根据内容其实也能看出来是RoboMaster的平衡步兵,希望写的文章内容能对其他人(RMer)有帮助。

你可能感兴趣的:(STM32,stm32,单片机,嵌入式硬件)