倒立摆参数以及数学模型
首先是写一个倒立摆的AGENT模型
pendulum_env.py
import numpy as np
import matplotlib.pyplot as plt
# import matplotlib
import matplotlib.animation as animation
# import IPython
class Pendulum:
"""
构建一个倒立摆环境
"""
def __init__(self):
"""
初始化
"""
# 倒立摆系统参数
self._m = 0.055 # 转子重量
self._g = 9.81 # 重力加速度
self._l = 0.042 # 重心到转子距离
self._J = 1.91e-4 # 转动惯量
self._b = 3e-6 # 粘滞阻尼
self._K = 0.0536 # 转矩常数
self._R = 9.5 # 转子电阻
# 状态维度 2维 角度angle和角速度angular
self.state_dims = 2
# 采样时间
self.Ts = 0.005
# 取值范围
self.max_anger = np.pi # 最大角度
self.max_angular = 15 * np.pi # 最大角速度
self.max_voltage = 3 # 最大电压
def get_delta_angular(self, x, u):
"""
获取倒立摆角加速度
:param x: 该时刻输入状态 [角度,角速度]
:param u: 该时刻输入电压
:return: 该时刻角加速度
"""
temp = self._m * self._g * self._l * np.sin(x[0])
_temp = (temp - self._b * x[1] - (self._K ** 2) * x[1] / self._R + self._K * u / self._R)
return _temp / self._J
def get_next_state(self, x, u):
"""
根据离散时间动力学模型获得下次状态
:param x: 该时刻输入状态 [角度,角速度]
:param u: 该时刻输入电压
:return: 下一时刻的新状态 [角度,角速度]
"""
alpha = x[0] + self.Ts * x[1]
d_alpha = x[1] + self.Ts * self.get_delta_angular(x, u)