news 2026/6/25 2:28:34

海豚1船舶自主靠离泊MPC控制算法与试验【附程序】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
海豚1船舶自主靠离泊MPC控制算法与试验【附程序】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,可以私信,或者点击《获取方式》


(1)基于二阶贝塞尔曲线的平滑靠泊路径规划与卡尔曼滤波状态观测器:

根据码头泊位环境和船舶运动约束,提出先跟踪靠泊路径至泊位外、后平行靠泊的两段式方案。靠泊路径采用二阶贝塞尔曲线生成,控制点选择泊位外侧正横位置、转向点和泊位内部中点,保证曲率连续平滑。路径曲率半径最小值控制在2倍船长以上以避免急转弯。同时,利用卡尔曼滤波器设计船舶状态观测器,从GPS和惯导数据中滤除一阶波浪力引起的高频振荡。状态向量包含低频位置、速度及高频分量,观测器通过截止频率0.05Hz分离低频运动。海试数据表明,滤波后位置噪声标准差由0.8m降至0.12m,提高了控制精度。

(2)模型预测控制与推力分配二次规划的实现:

船舶三自由度运动模型考虑风浪流环境力,线性化后作为MPC预测模型。MPC采用预测时域40s,控制时域15s,权重矩阵Q和R通过逆向优化设计调定。在每个控制周期求解带约束二次规划,约束包括舵角限幅±35°、推进器推力限幅±80kN,以及安全边界约束。推力分配问题转化为标准二次规划,目标函数兼顾推力误差最小、能耗最小和避免奇异结构。采用有效集法实时求解,经优化后总推力误差<1%。MATLAB仿真验证,在6级风干扰下,MPC控制器船舶轨迹偏离计划航线误差小于0.3m,而串级PID误差为1.2m。推力分配满足全回转推进器角度变化率约束,无推力饱和。

(3)实船试验与毫米波雷达泊位探测系统中的网格密度降噪算法:

依托海豚1试验船在青岛码头进行自主靠离泊试验。开发泊位探测软件,接入毫米波雷达,提出网格密度与RCS双重降噪法:将雷达点云投影到水平面建立0.5m×0.5m网格,统计每个网格内点数作为密度,滤除密度低于5的网格,同时根据RCS阈值滤除弱小目标,保留码头轮廓。再利用直线特征提取算法识别泊位边缘直线。试验过程中,泊位探测系统成功识别5m宽的泊位,探测距离80m。MPC控制器接收到泊位信息后,船舶平稳靠泊,横向接触速度仅为0.08m/s,小于规范要求的0.15m/s。全程无人操控,验证了算法的工程实用性。

import numpy as np from scipy.linalg import block_diag import cvxpy as cp import control # 贝塞尔曲线路径生成 def bezier_curve(p0, p1, p2, num_points=100): t = np.linspace(0,1,num_points) path = np.outer((1-t)**2, p0) + np.outer(2*(1-t)*t, p1) + np.outer(t**2, p2) return path # 卡尔曼滤波器状态观测器 class KalmanObserver: def __init__(self, A, B, C, Q, R): self.A = A; self.B = B; self.C = C; self.Q = Q; self.R = R self.x_est = np.zeros(A.shape[0]); self.P = np.eye(A.shape[0]) def update(self, u, y, dt): A_d = np.eye(len(self.x_est)) + self.A*dt # 预测 self.x_est = A_d@self.x_est + self.B*dt*u self.P = A_d@self.P@A_d.T + self.Q*dt # 更新 K = self.P@self.C.T @ np.linalg.inv(self.C@self.P@self.C.T + self.R) self.x_est += K @ (y - self.C@self.x_est) self.P = (np.eye(len(self.x_est))-K@self.C) @ self.P return self.x_est # MPC控制器 def mpc_ship_control(x0, ref_traj, A, B, Np=40, Nc=15): # 构建QP x = cp.Variable((3, Np+1)) u = cp.Variable((2, Nc)) cost = 0; constraints = [x[:,0] == x0] for k in range(Np): cost += cp.sum_squares(x[:,k]-ref_traj[:,k]) if k < Nc: cost += 0.01*cp.sum_squares(u[:,k]) constraints += [x[:,k+1] == A@x[:,k] + B@u[:,k]] else: constraints += [x[:,k+1] == A@x[:,k]] constraints += [cp.abs(u) <= [80e3, np.deg2rad(35)]] prob = cp.Problem(cp.Minimize(cost), constraints) prob.solve(solver='OSQP') return u[:,0].value # 网格密度降噪 def grid_density_filter(points, grid_size=0.5, min_points=5): min_x, min_y = points.min(axis=0); max_x, max_y = points.max(axis=0) grid = {} for p in points: i = int((p[0]-min_x)//grid_size); j = int((p[1]-min_y)//grid_size) grid[(i,j)] = grid.get((i,j),0)+1 filtered = [p for p in points if grid.get((int((p[0]-min_x)//grid_size), int((p[1]-min_y)//grid_size)),0) >= min_points] return np.array(filtered)

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

开发AI应用时如何利用Taotoken实现按Token计费与成本控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI应用时如何利用Taotoken实现按Token计费与成本控制 对于个人开发者和初创公司而言&#xff0c;在构建和运营AI应用时&#x…

作者头像 李华
网站建设 2026/6/25 3:48:59

《深入浅出通信原理》连载081-085

连载081&#xff1a;矩形脉冲调制余弦载波&#xff08;三&#xff09;连载082&#xff1a;矩形脉冲信号调制余弦载波&#xff08;四&#xff09;连载083&#xff1a;正负脉冲的幅度谱和相位谱注&#xff1a;1、频谱图上每个频率对应的频谱值&#xff08;傅立叶变换&#xff09;…

作者头像 李华
网站建设 2026/6/25 3:46:13

CIFAR10彩色图片识别

CIFAR10彩色图片识别 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录CIFAR10彩色图片识别前言一、准备工作1.项目环境2.设置CPU3.下载数据集3.加载数据集4.从数据集里取一个批次的图片和标签&#…

作者头像 李华
网站建设 2026/5/9 22:47:05

AI监管政策分析框架:从技术不确定性到全球治理的合规导航

1. 项目概述&#xff1a;当AI撞上“红绿灯”最近和几个做AI产品落地的朋友聊天&#xff0c;大家不约而同地提到了同一个词&#xff1a;合规。以前我们聊的都是模型精度、算力成本、用户增长&#xff0c;现在话题的焦点变成了“这个功能会不会触发监管红线”、“数据跨境怎么处理…

作者头像 李华
网站建设 2026/5/9 22:46:47

CANN电力负荷预测算子库

【免费下载链接】elec-ops-prediction elec-ops-prediction 是 CANN 社区 Electrical Engineering SIG&#xff08;电力行业兴趣小组&#xff09;旗下的电力负荷预测算子库&#xff0c; 聚焦于电力系统运行、调度、规划与市场交易中的预测核心需求&#xff0c;面向华为昇腾&…

作者头像 李华