news 2026/10/13 9:28:47

基于人工势场法的船舶自动避碰系统MATLAB实现之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于人工势场法的船舶自动避碰系统MATLAB实现之旅

基于人工势场法的船舶自动避碰系统,MATLAB代码实现,生成避障转角信息和gif动图。

在航海领域,船舶自动避碰系统至关重要,它关乎航行安全。人工势场法作为一种经典算法,在避碰系统中有广泛应用。今天咱就来聊聊基于人工势场法的船舶自动避碰系统,并用MATLAB实现它,还会生成避障转角信息和超酷的gif动图。

人工势场法原理简述

人工势场法将船舶周围环境视为一种势场。目标点产生引力势场,吸引船舶靠近;障碍物产生斥力势场,阻止船舶靠近。船舶就像在这个势场中受合力作用的质点,合力指引其运动方向,进而实现避碰。

MATLAB代码实现

初始化参数

% 定义目标点位置 target_x = 100; target_y = 100; % 定义障碍物位置 obstacle_x = [50]; obstacle_y = [50]; % 船舶初始位置 ship_x = 0; ship_y = 0; % 引力系数 k_att = 0.1; % 斥力系数 k_rep = 100; % 安全距离 d0 = 10; % 步长 step_size = 1;

这里定义了系统运行所需的关键参数,像目标点、障碍物位置,船舶初始位置这些是系统运行的起始状态设定。引力系数katt和斥力系数krep决定了引力和斥力的相对强度,安全距离d0界定了船舶与障碍物的安全范围,步长step_size则表示每次船舶移动的距离。

计算引力和斥力

while true % 计算引力 dist_to_target = sqrt((target_x - ship_x)^2 + (target_y - ship_y)^2); force_att_x = k_att * (target_x - ship_x) / dist_to_target; force_att_y = k_att * (target_y - ship_y) / dist_to_target; % 计算斥力 force_rep_x = 0; force_rep_y = 0; for i = 1:length(obstacle_x) dist_to_obstacle = sqrt((obstacle_x(i) - ship_x)^2 + (obstacle_y(i) - ship_y)^2); if dist_to_obstacle < d0 force_rep_x = force_rep_x + k_rep * (1/dist_to_obstacle - 1/d0) * (1/dist_to_obstacle^2) * (ship_x - obstacle_x(i)); force_rep_y = force_rep_y + k_rep * (1/dist_to_obstacle - 1/d0) * (1/dist_to_obstacle^2) * (ship_y - obstacle_y(i)); end end % 计算合力 total_force_x = force_att_x + force_rep_x; total_force_y = force_att_y + force_rep_y;

在这个循环里,每次迭代都重新计算引力和斥力。先根据目标点与船舶当前位置计算引力,距离越远引力越大且方向指向目标点。再对每个障碍物计算斥力,只有当船舶与障碍物距离小于安全距离d0时斥力才起作用,距离越近斥力越大且方向远离障碍物。最后将引力和斥力在x和y方向上分别相加得到合力。

更新船舶位置与计算避障转角

% 更新船舶位置 ship_x = ship_x + step_size * total_force_x / sqrt(total_force_x^2 + total_force_y^2); ship_y = ship_y + step_size * total_force_y / sqrt(total_force_x^2 + total_force_y^2); % 计算避障转角 current_direction = atan2(ship_y, ship_x); new_direction = atan2(total_force_y, total_force_x); turn_angle = new_direction - current_direction; % 记录船舶位置和转角信息 positions_x(end+1) = ship_x; positions_y(end+1) = ship_y; turn_angles(end+1) = turn_angle; % 判断是否到达目标点 if dist_to_target < step_size break; end end

利用合力来更新船舶位置,船舶沿着合力方向移动一个步长。通过当前船舶方向和合力方向计算避障转角turn_angle,并记录船舶位置和转角信息。当船舶与目标点距离小于步长时,认为船舶到达目标点,结束循环。

生成gif动图

