news 2026/7/7 13:08:04

船舶航向控制相关探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
船舶航向控制相关探索

船舶航向控制 MATLAB程序+《文献》 无人艇航向控制 USV 1.基于CDM积分状态反馈控制的船舶航向控制 2.基于粒子群PSO优化下KT模型船舶航向PID控制

最近在研究船舶航向控制,尤其是无人艇航向控制这块,感觉还挺有意思的😃。

基于CDM积分状态反馈控制的船舶航向控制

先来说说基于CDM积分状态反馈控制的船舶航向控制。这种控制方法在船舶航向控制中有着独特的优势。

在MATLAB里实现这个控制算法,代码大概是这样的:

% 定义一些参数 Kp = 0.5; Ki = 0.1; Kd = 0.05; % 这里的Kp、Ki、Kd是比例、积分、微分系数,它们对控制效果起着关键作用 % 比如Kp大,响应会快但可能超调大;Ki大,能消除稳态误差但可能使系统不稳定;Kd大,能抑制超调但响应速度可能变慢 % 假设一些初始状态 theta_0 = 0; % 初始航向角 theta_dot_0 = 0; % 初始航向角速度 % 模拟时间 tspan = 0:0.01:10; % 状态方程定义 function dydt = ship_ode(t,y) theta = y(1); theta_dot = y(2); % 这里定义了状态方程,根据船舶动力学原理来的 % 比如theta_dot的变化率会受到输入控制和船舶自身动力学特性影响 u = Kp*(theta_d - theta) + Ki*integral(theta_d - theta) + Kd*(theta_dot_d - theta_dot); dydt = [theta_dot; -sin(theta)*u]; end % 定义目标航向 theta_d = pi/4; % 目标航向为45度 theta_dot_d = 0; % 目标航向角速度为0 % 初始状态向量 y0 = [theta_0; theta_dot_0]; % 求解ode [t,y] = ode45(@ship_ode,tspan,y0); % 绘图 figure; plot(t,y(:,1)); xlabel('Time (s)'); ylabel('Heading Angle (rad)'); title('CDM Integral State Feedback Control for Ship Heading');

代码分析来啦🧐。这段代码首先定义了控制参数Kp、Ki、Kd,这些参数就像是控制船舶航向的“小魔法师”🧙‍♂️,它们的不同取值会让船舶的响应有很大差异。然后假设了初始状态,包括初始航向角和初始航向角速度。接着定义了状态方程ship_ode,这里面根据船舶动力学把航向角和航向角速度的变化率都考虑进去了,而且通过输入控制u来调整,u是由目标航向和当前状态的误差经过比例、积分、微分运算得到的。最后求解ode并绘图展示船舶航向随时间的变化。

基于粒子群PSO优化下KT模型船舶航向PID控制

再看看基于粒子群PSO优化下KT模型船舶航向PID控制。这个方法结合了粒子群优化算法来优化PID参数,让控制效果更棒😎。

在MATLAB里实现的代码如下:

