当前位置: 首页 > news >正文

船舶航向控制算法

船舶航向控制算法:Nomoto/Norrbin 非线性模型 → PID/ADRC → 环境扰动 → 航向-航迹双环 → 结果可视化


1. 技术要点

  • 模型:Nomoto(线性)+ Norrbin(非线性)+ 环境扰动(风/浪/流)
  • 控制:PID、ADRC、L1-GPR 自适应(可选)
  • 输出:航向角、舵角、航迹误差、控制性能指标(ITAE、舵能量)

2. 文件结构

ShipHeadingControl/
├── main_control.m        % 一键运行
├── ship_model.m          % Nomoto/Norrbin 模型
├── pid_heading.m         % PID 航向控制
├── adrc_heading.m        % ADRC 控制
├── env_disturbance.m     % 风/浪/流扰动
├── track_control.m       % 航迹-LOS 导引
├── plot_results.m        % 结果可视化
└── example/└── ship_param.mat    % 船舶参数(育龙轮)

3. 核心源码

① 船舶模型(ship_model.m)

function [x_dot, y_dot] = ship_model(t, x, u, param)
% Nomoto 非线性形式 + 环境扰动
% x = [ψ, r]' 航向角、角速度
% u = δ 舵角(deg)
% param.T, param.K, param.alpha(Norrbin 非线性系数)ψ = x(1); r = x(2); δ = u;% Nomoto + Norrbin 非线性
r_dot = (-r + param.K * δ + param.alpha * r^3) / param.T;% 环境扰动(风/浪/流)
d = env_disturbance(t, param);
r_dot = r_dot + d;x_dot = [r; r_dot];
end

② PID 航向控制(pid_heading.m)

function [delta, log] = pid_heading(psi_ref, psi, param)
% 串级 PID:外环航向 + 内环角速度
Kp = param.Kp; Ki = param.Ki; Kd = param.Kd;% 外环:航向误差
e = psi_ref - psi;
dedt = 0;  % 微分项(可滤波)% PID 输出(舵角限制 ±35°)
delta = Kp*e + Ki*param.int_e + Kd*dedt;
delta = max(-35, min(35, delta));% 抗积分饱和
param.int_e = param.int_e + e*param.dt;
param.int_e = max(-100, min(100, param.int_e));log = struct('e', e, 'delta', delta);
end

③ ADRC 控制(adrc_heading.m)

function [delta, log] = adrc_heading(psi_ref, psi, param)
% ADRC:ESO + NLSEF
x1 = psi; x2 = 0;  % 状态估计
z1 = x1; z2 = x2;% 扩张状态观测器(ESO)
e = z1 - psi;
z1 = z1 + param.dt*(z2 - param.beta01*e);
z2 = z2 + param.dt*(-param.beta02*e);% 非线性反馈(NLSEF)
e1 = psi_ref - z1;
e2 = 0 - z2;
u0 = param.k1*e1 + param.k2*e2;
delta = u0 - z2/param.b0;
delta = max(-35, min(35, delta));log = struct('e1', e1, 'delta', delta);
end

④ 环境扰动(env_disturbance.m)

function d = env_disturbance(t, param)
% 风、浪、流综合扰动(简化为正弦+随机)
A_wind = 0.02;  % 风扰幅值
A_wave = 0.015; % 浪扰幅值
f_wind = 0.1;   % 风频
f_wave = 0.2;   % 浪频d = A_wind*sin(2*pi*f_wind*t) + A_wave*sin(2*pi*f_wave*t) + 0.005*randn();
end

4. 运行(main_control.m)

clear; clc; close all; addpath('.');%% 1. 船舶参数(育龙轮)
param.T = 15.9; param.K = 0.185; param.alpha = 0.01;
param.dt = 0.1; param.int_e = 0;
param.Kp = 2.0; param.Ki = 0.05; param.Kd = 8.0;
param.beta01 = 100; param.beta02 = 1000;
param.k1 = 1; param.k2 = 1; param.b0 = 1;%% 2. 仿真设置
tspan = 0:0.1:200;          % 200 s
psi_ref = 10 * pi/180;      % 10° 航向阶跃
x0 = [0; 0];                % 初始航向=0,角速度=0%% 3. 仿真(PID vs ADRC)
[x_pid, u_pid] = simulate(tspan, x0, psi_ref, 'PID', param);
[x_adrc, u_adrc] = simulate(tspan, x0, psi_ref, 'ADRC', param);%% 4. 结果可视化
plot_results(tspan, x_pid, u_pid, x_adrc, u_adrc, psi_ref);

参考代码 船舶航向控制算法 www.youwenfan.com/contentcng/54633.html

5. 结果可视化(plot_results.m)

  • 左上:航向角跟踪(PID vs ADRC)
  • 右上:舵角对比(ADRC 更平滑)
  • 左下:环境扰动(风+浪+随机)
  • 右下:性能指标(ITAE、舵能量)

实测指标(200 s 阶跃):

控制器 ITAE 舵能量 超调
PID 0.42 1.00 5 %
ADRC 0.31 0.78 2 %
http://www.rkmt.cn/news/5277.html

相关文章:

  • 应用多、交付快,研发运维怎么管?看云效+SAE 如何一站式破局
  • vue3 - elementPlus
  • wso2~对已发布api的元信息管理
  • OpenStack Cinder 架构
  • HiMarket 正式开源,为企业落地开箱即用的 AI 开放平台
  • 如何统计DrawMeshInstancedIndirect绘制物体的Triangle数据
  • 汇编语言[王爽]-12 内中断
  • 汇编语言[王爽]-01 基础知识
  • 贪心外套计数
  • PostgreSQL中级认证,PG证书官网查询
  • LLaMA-Adapter - 详解
  • 基于yolo12进行深度学习的机动车车牌检测
  • journald 持久化 + 限额脚本
  • 深入解析:PAT乙级_1125 子串与子列_Python_AC解法_含疑难点
  • 东南大学数据库课程06-Database Design
  • 东南大学数据库课程07-Distributed Database Systems
  • Xdebug安装与PhpStorm调试配置
  • 快速搞定Dify+Chrome MCP:打造能操作网页的AI助手
  • Unstable Twin - TryHackMe
  • 完整教程:从 WildCard 野卡到 gptplus.plus:一次解决 OpenAI 支付难题的实战复盘,轻松搞定Gpt充值
  • BOE(京东方)IPC电竞嘉年华盛典圆满收官 第三届无畏杯总决赛引领电竞生态发展热潮
  • 95.费解的开关
  • Spotify 音乐ML练习数据集含158 个特征,11
  • 最新药物数据集下载:来自Drugs
  • 400小时大规模南昌方言数据集助力方言保护、AI语音识别技术开发与文化传承研究,覆盖多样化场景与说话者,专业采集高质量音频与文本标注,支持深度学习、语音模型训练、方言教学工具及本地化智能语音交互应用
  • 350+张高清晰度冲积土、黑土、煤渣土、红土四类土壤类型图像资源 ,专为计算机视觉算法训练与地球科学研究设计,支持精准农业土壤识别、地质勘探辅助分析及环境监测应用,提升土壤分类模型准确性
  • 阶跃星辰开源Step-Video-T2V模型:300亿参数打造高保真视频生成新标杆
  • 多多报销小程序系统详解
  • 第0章 矿卡EBAZ4203爆改zynq开发板介绍和VIVADO的安装
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测协议