无人船/无人艇路径跟踪控制:Matlab/Simulink 效果探究
无人船/无人艇路径跟踪控制 Matlab/ Simulink效果 基于Foseen船舶模型,LOS制导子系统+反步控制器制作 LOS+backstepping; 注:采用ESO实现漂角/侧滑角估计
在无人船/无人艇的研究领域,路径跟踪控制是关键技术之一。今天咱就聊聊基于 Foseen 船舶模型,结合 LOS 制导子系统与反步控制器(LOS + backstepping),并通过 ESO 实现漂角/侧滑角估计的相关内容以及在 Matlab/Simulink 中的实现效果。
Foseen 船舶模型
Foseen 船舶模型为整个控制算法的搭建提供了基础框架。它模拟了真实船舶在水上航行时的各种动力学特性,比如船舶的运动响应、受力情况等。这就好比我们给无人船/艇搭建了一个虚拟的“身体”,后续的控制算法都是基于这个“身体”来发挥作用的。
LOS 制导子系统
LOS(Line - of - Sight)制导子系统的核心思想是通过计算船舶当前位置与目标路径之间的视线方向,来引导船舶驶向目标路径。简单来说,就像我们人走路看着目的地的方向走一样,LOS 给无人船/艇指明了大致的前进方向。
下面用一段简单的伪代码来模拟一下 LOS 计算的大致思路:
% 假设已知船舶当前位置(x,y),目标路径上的参考点(x_ref,y_ref)
delta_x = x_ref - x;
delta_y = y_ref - y;
theta_d = atan2(delta_y, delta_x); % 计算视线方向角
这段代码中,通过目标点与当前点的坐标差值,利用反正切函数 atan2 计算出视线方向角 theta_d。这个角度就是船舶应该朝着行驶的大致方向。
反步控制器
反步控制器(backstepping)是一种逐步设计控制器的方法。它从系统的期望输出开始,通过逐步引入虚拟控制量,最终设计出实际的控制器。在无人船/艇路径跟踪中,反步控制器根据 LOS 制导子系统给出的方向信息,结合船舶的动力学模型,精确地计算出船舶需要的控制输入,比如舵角、推进力等,使得船舶能够准确地沿着目标路径行驶。
假设我们有一个简化的船舶运动状态方程:
\[ \dot{x} = u \cos(\psi) \]
\[ \dot{y} = u \sin(\psi) \]

\[ \dot{\psi} = r \]
其中 \(x,y\) 是船舶位置,\(\psi\) 是航向角,\(u\) 是速度,\(r\) 是角速度。
反步控制器设计的第一步,我们定义一个虚拟控制量 \(\alpha_1\):
无人船/无人艇路径跟踪控制 Matlab/ Simulink效果 基于Foseen船舶模型,LOS制导子系统+反步控制器制作 LOS+backstepping; 注:采用ESO实现漂角/侧滑角估计
\[ \alpha1 = k1 (x_d - x) - u \cos(\psi) \]
这里 \(xd\) 是期望的 \(x\) 方向位置,\(k1\) 是一个增益系数。这个虚拟控制量 \(\alpha_1\) 的作用是让船舶在 \(x\) 方向朝着期望位置靠近。

然后在下一步设计实际的控制输入,假设控制输入为 \(u1\) 和 \(u2\)(分别对应推进力和舵角相关的控制量),通过反步设计的方法可以得到:
\[ u1 = k2 (\alpha_1 - \dot{x}) \]
\[ u2 = k3 (\psi_d - \psi) - r \]
这里 \(k2,k3\) 也是增益系数,\(\psi_d\) 是期望航向角。这样通过逐步设计,反步控制器就能有效地控制船舶的运动。
ESO 实现漂角/侧滑角估计
在实际航行中,漂角/侧滑角对于精确控制非常重要,但这个角度往往难以直接测量。这时就轮到 ESO(Extended State Observer)扩展状态观测器登场了。ESO 可以通过对船舶可测量的状态变量(如速度、加速度等)进行观测和估计,来得到漂角/侧滑角的近似值。
在 Matlab 中可以这样简单搭建一个 ESO 的框架(这只是一个高度简化的示意代码):
% 假设系统状态方程 x_dot = Ax + Bu + w
% y = Cx + v
A = [0 1; -1 -1];
B = [0; 1];
C = [1 0];
% ESO 增益矩阵
L = [10; 100];
% 初始化状态估计
x_hat = [0; 0];
for k = 1:length(time)
% 测量值
y = C * x + v(k);
% 状态估计更新
x_hat_dot = A * x_hat + B * u(k) + L * (y - C * x_hat);
x_hat = x_hat + x_hat_dot * dt;
% 这里可以通过对估计状态的进一步处理得到漂角/侧滑角估计值
end
在这段代码中,我们先定义了系统的状态方程矩阵 \(A\)、输入矩阵 \(B\) 和输出矩阵 \(C\)。然后设置 ESO 的增益矩阵 \(L\),通过不断地根据测量值 \(y\) 更新状态估计值 \(x_hat\),进而可以从估计状态中提取出漂角/侧滑角的估计信息。
Matlab/Simulink 效果展示
将上述的 Foseen 船舶模型、LOS 制导子系统、反步控制器以及 ESO 集成到 Matlab/Simulink 中进行仿真。在 Simulink 模型中,各个模块之间相互连接,形成一个完整的路径跟踪控制系统。
运行仿真后,我们可以直观地看到无人船/艇在设定的目标路径上行驶。通过调整各个模块的参数,比如 LOS 中的参考点距离、反步控制器的增益系数、ESO 的观测参数等,可以进一步优化路径跟踪的效果。例如,增大反步控制器中的某些增益系数,可能会使船舶更快地调整方向靠近目标路径,但同时也可能会导致系统响应过于剧烈。

总之,通过这种基于 Foseen 船舶模型,结合 LOS 制导子系统、反步控制器以及 ESO 的方法,在 Matlab/Simulink 中能够有效地实现无人船/无人艇的路径跟踪控制,为实际应用提供了有力的理论和仿真基础。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)