% 粒子群优化参数 n_particles = 50; % 粒子数量 max_iter = 100; % 最大迭代次数 c1 = 1.5; % 学习因子1 c2 = 1.5; % 学习因子2 w = 0.7; % 惯性权重 % 初始PID参数范围 Kp_min = 0.1; Kp_max = 2; Ki_min = 0.01; Ki_max = 0.5; Kd_min = 0.001; Kd_max = 0.1; % 初始化粒子位置 particles = [Kp_min+(Kp_max-Kp_min)*rand(n_particles,1),... Ki_min+(Ki_max-Ki_min)*rand(n_particles,1),... Kd_min+(Kd_max-Kd_min)*rand(n_particles,1)]; % 定义适应度函数(这里简单用均方误差衡量) function fitness = pso_fitness(Kp,Ki,Kd) % 假设一些模拟的目标航向和实际航向数据 theta_d = [pi/4, pi/3, pi/6]; % 目标航向 theta = [0.2, 0.1, 0.05]; % 实际航向 u = Kp*(theta_d - theta) + Ki*cumsum(theta_d - theta) + Kd*(diff(theta_d) - diff(theta)); % 这里计算控制输入u,和前面类似但用了累积误差等 error = mean((theta_d - theta).^2); fitness = error; end % 粒子群优化过程 for iter = 1:max_iter % 计算适应度 fitness_values = arrayfun(@(p) pso_fitness(p(1),p(2),p(3)), particles); [min_fitness, min_index] = min(fitness_values); best_particle = particles(min_index,:); % 更新速度和位置 r1 = rand(n_particles,1); r2 = rand(n_particles,1); velocity = w*[Kp_min+(Kp_max-Kp_min)*rand(n_particles,1),... Ki_min+(Ki_max-Ki_min)*rand(n_particles,1),... Kd_min+(Kd_max-Kd_min)*rand(n_particles,1)]; velocity = c1*r1.*(best_particle - particles) + c2*r2.*(repmat(best_particle,n_particles,1) - particles); particles = particles + velocity; % 边界处理 particles(:,1) = max(particles(:,1),Kp_min); particles(:,1) = min(particles(:,1),Kp_max); particles(:,2) = max(particles(:,2),Ki_min); particles(:,2) = min(particles(:,2),Ki_max); particles(:,3) = max(particles(:,3),Kd_min); particles(:,3) = min(particles(:,3),Kd_max); end % 得到优化后的PID参数 optimal_Kp = best_particle(1); optimal_Ki = best_particle(2); optimal_Kd = best_particle(3); % 这里用优化后的参数可以再进行实际的船舶航向控制模拟等操作,就不细写啦

代码分析来咯😜。这段代码先设置了粒子群优化的参数,像粒子数量、最大迭代次数、学习因子、惯性权重等。然后初始化了PID参数的范围,随机生成粒子位置。接着定义了适应度函数pso_fitness,通过计算目标航向和实际航向的误差来衡量控制效果。在粒子群优化过程中,不断计算适应度,更新速度和位置,同时进行边界处理,保证参数在合理范围内。最后得到优化后的PID参数,就可以用这些参数去更好地控制船舶航向啦。

通过这两种方法的研究,感觉在船舶航向控制领域还有很多可以探索的地方呢🤓。希望能和大家一起交流交流,看看还有啥新的想法和发现😃。

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

L1-031到底是不是太胖了

1.输入并计算出真实体重与标准体重的差值的绝对值。这里用到了abs()函数来求绝对值。n int(input()) for _ in range(n):h, w map(int, input().split())# 计算标准体重(公斤)standard_kg (h - 100) * 0.9# 真实体重转换为公斤(市斤转公斤…

作者头像 李华
网站建设 2026/7/7 12:32:05

从 nvm 到 fnm:一个前端老兵的版本管理工具迁移实录

引子:那个让我崩溃的早晨某个周一早晨,我像往常一样打开终端准备开始工作。# 打开 iTerm2... 等待... 等待... # 终于出现命令提示符,耗时 2.3 秒接着切换到一个需要 Node 16 的老项目:$ nvm use 16 Now using node v16.20.2 (npm…

作者头像 李华
网站建设 2026/7/7 8:24:13

Java AI工具箱终极指南:免费离线AI算法一站式解决方案

Java AI工具箱终极指南:免费离线AI算法一站式解决方案 【免费下载链接】SmartJavaAI Java免费离线AI算法工具箱,支持人脸识别(人脸检测,人脸特征提取,人脸比对,人脸库查询,人脸属性检测:年龄、性…

作者头像 李华
网站建设 2026/7/6 14:38:37

3DS系统终极升级指南:从A9LH平稳迁移到B9S

3DS系统终极升级指南:从A9LH平稳迁移到B9S 【免费下载链接】Guide_3DS A complete guide to 3DS custom firmware, from stock to boot9strap. 项目地址: https://gitcode.com/gh_mirrors/gu/Guide_3DS 项目概述与升级价值 你是否还在使用老旧的A9LH系统&am…

作者头像 李华
网站建设 2026/7/7 10:07:39

mysql的快照读和当前读

在 MySQL InnoDB 存储引擎中,快照读(Snapshot Read) 和 当前读(Current Read) 是两种核心的读操作模式,二者的设计目标、实现方式、加锁行为和适用场景截然不同,其中快照读是 MVCC 机制的核心体…

作者头像 李华