基于神经网络的一阶倒立摆控制系统仿真项目
项目介绍
本项目是一个在 MATLAB 环境下运行的高性能仿真系统,旨在通过人工神经网络(ANN)实现对经典一阶倒立摆系统的实时动态控制。倒立摆系统是一个高阶、非线性、强耦合且本质不稳定的典型被控对象,常用于验证先进控制算法的性能。
本项目通过模拟监督学习的过程,首先利用线性二次型调节器(LQR)算法生成最优控制样本,随后训练一个反向传播(BP)神经网络来拟合该控制器。最终,训练好的神经网络能够在非线性环境模型中,实时预测并输出控制力,使小车上的摆杆在受到初始扰动的情况下迅速恢复平衡,并保持在垂直向上的稳定状态。
功能特性
- 自主化样本生成:系统自动构建倒立摆的线性化模型,并利用 LQR 算法在状态空间内随机采样,生成高质量的训练数据集。
- 自定义神经网络架构:内置手动实现的 BP 神经网络算法,无需依赖厚重的深度学习工具箱,包含完整的前向传播与反向传播权重更新逻辑。
- 高精度物理仿真:采用四阶龙格库塔法(RK4)对一阶倒立摆的非线性动力学方程进行数值积分,保证了仿真过程的物理真实性。
- 多维度结果可视化:系统提供实时运行状态记录图表(包括位移、角度、控制力历史曲线)以及直观的二维运动学动态动画。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 基础功能模块:MATLAB 核心运算模块(脚本不依赖 Simulink 模块库,而是通过代码实现了 Simulink 级别的数值仿真能力)。
- 硬件建议:主频 2.0GHz 以上 CPU,4GB 以上内存,以确保动态动画播放流畅。
实现逻辑与功能说明
项目通过一个集成的脚本程序完成从物理建模到控制展示的全过程,核心流程如下:
- 系统参数初始化
程序首先定义了小车质量、摆杆质量、摆杆半长度以及重力加速度等物理常数。同时设定了仿真的步长(0.01s)和总时长,确立了仿真的时间基准。
- 样本数据准备
程序基于一阶倒立摆在平衡点(垂直向上)的线性化状态空间方程,使用 LQR 算法计算最优反馈增益矩阵 K。通过在特定的状态范围内随机产生 2000 组状态向量(位移、速度、角度、角速度),并计算对应的 LQR 目标控制力,为神经网络提供训练标签。
- 神经网络构建与离线训练
系统构建了一个三层结构的神经网络(4 个输入、10 个隐藏层神经元、1 个输出)。使用双曲正切函数(tanh)作为隐藏层激活函数。程序实现了基于梯度下降的反向传播算法,通过 1000 轮迭代训练,使神经网络能够精确拟合 LQR 控制器的非线性映射关系。
- 闭环控制动态仿真
仿真进入实时运行阶段。在每个时间步长内,程序获取当前系统的四个状态变量,输入至神经网络控制器进行预测,获取所需的控制力。随后,将该力代入非线性动力学方程中。
- 物理演化求解
程序未直接使用简单的欧拉法,而是采用了四阶龙格库塔法(RK4)。该方法通过计算四个不同点的斜率加权平均值,迭代求解下一步的状态,确保了在高速摆动和快速震荡情况下的数值稳定性。
- 结果呈现
仿真结束后,程序自动生成两类输出:
第一类是静态趋势图:展示小车位移随时间的变化曲线、摆杆角度恢复平衡的过程曲线,以及神经网络输出力的剧烈程度。
第二类是动态演示视频:以图形化的方式绘制小车、摆杆和轨道,实时演示倒立摆从小角度扰动逐渐回归垂直平衡位置的物理动态。
关键算法及细节分析
- 线性化与 LQR 增益
虽然系统本质是非线性的,但在平衡点附近的线性采样能为神经网络提供有效的控制基准。Q 矩阵和 R 矩阵的选取平衡了控制精度(位移和角度的权重)与能量损耗(控制力的权重)。
- BP 神经网络实现
代码通过矩阵运算手动实现了权重更新规则。采用了学习率为 0.01 的批量梯度下降,通过减小预测偏差(Loss)来微调连接权重。这种“模仿学习”的机制使神经网络继承了最优控制器的特性,同时具备了泛化处理非线性扰动的潜力。
- 动力学方程建模
利用拉格朗日方程推导出的非线性动力学方程,完整考虑了摆杆转动惯量、向心力以及重力产生的力矩。在函数实现中,精准计算了分母项以处理系统中的耦合惯性。
- 动态可视化组件
可视化功能通过循环更新图形对象的属性实现。通过计算摆杆末端的三角函数坐标,实时渲染连杆和滑块的相对位置,并设定了坐标系界限以模拟真实的实验台环境。