news 2026/4/17 14:00:32

探索船舶航向控制:基于Norrbin与Nomoto模型的PID与ADRC控制之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
探索船舶航向控制:基于Norrbin与Nomoto模型的PID与ADRC控制之旅

船舶航向控制 基于Norrbin或者Nomoto船舶模型 PID控制/ADRC控制 (2选一)

在船舶航行的广袤世界中,精确的航向控制犹如船只的“导航之星”,至关重要。今天咱们就一起来深入探讨基于Norrbin或者Nomoto船舶模型,运用PID控制以及ADRC控制实现船舶航向精准把控的奇妙过程。

Norrbin与Nomoto船舶模型简介

Norrbin模型

Norrbin模型是一种对船舶动力学进行描述的模型。它以一种较为简洁却有效的方式,捕捉船舶在水中运动时的关键特性。例如,它会考虑到船舶受到的水动力、舵角与船舶航向变化之间的关系等,通过一系列的数学公式来建立起模型,使得我们能够在理论层面模拟船舶的运动。

Nomoto模型

Nomoto模型同样赫赫有名,它基于船舶的一阶线性微分方程,对船舶的转向响应进行建模。简单来说,它能将船舶的转向动作,像一个具有惯性的系统那样进行描述,这对于我们理解船舶在不同舵角输入下如何改变航向提供了非常直观的视角。

PID控制在船舶航向控制中的应用

PID控制,即比例 - 积分 - 微分控制,是自动化控制领域的经典之作。在船舶航向控制中,它的原理也并不复杂。

假设我们设定一个目标航向 $\theta{d}$,当前船舶实际航向为 $\theta$。比例环节(P)的作用就像一个放大镜,它根据航向偏差 $e = \theta{d} - \theta$ 来成比例地输出控制信号。如果偏差大,输出就大,促使船舶快速向目标航向调整。

积分环节(I)则是负责处理系统中的稳态误差。想象一下,船舶在航行过程中可能会受到一些持续的干扰,比如水流的影响,这可能导致即使船舶一直在调整,但仍然与目标航向存在一个小偏差。积分环节就会将这个偏差随着时间进行累积,然后输出一个额外的控制信号,逐渐消除这个稳态误差。

微分环节(D)关注的是偏差的变化率。比如船舶已经接近目标航向,但速度过快,微分环节就能根据偏差变化的快慢,提前给出一个反向的控制信号,让船舶能够平稳地“停靠”在目标航向上,不至于冲过头。

船舶航向控制 基于Norrbin或者Nomoto船舶模型 PID控制/ADRC控制 (2选一)

下面咱们来看一段简单的Python代码来模拟基于Nomoto模型的船舶航向PID控制:

import numpy as np import matplotlib.pyplot as plt # Nomoto模型参数 K = 0.1 T = 2.0 # PID控制器参数 Kp = 0.5 Ki = 0.1 Kd = 0.2 # 时间参数 dt = 0.1 t = np.arange(0, 100, dt) # 初始化变量 theta = np.zeros(len(t)) theta_d = np.ones(len(t)) * np.pi / 4 # 目标航向45度 e = np.zeros(len(t)) e_integral = 0 e_derivative = 0 delta = np.zeros(len(t)) for i in range(1, len(t)): e[i] = theta_d[i] - theta[i - 1] e_integral += e[i] * dt e_derivative = (e[i] - e[i - 1]) / dt delta[i] = Kp * e[i] + Ki * e_integral + Kd * e_derivative theta[i] = theta[i - 1] + (K / T) * delta[i - 1] * dt - (1 / T) * theta[i - 1] * dt plt.plot(t, np.degrees(theta), label='实际航向') plt.plot(t, np.degrees(theta_d), label='目标航向') plt.xlabel('时间(s)') plt.ylabel('航向(度)') plt.legend() plt.show()

在这段代码中,我们首先定义了Nomoto模型的参数KT,以及PID控制器的参数KpKiKd。然后,通过循环不断计算当前的航向偏差e,积分项eintegral和微分项ederivative,进而得到舵角delta。再根据Nomoto模型更新船舶的实际航向theta。最后绘制出实际航向与目标航向随时间的变化曲线。

