# gravity_wheel_MPC **Repository Path**: Anthony_Bridge/gravity_wheel_MPC ## Basic Information - **Project Name**: gravity_wheel_MPC - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-19 - **Last Updated**: 2025-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mujoco 倒立摆 基于学习的MPC控制 ## 理论 ### 1. ​问题定义与符号 **状态空间**:$s_{t} =\left [ \theta _{t}, \dot{\theta }_{t} \right ]$,其中$\theta _{t}$为角度,$\dot{\theta }_{t}$为角速度
**控制输入**:$ u_{t} \in \mathbb{R} $,表示施加的力矩,正负代表方向
**目标函数**:最小化未来$ N $步的累积代价: $$ J = \sum_{k=0}^{N-1}\left ( \left \| \theta _{t+k|t} - \theta _{ref} \right \|^{2} +\lambda \left \| u_{t+k} \right \| ^{2} \right ) $$ 其中$\theta _{ref}$为平衡位置(如垂直向上$0^{\circ }$),$\lambda$为控制量权重 ### 2. 神经网络动态模型 **输入**: 当前状态$s_{t}$和动作$u_{t}$
**输出**: 预测下一状态$\hat{s} _{t+1} = f_{\theta } \left ( s_{t}, u_{t} \right ) $,其中$f_{\theta } $为神经网络参数化模型
**训练目标**: 最小化预测误差: $$\mathcal{L} \left ( \theta \right ) =\mathbb{E} \left ( s_{t},u_{t},s_{t+1} \right ) \left [ \left \| \hat{s}_{t+1}-s_{t+1} \right \|^{2} \right ] $$ ### 3. 滚动优化 **当前状态获取**:$s_{t}$从仿真环境读取
**控制序列优化**: $$\underset{u_{t},\dots , u_{t+N-1}}{min} \sum_{k=0}^{N-1} \left (\left ( \left | \theta _{k+1} \right | + 0.1*\left | \dot{\theta }_{k+1} \right | \right ) * \left ( 1 - step / 10 \right )\right ) $$ 约束条件为$\hat{s} _{t+k+k|t} = f_{\theta }\left ( \hat{s}_{t+k|t},u_{t+k} \right ) $(多步预测)
**实施控制**: 取优化序列首项$u_{t}^{*}$作用于系统
**在线更新模型**(如果动态更新): 将新数据$\left ( s_{t},u_{t}^{*},s_{t+1} \right )$ 加入训练集,更新$f_{\theta}$ ## python库依赖 ``` mujoco torch ``` ## 开始 ### 在线训练 ``` python model_train_online.py ``` 训练后会在train_records文件夹中保存模型
但是在线训练效果感觉不太好,所以建议离线训练(原因不明,于是我使用了离线训练) ### 离线训练 #### 1. 收集预训练数据 ``` python data_collection/data_collection.py ``` 每个程序会收集2.5e4 * 21 条数据,可以多次运行这个程序收集更多的数据 #### 2. 数据合并 ``` python data_collection/data_merge.py ``` 如果在收集数据的时候手机了多个json的数据,可以使用这个程序合并成一个json,合并后的文件命名为"data_merge.json",但是这个文件比较大,不要在vscode或cursor中打开,大概率会卡死!!! #### 3. 训练模型 ``` python model_train.py ``` 训练完成后的模型命名为"robot_dynamics_model"开头 ### 测试模型 ``` python test.py ``` 注意在主函数中修改pth模型路径
图片描述