关于PDI校准贴

讲一下PDI校准和陀螺仪的运用。

使用惯性传感器(陀螺仪)可以监测车辆角度,结合底盘驱动(Motor.spin(forward,100,percnet);)相关函数,可以编写底盘转弯,直行角度纠正等函数。
看你需要了解哪些

PID是一种算法,不是具体的某一个功能,他可以用于上述函数中。

这个帖子是我准备分享关于PDI的,但是搞忘了,哈哈。

很需要,求vex iq的教學。

现在的确很难找到调节kp ki kd参数的具体方法的帖子,都是自己摸着石头过河 :rofl:

PID控制(比例-积分-微分控制)是一种广泛使用的反馈控制机制,常用于自动化和机器人控制系统。它通过计算目标值与当前值之间的误差,并利用该误差来调整控制输入,以实现期望的输出。

PID控制的三个组成部分(python示例)

  1. 比例(P)
  • 比例控制根据当前误差(目标值与实际值的差距)直接调整控制输出。比例增益(kp)决定了对误差的响应强度。
  • 在代码中,比例部分由以下表达式表示:
self.error = target_value'''目标值''' - fact_value'''实际值(可为传感器值)'''  # 计算当前误差
output += self.error * self.k_p  # 比例控制输出
  1. 积分(I)
  • 积分控制计算过去误差的累积,从而消除稳态误差。积分增益(ki)决定了累积误差对控制输出的影响程度。
  • 在代码中,积分部分通过累加误差并乘以积分增益来实现:
self.integral += self.error  # 累加误差
output += self.integral * self.k_i  # 积分控制输出
  1. 微分(D)
  • 微分控制预测未来的误差,通过计算误差的变化率来调整控制输出,防止过冲。微分增益(kd)决定了对误差变化速率的反应强度。
  • 在代码中,微分部分通过比较当前误差与前一次误差来实现:
output += (self.error - self.previous_error) * self.k_d  # 微分控制输出
self.previous_error = self.error # 保存此次误差,方便下一次调用。

如何使用PID进行控制:
方法先重置电机的位置和状态。
进入一个循环,持续计算当前方向误差,并更新积分和微分项。
使用PID公式计算控制输出,并调整电机速度和旋转方向。
当误差小于设定阈值或达到最大重复次数时,停止电机。

PID控制器的性能很大程度上依赖于 ( K_p )、( K_i ) 和 ( K_d ) 的选择。通常使用以下方法进行参数调节:

调参方法:
经验法则: 根据经验手动调整。
Ziegler-Nichols法: 一种经典的调节方法,通过实验确定最优参数。
自动调节算法: 利用计算机程序进行在线调节。

工具支持:
MATLAB/Simulink:通过PID Tuner工具自动调参并仿真。
Python Control库:提供系统建模和参数优化接口。

感謝分享,很…難

关于PID参数的自动化优化,还有几点想说的。
目前主流的算法有传统异步优化,网格搜索,随机搜索,粒子群(PSO),以及多线异步优化等。

优化方法 参数耦合处理 计算效率 易陷入局部最优 实现复杂度
传统异步优化
网格搜索 极低
随机搜索
粒子群优化(PSO) 优秀 概率低
多线异步优化 较好 概率较低 较低

正常情况,一般的非高精度机器人控制,传统异步优化算法已经可以满足,如果追求更高优化精度和效率,可尝试PSO或网格搜索。多线异步优化看似好,实际效果可能并不如传统异步优化,看自己需求选择合适的优化算法。

PID控制,V5里一般是PI,微分D的作用不大