ADRC控制为船舶航向保驾护航

自抗扰控制(ADRC)是一种较为新颖且强大的控制策略。它的核心思想是将系统中的未知干扰和未建模动态看作一个“总扰动”,然后通过扩张状态观测器(ESO)对这个总扰动进行实时估计,并在控制律中给予补偿,从而实现对系统的有效控制。

在船舶航向控制场景下,ADRC有着独特的优势。船舶在航行时,会面临各种各样复杂的干扰,像风浪、水流等,这些干扰的精确建模几乎是不可能的。ADRC就能够自适应地处理这些不确定因素,使得船舶航向控制更加鲁棒。

以下是一个简单的基于Norrbin模型的ADRC控制Python代码框架(为简化,仅展示关键部分):

# 假设Norrbin模型相关参数 # 这里简单示意,实际参数需更精确测定 a1 = -0.5 a2 = -0.3 b0 = 0.2 # ADRC参数 beta01 = 30 beta02 = 100 beta03 = 1000 beta1 = 0.5 beta2 = 0.05 # 初始化状态和估计状态 x1 = 0 x2 = 0 z1 = 0 z2 = 0 z3 = 0 # 假设的目标航向 theta_d = np.pi / 4 for _ in range(some_iterations): # 计算扩张状态观测器 e1 = x1 - z1 z1_dot = z2 - beta01 * e1 z2_dot = z3 - beta02 * e1 + b0 * u z3_dot = -beta03 * e1 z1 += z1_dot * dt z2 += z2_dot * dt z3 += z3_dot * dt # 计算非线性状态误差反馈控制律 e2 = theta_d - z1 u0 = beta1 * e2 - beta2 * z2 u = (u0 - z3) / b0 # 更新船舶状态 x1_dot = x2 x2_dot = a1 * x1 + a2 * x2 + b0 * u x1 += x1_dot * dt x2 += x2_dot * dt

在这段代码框架里,我们先设定了Norrbin模型的一些假设参数,以及ADRC中的关键参数,如扩张状态观测器的参数beta01beta02beta03等。通过循环不断更新扩张状态观测器对系统状态和总扰动的估计z1z2z3,然后根据估计值计算出控制律u,并更新船舶的实际状态x1x2,以此来实现船舶航向的控制。

无论是基于经典的PID控制,还是更具适应性的ADRC控制,在船舶航向控制这个大舞台上,它们都凭借自身独特的优势,为船舶在茫茫大海中指引着精确的航向,确保航行的安全与高效。未来,随着技术的不断发展,相信船舶航向控制技术会更加先进和智能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 21:34:18

揭秘:数字X射线平板探测器市场规模突破130.9亿元大关

2025 - 2032全球数字X射线平板探测器市场:规模增长与产业变革 据恒州诚思调研统计,2025年全球数字X射线平板探测器市场规模约130.9亿元,预计未来将持续保持平稳增长态势,到2032年市场规模将接近189.8亿元,未来六年复合…

作者头像 李华
网站建设 2026/4/17 16:43:41

2026版Java 面试八股文(总结最全面的面试题)

作为 Java 程序员,选择学习什么样的技术?什么技术该不该学?去招聘网站上搜一搜、看看岗位要求就十分清楚了,自己具备的技术和能力,直接影响到你工作选择范围和能不能面试成功。 如果想进大厂,那就需要在 Ja…

作者头像 李华
网站建设 2026/4/18 10:52:59

Linux版本的基本概念和主要发行版

我来为您详细介绍Linux的版本概念和主要发行版。 📌 首先需要理解的两个关键概念: 1. Linux内核版本 由Linus Torvalds团队维护的核心系统 版本号格式:主版本.次版本.修订号(如:6.8.1) 所有Linux发行版都使用相同的内核 2. Linux发行版(Distribution) 基于Linux内核…

作者头像 李华