% 生成gif动图 fig = figure; axis([0 120 0 120]); hold on; plot(target_x, target_y, 'go', 'MarkerSize', 10); for i = 1:length(obstacle_x) plot(obstacle_x(i), obstacle_y(i), 'ro', 'MarkerSize', 10); end for i = 1:length(positions_x) plot(positions_x(i), positions_y(i), 'bo', 'MarkerSize', 5); if i > 1 line([positions_x(i-1) positions_x(i)], [positions_y(i-1) positions_y(i)], 'Color', 'b'); end drawnow; frame = getframe(fig); im = frame2im(frame); [imind,cm] = rgb2ind(im,256); if i == 1 imwrite(imind,cm,'ship_avoidance.gif','gif', 'LoopCount',inf,'DelayTime',0.1); else imwrite(imind,cm,'ship_avoidance.gif','gif','WriteMode','append','DelayTime',0.1); end end hold off;

这部分代码用于生成船舶航行过程的gif动图。先创建图形窗口并设置坐标轴范围,标记出目标点和障碍物。然后随着船舶位置更新,依次绘制船舶位置并连线,每更新一次位置就抓取一帧画面,转换为索引图像后写入gif文件,最终生成动图直观展示船舶避碰过程。

基于人工势场法的船舶自动避碰系统,MATLAB代码实现,生成避障转角信息和gif动图。

通过以上MATLAB代码,我们成功实现了基于人工势场法的船舶自动避碰系统,不仅能得到避障转角信息,还能用gif动图生动呈现避碰过程。希望这篇分享能给对船舶避碰或算法实现感兴趣的小伙伴们一些启发!

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

唐山三岛潮汐表查询2026-02-05

位置&#xff1a;唐山三岛&#xff0c;日期&#xff1a;2026-02-05&#xff0c;农历&#xff1a;乙巳[蛇]年十二(腊)月十八&#xff0c;星期&#xff1a;星期四&#xff0c;潮汐类型&#xff1a;最大活汛最高水位&#xff1a;181.00cm&#xff0c;最低水位&#xff1a;39.00cm&…

作者头像 李华
网站建设 2026/10/10 0:16:17

SEW变频器MDV60A1320-5A3-4-00

孙13665068812SEW 变频器 MDV60A1320-5A3-4-00 详细介绍 1. 概述 SEW MDV60A1320-5A3-4-00 是一款属于 SEW-EURODRIVE 旗下 MOVITRAC B 系列通用型变频器&#xff08;频率逆变器&#xff09;。该系列变频器以其坚固耐用、高性价比、功能丰富且易于使用而闻名&#xff0c;广泛…

作者头像 李华
网站建设 2026/10/7 18:34:37

AI 心理健康|传统文化与 AI 融合的高校本土心理测评室方案

一、引言 1.1 高校心理健康测评的现实困境&#xff1a;重 "西" 轻 "中" 的水土不服 在当前我国高校心理健康教育领域&#xff0c;对西方早期量表的依赖问题较为突出&#xff0c;像 SCL-90、SAS 等量表被广泛应用。然而&#xff0c;这些量表诞生于西方个体…

作者头像 李华
网站建设 2026/10/9 8:24:10

如何高效的长时间运行智能体

原文标题&#xff1a;Effective harnesses for long-running agents原文作者&#xff1a;Justin Young原文地址&#xff1a;https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents智能体在跨多个上下文窗口持续工作时&#xff0c;依然面临不少挑…

作者头像 李华
网站建设 2026/10/7 13:00:48

虚拟测试伙伴:生成式AI在探索式测试中的实时场景扩展工具

AI驱动探索式测试的革新浪潮‌ 探索式测试强调测试人员实时设计用例&#xff0c;但传统方法受限于人脑创意瓶颈&#xff0c;导致覆盖率不足和效率低下。2026年&#xff0c;生成式AI作为“虚拟测试伙伴”崛起&#xff0c;通过自然语言处理和机器学习&#xff0c;动态扩展测试场…

作者头像 李华