模糊自适应pid控制器倒立摆源代码
时间: 2023-12-05 07:01:36 浏览: 51
倒立摆是一种经典的控制系统实验,利用PID控制器可以实现其稳定控制。而模糊自适应PID控制器是在传统PID控制算法的基础上结合模糊控制和自适应控制技术的一种改进算法。
源代码实现如下:
1. 引入所需的库文件。
```python
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
```
2. 定义输入和输出的模糊变量。
```python
angle = ctrl.Antecedent(np.arange(-90, 91, 1), 'angle')
angle_dot = ctrl.Antecedent(np.arange(-10, 11, 1), 'angle_dot')
output = ctrl.Consequent(np.arange(-100, 101, 1), 'output')
```
3. 设定每个模糊变量的隶属函数。
```python
angle['NB'] = fuzz.trimf(angle.universe, [-90, -90, -45])
angle['NS'] = fuzz.trimf(angle.universe, [-60, -45, 0])
angle['ZE'] = fuzz.trimf(angle.universe, [-10, 0, 10])
angle['PS'] = fuzz.trimf(angle.universe, [0, 45, 60])
angle['PB'] = fuzz.trimf(angle.universe, [45, 90, 90])
angle_dot['NB'] = fuzz.trimf(angle_dot.universe, [-10, -10, -5])
angle_dot['NS'] = fuzz.trimf(angle_dot.universe, [-7, -5, 0])
angle_dot['ZE'] = fuzz.trimf(angle_dot.universe, [-2, 0, 2])
angle_dot['PS'] = fuzz.trimf(angle_dot.universe, [0, 5, 7])
angle_dot['PB'] = fuzz.trimf(angle_dot.universe, [5, 10, 10])
output['NB'] = fuzz.trimf(output.universe, [-100, -100, -50])
output['NS'] = fuzz.trimf(output.universe, [-70, -50, 0])
output['ZE'] = fuzz.trimf(output.universe, [-20, 0, 20])
output['PS'] = fuzz.trimf(output.universe, [0, 50, 70])
output['PB'] = fuzz.trimf(output.universe, [50, 100, 100])
```
4. 设定模糊规则。
```python
rule1 = ctrl.Rule(angle['NB'] & angle_dot['NB'], output['NB'])
rule2 = ctrl.Rule(angle['NS'] & angle_dot['NB'], output['NS'])
rule3 = ctrl.Rule(angle['ZE'] & angle_dot['NB'], output['ZE'])
rule4 = ctrl.Rule(angle['PS'] & angle_dot['NB'], output['PS'])
rule5 = ctrl.Rule(angle['PB'] & angle_dot['NB'], output['PB'])
...
(根据实际情况设定其他规则)
...
ctrl_sys = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, ...]) # 可加入其他规则
ctrl_sys_simulation = ctrl.ControlSystemSimulation(ctrl_sys)
```
5. 进行控制计算。
```python
ctrl_sys_simulation.input['angle'] = angle_value
ctrl_sys_simulation.input['angle_dot'] = angle_dot_value
ctrl_sys_simulation.compute()
output_value = ctrl_sys_simulation.output['output']
```
这是一个简单的模糊自适应PID控制器的倒立摆源代码。通过设定模糊变量、隶属函数和模糊规则,可以根据实时的倒立摆角度和角速度计算出控制输出,从而实现倒立摆的稳定控制。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)