news 2026/4/16 15:55:30

无人船动态路径规划:遵循海事避碰规则的探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
无人船动态路径规划:遵循海事避碰规则的探索

无人船路径规划 动态路径规划,遵循海事避碰规则,显示船的航向角,避障点,复航点以及危险度

在无人船的应用场景中,路径规划无疑是核心技术之一。特别是动态路径规划,它要求无人船能够在航行过程中实时应对各种突发状况,同时严格遵循海事避碰规则,确保航行安全。本文就来探讨下如何实现这样的功能,并展示船的航向角、避障点、复航点以及危险度。

海事避碰规则的融入

海事避碰规则为海上航行的船舶提供了一套标准的行动指南,无人船自然也需要遵循。例如,规则规定在不同的会遇局面下,船舶应采取不同的避让行动。在代码实现中,我们可以通过定义不同的状态机来模拟这些规则。

class EncounterSituation: def __init__(self): self.situation_type = None def determine_situation(self, other_ship_info): # 根据其他船只的位置、航向等信息确定会遇局面 relative_bearing = calculate_relative_bearing(other_ship_info) if relative_bearing < 22.5 or relative_bearing > 157.5: self.situation_type = "head - on" elif relative_bearing < 112.5: self.situation_type = "crossing - starboard" else: self.situation_type = "crossing - port" def take_action(self): if self.situation_type == "head - on": # 采取各自向右转向的行动 self.turn_right() elif self.situation_type == "crossing - starboard": # 通常是让路船采取行动 if self.is_give_way_ship(): self.turn_away(other_ship) elif self.situation_type == "crossing - port": # 直航船通常保持航向和航速 if not self.is_give_way_ship(): self.maintain_course_speed()

这段代码定义了一个EncounterSituation类,通过determinesituation方法判断会遇局面,然后在takeaction方法中根据不同局面采取相应行动。这只是一个简单的示例,实际应用中需要更精确的计算和判断。

显示航向角、避障点、复航点及危险度

航向角

航向角是无人船航行方向与参考方向的夹角,对于无人船的路径规划至关重要。在代码中,我们可以通过传感器数据或者路径规划算法来实时更新航向角。

def calculate_heading_angle(current_position, next_position): dx = next_position[0] - current_position[0] dy = next_position[1] - current_position[1] heading_angle = math.atan2(dy, dx) return math.degrees(heading_angle)

这段代码通过当前位置和下一个目标位置计算出航向角,math.atan2函数可以根据坐标差值准确计算出角度,再通过math.degrees转换为度数。

避障点与复航点

当检测到障碍物时,无人船需要规划避障路径,确定避障点和复航点。

def find_obstacle_points(obstacle_position, ship_position, safety_radius): # 简单示例:以障碍物为圆心,安全半径为半径画圆,找到切线点作为避障点 distance = math.sqrt((obstacle_position[0] - ship_position[0]) ** 2 + (obstacle_position[1] - ship_position[1]) ** 2) if distance < safety_radius: # 计算切线向量 vector_to_obstacle = (obstacle_position[0] - ship_position[0], obstacle_position[1] - ship_position[1]) length_vector = math.sqrt(vector_to_obstacle[0] ** 2 + vector_to_obstacle[1] ** 2) unit_vector = (vector_to_obstacle[0] / length_vector, vector_to_obstacle[1] / length_vector) perpendicular_vector = (-unit_vector[1], unit_vector[0]) avoidance_point = (ship_position[0] + safety_radius * perpendicular_vector[0], ship_position[1] + safety_radius * perpendicular_vector[1]) # 假设复航点是在障碍物另一侧同样距离的点 recovery_point = (ship_position[0] + 2 * safety_radius * perpendicular_vector[0], ship_position[1] + 2 * safety_radius * perpendicular_vector[1]) return avoidance_point, recovery_point return None, None

这段代码根据障碍物位置、船的位置和安全半径来寻找避障点和复航点。这里只是一个简单的几何计算示例,实际应用中可能需要结合地图数据和更复杂的算法。

危险度计算

危险度可以综合考虑与障碍物的距离、其他船只的接近程度等因素。

def calculate_danger_level(obstacle_distance, other_ship_distance): obstacle_weight = 0.6 ship_weight = 0.4 obstacle_danger = 1 - (obstacle_distance / max_obstacle_distance) if obstacle_distance < max_obstacle_distance else 0 ship_danger = 1 - (other_ship_distance / max_ship_distance) if other_ship_distance < max_ship_distance else 0 danger_level = obstacle_weight * obstacle_danger + ship_weight * ship_danger return danger_level

上述代码根据与障碍物和其他船只的距离计算危险度,通过设置不同的权重来综合评估。当然,实际的危险度计算可能还需要考虑更多因素,如船只的速度、航向变化等。

无人船的动态路径规划是一个复杂但有趣的领域,需要融合海事规则、传感器数据处理和路径规划算法等多方面知识。通过不断优化代码和算法,我们可以让无人船在复杂的海上环境中更加安全、高效地航行。

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

基于微信小程序的停车场管理系统设计与实现选题表

咸阳师范学院本科毕业论文 (设计)学生选题审批表学生姓名学号2310212219专业、班级计算机学院指导教师唐云凯职称讲师工作单位计算机学院论文&#xff08;设计&#xff09;题目&#xff1a;基于微信小程序的停车场管理系统设计与实现课题领域类型&#xff1a;1.基础□ 2.应用…

作者头像 李华
网站建设 2026/4/16 13:02:45

官网文档看不懂?手把手带你玩转Open-AutoGLM GitHub代码库

第一章&#xff1a;官网文档看不懂&#xff1f;手把手带你玩转Open-AutoGLM GitHub代码库对于许多开发者而言&#xff0c;初次接触 Open-AutoGLM 项目时&#xff0c;官方文档的术语密集与结构复杂常令人望而却步。本章将跳过抽象描述&#xff0c;直接从 GitHub 仓库入手&#x…

作者头像 李华
网站建设 2026/4/16 13:06:58

网络安全体系化快速入门:一条通往精通与求职的学习路径

在当今高度数字化的时代&#xff0c;网络安全已经成为了一个至关重要的领域。随着网络威胁的不断演变和增长&#xff0c;对于专业网络安全人才的需求也在急剧上升。对于那些对网络安全充满热情并且渴望自学成才的人来说&#xff0c;制定一个系统、全面且高效的学习路线和规划是…

作者头像 李华
网站建设 2026/4/1 16:57:36

专科背景自学网络安全,成功上岸复盘:我的学习路径与避坑指南

小小大专&#xff0c;自不量力&#xff0c;自学网络安全到成功上岸。 给大家分享一下我的自学心酸历程以及我的学习经验&#xff0c;希望对正在或者准备学习网安的大家能有所帮助。 先给大家说说我的经历&#xff0c;我是17年毕业&#xff0c;普通专科通信专业。大学三年主要就…

作者头像 李华
网站建设 2026/4/15 18:11:47

一位过来人的网络安全自学忠告:附零基础体系学习路线与关键阶段

小小大专&#xff0c;自不量力&#xff0c;自学网络安全到成功上岸。 给大家分享一下我的自学心酸历程以及我的学习经验&#xff0c;希望对正在或者准备学习网安的大家能有所帮助。 先给大家说说我的经历&#xff0c;我是17年毕业&#xff0c;普通专科通信专业。大学三年主要就…

作者头像 李华