基于自适应动态规划(ADP)的单极倒立摆控制系统
项目介绍
本项目实现了一个基于自适应动态规划(Adaptive Dynamic Programming, ADP)理论的单极倒立摆在线学习控制系统。倒立摆系统是一个典型的非线性、强耦合且不稳定的系统。本项目通过构建评价网络(Critic Network)和执行网络(Action Network),在系统动力学模型不完全已知的环境下,实现了控制策略的自适应演化,最终使摆杆在垂直位置保持平衡并使小车回归原点。
功能特性
- 非线性动力学仿真:精确模拟了包含转动惯量、摩擦系数及质量分布的非线性倒立摆模型,而非简单的线性化近似。
- 双网络架构控制:采用评价-执行(Actor-Critic)框架,通过评价网络估算价值函数,通过执行网络直接生成控制力。
- 在线学习能力:算法不需要离线求解Riccati方程,通过贝尔曼误差(HJB误差)的实时反馈进行权重更新。
- 探索机制:引入随时间衰减的探测噪声,保证在学习初期对状态空间进行充分搜索,后期则收敛至稳定控制。
- 多维度分析:提供系统状态收敛、网络权重演化轨迹、即时代价以及系统总能量变化的全面可视化分析。
使用方法
- 确保计算机已安装 MATLAB 环境。
- 将该项目的脚本文件放置在 MATLAB 工作目录下。
- 在命令行窗口输入启动函数命令或点击运行按钮。
- 程序将自动开始 20 秒步长为 0.01 秒的实时仿真。
- 仿真结束后,会自动弹出两个图形窗口展示系统性能分析结果。
系统要求
- MATLAB R2016b 或更高版本。
- 无需额外的工具箱(如控制系统工具箱),逻辑均基于标准矩阵运算实现。
实现逻辑与算法细节
#### 1. 系统动力学建模
程序内置了倒立摆的非线性状态空间方程:$dot{x} = f(x) + g(x)u$。
其中状态向量 $x$ 包含小车位移、小车速度、摆杆角度和摆杆角速度。代码中精细计算了 $f(x)$ 和 $g(x)$ 矩阵,考虑了小车质量 $M$、摆杆质量 $m$、摆杆半长 $l$、转动惯量 $I$ 以及摩擦系数 $b$。
#### 2. 评价网络 (Critic Network)
- 结构:评价网络使用二次型组合基函数来逼近价值函数 $V(x)$。基函数由状态变量的二次项组成(如 $x_1^2, x_1x_2, x_2^2$ 等),共计 10 个基函数。
- 学习准则:通过最小化贝尔曼误差(Hamilton-Jacobi-Bellman error)进行更新。HJB 误差由当前状态的即时代价($x^T Q x + u^T R u$)与价值函数的时间导数之和构成。
- 权重更新:采用梯度下降算法,利用基函数的梯度与系统动态的乘积来调整评价权重 $W_c$。
#### 3. 执行网络 (Action Network)
- 结构:执行网络将系统状态直接线性映射至控制量 $u$。
- 学习目标:通过不断调整权重 $W_a$,使执行器的输出趋近于由当前评价网络推导出的最优控制律。最优控制律计算公式为:$u^* = -0.5 R^{-1} g(x)^T nabla V^T$。
- 更新机制:执行网络权重随时间步实时修正,以最小化当前控制输出与目标最优控制量之间的偏差。
#### 4. 优化算法核心
- 折扣因子与学习率:设置了折扣因子 $gamma$ 以平衡即时收益与长期收益,并通过 alpha 参数控制评价网络和执行网络的收敛速度。
- 数值积分:采用一阶欧拉法进行状态迭代,在 $0.01s$ 的采样率下保证了仿真的稳定性与精度。
#### 5. 分析与可视化输出
- 状态收敛分析:实时记录并绘制角度、位移及对应的导数,直观展示系统从非平衡态(初始 10 度偏移)回归平衡态的过程。
- 权重监控:展示了评价网络和执行网络权重在学习过程中的动态调整,用于验证在线学习的收敛性。
- 能量守恒检查:通过计算系统的动能(含小车运动和摆杆转动、平动)及重力势能之和,分析控制力对系统能量的影响。
关键算法参数
- 状态权重矩阵 Q:侧重于对位移和角度偏离的惩罚(权重为 10)。
- 控制约束 R:通过设置 0.1 的权重抑制过大的控制输出。
- 初值设置:小车初始位移 0.5 米,摆杆初始偏角 10 度,用于测试系统的鲁棒纠偏能力。