本帖最后由 FuShenxiao 于 2025-3-6 20:55 编辑
复现论文《基于模糊PID的水下航行器运动控制研究》
根据论文,水下航行器的动力学模型传递函数为:

建立传统PID和模糊PID控制框图如图1
图1 水下航行器控制仿真框图
根据论文,传统PID中取Kp=20,Ki=0.5,Kd=15;模糊PID中取Kp=300,Ki=0.5,Kd=35。模糊控制器以误差e和误差的导数ec为输入,输出ΔKp,ΔKi,ΔKd。在MATLAB中设置模糊控制器输入输出关系如图2。
图2 模糊控制器输入输出关系
模糊规则采用Mamdani标准,所有输入输出参数范围的论域均取[-3, 3],选择七级模糊子集{NB, NM, NS, ZO, PS, PM, PB},其中N表示负,P表示正,B表示大,M表示中,S表示小,ZO表示0,模糊子集的隶属度函数均采用三角函数形式,在MATLAB中设置e的隶属度函数如图3。
图3 输入量e的隶属度函数
设置模糊控制规则如表1,在MATLAB中设置模糊控制规则如图4。
表1 ΔKp,ΔKi,ΔKd模糊控制规则
图4 模糊控制规则设置
采用质心法对ΔKp,ΔKi,ΔKd进行反模糊化处理,得到反模糊化的精确值

其中xi为模糊变量元素,μ(xi)为元素xi的隶属度。
得到仿真结果如图5,可见在该论文中利用模糊控制有效减小了超调和振荡幅值。
图5 阶跃响应曲线
可以看出在对无刷电机的控制中,模糊PID的目的在于缩短上升时间,又要防止超调,在该无刷电机电机控制案例中,e的值一般为正,或者在电机平稳运行时转速在目标转速附近波动时,e变为一个较小的负数,因此模糊控制规则应该要满足以下条件:
- 当e较大时,Kp可适当增大,提高系统快速性;当e较小时,Kp应适当减小,以防止振荡
- 由于原系统无超调,因此与复现论文(阶跃响应有明显超调)不同的是,在e较大时,可以适当增大Ki,从而提高系统快速性(后来证明这一步是不对的,会导致系统出现振荡,而且难以逼近目标转速)
- Kp和Ki的增大可能会导致系统的不稳定,而在原始代码中仅采用了PI控制,后续可以尝试引入微分调节提高系统阻尼
复现论文如下: