# nmpc-auv-pathtracking **Repository Path**: chen-zhendong11/nmpc-auv-pathtracking ## Basic Information - **Project Name**: nmpc-auv-pathtracking - **Description**: No description available - **Primary Language**: Matlab - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-05 - **Last Updated**: 2025-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 水下机器人非线性模型预测控制 (NMPC) 路径跟踪控制系统 本项目实现了针对水下机器人的非线性模型预测控制算法,用于完成精确的路径跟踪控制任务。系统包含动力学模型、优化控制器设计以及完整的数据分析工具。 > [本项目报告](./docs/paper.pdf) 包含控制问题描述、六自由度航行器动力学建模和能控性分析、算法设计细节和仿真分析等详细内容 ### 项目特点 - 基于MATLAB/Simulink的水下机器人动力学仿真 - 实现了非线性模型预测控制算法 - 完整的轨迹生成与跟踪系统 - 多维度数据分析与可视化工具 ### 目录结构 ``` ├── analysis # 数据分析工具 ├── constraints # 控制约束定义 ├── costFcns # 成本函数定义 ├── logs # 文档与开发日志 ├── model # 水下机器人动力学模型 ├── reference # 参考轨迹生成模块 ├── DTsystem.m # 离散时间系统模型 ├── main.m # 主程序入口 ├── minimal_example.m # 最小示例代码 └── nmpc.m # NMPC核心算法实现 ``` ### 主要模块说明 #### 动力学模型 (model/) 包含水下机器人完整动力学模型,主要包括: - Coriolis # 科里奥利力计算 - Hydrodynamic_forces # 流体动力学计算 - Mass_and_inertia # 质量与惯性矩阵计算 - Restoring_forces # 恢复力计算 - Rotation # 旋转矩阵计算 - thruster # 推进器模型 - dynamicEquation.m # 动力学方程整合 #### 控制算法 (main.m, nmpc.m) - 基于优化的非线性模型预测控制 - 支持时域滚动优化 - 包含多种成本函数和约束条件 - 实时轨迹跟踪能力 #### 参考轨迹 (reference/) - genTraj.m # 轨迹生成函数 - refTrajectory.m # 参考轨迹插值计算 #### 数据分析 (analysis/) - dataProccess.m # 数据处理主程序 - drawGroupBars.m # 组合柱状图绘制 - rmse.m # 均方根误差计算 ### 运行说明 1. **环境要求** - MATLAB R2018a 或更高版本 - Optimization Toolbox - Symbolic Math Toolbox (可选) 2. **运行步骤** 1. 打开MATLAB并切换到本项目目录 2. 运行 `main.m` 文件 3. 程序将加载参数、初始化状态并启动NMPC控制器 4. 控制器将驱动水下机器人跟踪参考轨迹 5. 运行完成后会自动生成数据分析结果 3. **参数调整** - 在 `main.m` 中可以调整采样周期 `Ts` 和预测时域窗口宽度 `N` - 在 `parameters/` 目录下可以修改机器人参数和环境参数 ### 数据分析 分析工具位于 `analysis/` 目录,支持: - 均方根误差(RMSE)计算 - 标准差分析 - 时间段分段统计 - 多维运动状态可视化 - 组合柱状图展示 ### 开发日志 详见 `logs/DevLogs.md` 文件 ### 文档说明 - [模型离散化和仿真离散化的区别](logs/模型离散化和仿真离散化的区别.md) - 解释了为什么在NMPC中需要显式地进行模型离散化 - [可达性与能控性的区别](logs/可达性与能控性的区别.md) - 讨论了系统可控性相关概念的区别