突破性算法:让无人机集群在狭窄空间内穿针引线

news2024/11/27 21:34:04
导读

在建筑救援、森林搜索等任务中,无人机集群经常会遇到狭窄空间限制和动态障碍物变化等挑战。这些挑战会导致集群内部冲突,或在执行任务时因避让动态障碍物而导致系统混乱。实际应用场景和任务的严格特征往往使得全局搜索难以优化,而局部避障容易陷入僵局。为解决上述问题,本文提出了一种受全局时空路径启发的分层在线协同规划框架。

为了在化解整体冲突的同时降低求解复杂度,系统首先进行全局粗略搜索以获得初始时空指导路径。为了在不影响系统内部和谐的情况下克服动态障碍物,系统执行基于初始路径启发的在线冲突趋势聚类协同优化,以实现避障同时提高可扩展性。

本文在包含狭窄管道和动态障碍物的仿真环境中进行了实验测试,并与目前主流的集中式和分布式方法进行了对比。结果表明,本文提出的方法能在约束丰富的动态环境中生成更平滑、更安全的轨迹,并具有更高的成功率。©️【深蓝AI】编译

1.  研究背景和相关工作

无人机集群具有高效覆盖大面积区域和协同执行多样化任务的能力。它们已被应用于搜索与救援、地图绘制、森林火灾监测、农业以及其他多种任务中。然而在实际应用中,无人机集群经常会遇到空间受限和动态环境的挑战,特别是在塌陷建筑物或工厂内进行搜救任务时。这给集群安全高效规划轨迹带来了重大挑战。

图1:无人机飞行场景©️【深蓝AI】编译

首先,可通行空间的受限增加了无人机之间发生冲突的可能性。例如,当穿过狭窄孔洞时,无人机必须依次通过以避免碰撞。此外,当在类似管道或走廊等环境结构中导航时,横向机动能力受到限制,这增加了相互碰撞的风险。

其次,无人机的飞行轨迹需要满足多种标准,包括平滑性、动力学可行性以及无人机动力学特性等。因此,轨迹规划相关的优化约束变得更加复杂,这使得问题更难求解。

最后,环境的动态性以及无人机定位的固有漂移,突出了无人机实时重规划的必要性。这种能力对于实现动态避障和提高无人机的容错能力至关重要。

现有的多智能体路径规划(MAPF)算法,主要针对障碍物较少的场景,可以分为集中式和分布式两种方法。

在集中式方法中,Sharon等人提出了基于冲突的搜索(CBS)算法,而Barer等人则在CBS基础上提出了诸如GCBS、BCBS和ECBS等次优方法,以提高搜索速度。这些算法依赖网格地图来在离散时间间隔内计算多个智能体的安全无碰撞路径。然而,基于网格的方法得到的路径未能考虑系统的动力学、运动学和平滑性约束,因此不适合在实际应用中直接执行。为解决这个问题,作者之前的工作通过在CBS算法的低层搜索中集成3D混合A*算法进行了改进。这种方法利用无人机运动学和动力学约束,促进了直接可执行的多重轨迹的生成。然而,这种方法在搜索时表现出效率低下,特别是在受约束的环境中。此外,在可扩展性和动态避障性能方面还需要改进。

对于分布式方法,相关文献提出了基于速度障碍的轻量级方法,这些方法在速度空间中寻找满足轨迹约束的可行解。然而,这种方法中的智能体使用统一的避障策略,每个智能体独立做出规划决策而没有中央协调。这一特征使得该方法容易在受限空间内的大规模群体规划任务中陷入死锁。Zhou等人提出了一种完全自主的分布式EGO-Swarm算法,采用优先级方法来解决无人机之间的冲突,并通过求解具有高可扩展性的非线性优化问题来设计轨迹。然而,由于在优化过程中使用软约束,这种方法不能保证智能体的安全。此外,在狭窄管道等环境中,仅依靠个体本地化信息进行规划可能导致无人机飞行策略频繁改变,如紧急避障和寻找可通行的交叉口。这可能产生曲率过大的飞行轨迹,从而对从事视觉相关任务的无人机产生不利影响。

此外,为实现动态避障,已有文献通过将动态障碍物的预测轨迹投影到静态障碍物地图上构建时空概率图。随后基于这些时空概率图进行轨迹规划。然而,动态障碍物的运动本质上具有不确定性。为解决这个问题,相关研究将随机避碰建模为机会约束优化问题,提出了基于有界体积扩张的避碰方法。然而,这些方法要么过于保守,要么由于概率建模中的不确定性而增加算法的复杂性。

2.  系统概述

本文做出如下假设:地图是先验信息,其中\mathcal{O}表示静态障碍物占据的空间,\mathcal{F}表示自由空间。考虑有\mathcal{N_u}个无人机和\mathcal{N_{dyn}}个动态障碍物,每个无人机都能获得其他无人机和动态障碍物的实时位置信息。本文的目标是在自由空间中为无人机集群找到满足轨迹约束的无碰撞飞行轨迹。

本文结合了集中式和分布式路径规划框架的优势。如图2所示,整个系统框架主要包含两个模块:全局规划和局部规划。

图2:系统框架©️【深蓝AI】编译

全局规划使用基于网格的地图作为先验知识,系统在简化建模且不考虑动态障碍物的情况下,通过ECBS算法为每个无人机搜索从起点到终点的无碰撞路径。这条路径作为初步的全局参考路径,用于指导后续的局部规划。这使得无人机能够避免陷入死锁或被困在死胡同中。

局部规划系统进行精确的实时重规划,以准确避开静态和动态障碍物,确保无人机轨迹无碰撞。局部规划过程包括以下几个步骤:

(1)  基于全局参考轨迹和当前无人机位置,为未来一段时间生成局部初始路径。这个初始路径由多个离散的三维位置点组成。

(2) 基于障碍物分布和初始路径,为每个无人机生成安全走廊。

(3) 基于无人机之间安全走廊的冲突趋势,将集群迭代分类为多个组。

(4)  当从预测模块获得未来动态障碍物轨迹预测结果后,通过构建包含约束的凸优化问题,对同一组内的无人机进行协同实时重规划。

通过这种分层框架,系统能够在保证安全性的同时,实现高效的路径规划。全局规划提供整体导航指导,而局部规划则确保实时的避障能力和轨迹可行性。这种结构充分利用了集中式方法的全局优化能力和分布式方法的实时性与灵活性。

3.  解决方案

3.1 全局冲突解决

受到集中式规划方法在无死锁方面优势的启发,该框架首先执行一个粗略的全局冲突解决过程来获得全局参考路径。在作者之前的工作中,尝试将无人机的运动学模型集成到ECBS算法的底层搜索中。实验表明,这种方法能生成更平滑的轨迹,但代价是增加了搜索时间。在本文中,由于全局参考路径仅作为方向性参考,因此将使用不包含运动学模型的ECBS搜索算法,并进一步简化其物理和碰撞模型以缩短搜索时间。

参考路径在网格地图上的搜索包括两个层次:高层搜索和低层搜索。在高层搜索中,检查无人机之间路径的冲突,并对发生冲突的无人机施加特定的冲突约束。在低层搜索中,在遵守冲突约束的情况下为每个无人机生成新的路径。

算法在高层搜索和低层搜索之间迭代循环,直到生成的多条路径无冲突为止。作者的简化策略包括:(1)在高层搜索中减少无人机间的碰撞检测半径;(2)低层搜索中将邻居节点从7个扩展到15个,允许无人机对角线运动。

通过上述算法,获得多条离散路径后,使用最小二乘法对这些路径进行多项式拟合,得到每个无人机的连续全局参考路径。本文使用ceres库来解决最小二乘问题,将第i个无人机的参考路径表示为\mathcal{R_{i}}(t)

3.2 基于冲突趋势的局部聚类

局部重规划在全局粗略参考路径的启发下进行,以确保生成安全和平滑的可执行轨迹。重规划包括局部初始路径生成、安全走廊创建和冲突趋势聚类等模块。

1.  局部初始路径生成

当在时间T_{replan}进行重规划时,第i个无人机的初始路径定义为T_{replan},包含多个离散点:

\Gamma_i=\left\{\mathcal{P}_j^i\in\mathbb{R}^3\mid j=1,2,\cdots,\mathcal{N}_{initPath}\right\}

其中\mathcal{N}_{initPath}是离散点的数量。对于\Gamma_{i}中的第一个点\mathcal{P}_1^i,它代表这次重规划过程的起点,对应无人机在时间T_{replan}的位置。生成算法如下:

2.局部安全走廊生 

为防止与静态障碍物发生碰撞,无人机轨迹将被限制在安全走廊内。局部安全走廊被构建为轴对齐包围盒(AABB),这便于在后续无人机聚类模块中进行简化的冲突检测。每个安全走廊包含六个元素,即全局地图坐标系中矩形安全走廊一对顶点的三维坐标。

图3:2D和3D下的安全走廊©️【深蓝AI】编译

3.  安全走廊聚类

在无人机的安全走廊相交的情况下,可能发生碰撞。我们的方法通过聚类无人机来解决这个问题,将那些有碰撞风险的无人机归类进行协同优化,从而确保安全。

聚类算法的流程如下:

图4:安全走廊聚类©️【深蓝AI】编译

初始时,我们确定安全走廊之间是否存在任何碰撞。碰撞检测使用AABB方法进行。如图3所示,只有当两个安全走廊在x、y和z坐标轴上的投影线都相交时,才认为它们发生相交。具有相交安全走廊的无人机被整合到一个组中。

然而,在特定情况下,高密度的无人机可能加剧安全走廊之间的冲突,导致一个组中包含大量无人机。这种现象会增加协同优化任务的复杂性。因此,下一步是对包含超过上限数量无人机的组进行重新聚类。重新聚类采用K-means++算法。

3.3 局部协同轨迹规划

在基于冲突趋势进行聚类后,将得到多个组。随后,在这些组内进行实时协同轨迹规划,以获得安全、平滑且动力学可行的集群轨迹。

1.  轨迹描述

贝塞尔曲线将被限制在由一组控制点形成的凸包内,这便于通过将控制点限制在安全走廊内来实现避障。在每次重规划中,第i个无人机的局部轨迹将使用分段贝塞尔曲线描述。此外,贝塞尔曲线的k阶导数仍然满足贝塞尔曲线的性质,当k=1或k=2时,分别可以得到轨迹的速度或加速度曲线。

2.  静态障碍物避障约束

考虑到无人机在垂直方向的下洗气流效应,将无人机的碰撞模型定义为椭球区域,这也是无人机和障碍物之间的安全区域。在这个过程中,作者利用曲线的凸包性质,将约束进一步进行转换。

3.  交互避障约束

将根据之前建立无人机之间避碰的相对安全走廊,为确保无人机之间不发生碰撞,两个无人机直接最短距离应大于安全间距。

4.  动态障碍物避障约束

为实现动态障碍物的避障,将采用匀速模型来预测动态障碍物的未来路径。随后,使用最小二乘法将这些路径拟合为贝塞尔曲线。然后基于无人机与动态障碍物之间的相对安全走廊构建避碰约束,其中动态障碍物建模为半径为的球体。

5.  动力学限制

考虑到无人机的动力学限制,将无人机在各轴的速度和加速度必须限制在最大速度和加速度的边界内。

6.  目标函数

在局部优化中,目标函数被表述为两个部分的加权和:轨迹平滑度和局部起终点状态约束。此外,决策变量是贝塞尔曲线的控制点。通过优化上述目标函数,可以保证轨迹的连续性。

7.  轨迹优化

上述建立的优化约束和目标函数具有凸特性,允许将其表述为二次规划问题。利用既有的凸优化求解器(如CPLEX)可以高效地获得优化解,得到满足约束同时最小化成本的轨迹。

这种优化方法不仅确保了轨迹的安全性和可行性,还保证了轨迹的平滑性和动力学特性,使其适合实际的无人机飞行任务。

4.  实验

实验验证在配备Intel 8336C@ 2.3GHz CPU的环境下进行仿真对比。系统采用Octomap库来表示3D占用地图,使用CPLEX QP求解器进行轨迹优化。贝塞尔曲线的阶数设定为n = 5。

4.1 空旷环境试验

三种算法在空旷环境中使用8架无人机进行圆形路径位置交换测试。下表展示了离线规划时间toff(s)、在线规划时间ton(s)、总飞行距离fdis(m)、平均速度Vel(m/s)和平均加速度Acc(m/s²)的统计数据。

表1:空旷环境试验结果©️【深蓝AI】编译

实验结果表明:本文方法在集中式搜索过程中采用简化的碰撞模型,相比集中式方法有效减少了搜索时间。同时,集中式方法飞行距离较长,这是因为在集中式全局优化过程中,为满足全局轨迹的平滑性和连续性要求,无人机需要执行大量转弯或绕行。此外,在全局参考轨迹启发下的局部规划使我们能够实现更高的平均速度,但这也导致与其他两种方法相比略高的平均加速度。

4.2 复杂约束环境试验

为评估算法在狭窄、多约束环境中的性能,在包含狭窄管道的不同尺寸地图上部署了40架无人机。无人机需要完成两种任务:

● 简单任务:与地图对称另一侧的无人机进行位置交换,无人机间冲突概率较低

● 复杂任务:需要对角线飞行到地图的对面,这将产生更多无人机间的冲突

在这种场景下,安全走廊的最大范围定义为6r×6r×6r,其中r表示无人机半径,系数6是一个经验值。这个阈值下形成的安全走廊空间可以容纳4~6架无人机,确保它们有足够的交互空间。此外,最大离线规划时间设置为1500秒。实验结果如图5和表2所示。

图5:复杂约束环境试验结果©️【深蓝AI】编译

表2:复杂约束环境试验结果©️【深蓝AI】编译

实验结果表明,在搜索时间方面,通过简化碰撞模型和约束,作者的方法在离线阶段相比[9]中集中式方法有更快的搜索时间。在在线优化中,Ego-Swarm显示出更快的优化时间,这是因为它使用非线性优化并将平滑、连续性和避障构造为软约束,从而提供更快的优化速度。相比之下,作者的方法采用带硬约束的凸优化,虽然较慢但确保所有约束都得到满足。与非线性优化相比,避免了局部最小值问题且不需要初始解。

在成功率方面,[9]中的集中式方法在约束丰富的多约束环境中,全局轨迹的集中式优化成功率为0%,相比之下,本文方法在局部优化时只优化未来的局部轨迹。这种方法使用较小的变量和较低的自由度,便于优化。此外,分布式方法Ego-Swarm的成功率在65%到80%之间。这是因为UAV完全依赖局部环境信息,在某些情况下无法有效定位长狭窄管道中的入口和出口,此外,Ego-Swarm在优化中将避障约束构造为软约束,这不能保证UAV的绝对安全。

在飞行时间和速度方面,与EGO-Swarm相比,本文方法通过跟随全局路径实现了更快的飞行速度和更短的飞行时间。EGO-Swarm由于是分布式的,在飞行过程中经常会出现不必要的绕行,原因是需要避开其他UAV或飞出走廊内部,这会增加飞行距离并降低速度。

4.3 动态场景测试

与集中式方法相比,本文方法能够适应动态环境。在这一节中,仅对提出的框架在动态环境中进行实验验证,原因是目前最新的多智能体动态避障算法没有开源,而开源算法MADER[10]需要提供准确的动态障碍物轨迹,这在现实中是不可行的。

动态障碍物避障测试在30m×30m×3m的狭窄走廊动态场景中进行。作者在环境中心位置了8个半径为0.3m的球形动态障碍物,这些障碍物的速度分别设置为0.5m/s、1m/s和2m/s。UAV的运动模式设置为围绕固定线段或圆形进行往返运动,分别使用8架和16架UAV进行测试,目标是从地图一端对角线穿越到另一端。

图6:动态场景©️【深蓝AI】编译

试验表明,算法的离线规划时间在有无动态障碍物的场景中差异很小,这是因为离线规划阶段并不考虑动态障碍物的影响。随着动态障碍物速度接近UAV的速度上限,成功率会降低。相比无动态障碍物的场景,避开动态障碍物的必要性导致UAV的行程距离和平均加速度略有增加。

4.4 消融试验

安全走廊的扩展长度和聚类模块是影响在线规划时间的两个主要因素。在这一小节中,对聚类模块进行了消融实验,使用三种不同的安全走廊扩展长度阈值:短、中、长,来评估它们对规划时间的影响。

图7:聚类模块消融试验©️【深蓝AI】编译

实验结果表明,在没有聚类模块的情况下,24架UAV在固定起终点的情况下发生10次碰撞,在随机起终点的情况下发生11次碰撞,这是由于规划时间过长导致重规划频率不足,当检测到动态障碍物时,系统无法及时重新规划,最终导致碰撞。有聚类模块的情况下,得益于及时的重规划,没有发生任何碰撞,这证明了聚类模块在动态环境中的有效性。

5.  总结

作者提出了一种分层UAV集群路径规划框架,旨在解决约束丰富动态环境中的冲突解决和动态避障挑战。通过全局启发下的在线群组联合优化,探索了集中式和分布式框架优势的协同可能性。同时,在作者构建的包含狭窄管道和动态场景的仿真环境中,验证和对比了该文方法的有效性和优势。
 

 论文原文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=10582491

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2248642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中的简单爬虫

文章目录 一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务器和浏览器的通讯流程3. 浏览器访问Web服务器的通讯流程4. 加载图片资源代码 二. 基于Web请求的FastAPI通用配置1. 目前Web服务器存在问题2. 基于Web请求的FastAPI通用配置 三. Python爬虫介绍1. 什…

【Shell】运维快捷键及shell各种不同实际运维场景

一,控制台使用技巧 1,操作快捷键 Ctrlr :可以快速查找历史命令 Ctrll :可以清理控制台屏幕 Ctrla \ Ctrle :移动光标到命令行首\行尾 Ctrlw \ Ctrlk :删除光标之前\之后的内容 2,VIM文件编辑快捷键 快捷键ZZ :文件保存并退出 3&#xff…

SlickGrid复选框

分析 1、先在columns首列添加复选框; 2、在SlickGrid注册刚添加的复选框; 3、添加复选框变化事件; 4、注册按钮点击事件,点击获取已选中的行。 展示 代码 复选框样式(CSS) .slick-cell-checkboxsel {bac…

基于单片机的智慧小区人脸识别门禁系统

本设计基于单片机的智慧小区人脸识别门禁系统。由STM32F103C8T6单片机核心板、显示模块、摄像头模块、舵机模块、按键模块和电源模块组成。可以通过摄像头模块对进入人员人脸数据进行采集,识别成功后,舵机模块动作,模拟门禁打开,门…

【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容

目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方,就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…

Edge浏览器保留数据,无损降级退回老版本+禁止更新教程(适用于Chrome)

3 个月前阿虚就已经写文章告警过大家,Chromium 内核的浏览器将在 127 以上版本开始限制仍在使用 Manifest V2 规范的扩展:https://mp.weixin.qq.com/s/v1gINxg5vMh86kdOOmqc6A 像是 IDM、油猴脚本管理器、uBblock 等扩展都会受到影响,后续将无…

基于Spring Boot的装饰工程管理系统论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统装饰工程项目信息管理难度大,容错率低&#x…

路由器的工作原理

网络拓扑结构 主机A: IP地址:10.1.0.1/16 MAC地址:MACA 主机B: IP地址:10.2.0.1/16 MAC地址:MACB 网关G0/0/0: IP地址:10.1.0.2/16 MAC地址:MACC 网关G0/0/1&#…

【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分!

【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神经网络)是transformer特征增强的重要组成部分! 【深度学习|特征增强模块】FFN(前馈神经网络)和E_FFN(增强型前馈神…

51单片机从入门到精通:理论与实践指南(一)

单片机在智能控制领域的应用已非常普遍,发展也很迅猛,学习和使用单片机的人员越来越多。虽然新型微控制器在不断推出,但51单片机价格低廉、易学易用、性能成熟,在家电和工业控制中有一定的应用,而且学好了51单片机&…

java写一个石头剪刀布小游戏

石头剪刀布是一款经典的手势游戏,通常由两人参与,玩法简单且充满趣味。玩家通过出示手势代表“石头”、“剪刀”或“布”,并根据规则比较手势决定胜负。它广泛用于休闲娱乐、决策或解压活动。 一、功能简介 用户与计算机对战。 用户输入选择:石头、剪刀或布。 计算机随机生…

MATLAB深度学习(六)——LSTM长短期神经网络原理与应用

LSTM的应用可以参见一个相当好的视频:小车倒立摆最优控制教程 - Part1 Simulink Simscape Multibody仿真建模_哔哩哔哩_bilibili 6.1 序列建模——循环神经网络 循环神经网络RNN是一类专门用于处理序列性数据x,,xn的神经网络结构&#xff0c…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术,广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性,通过对当前数据的预测和实际值与预测值之间的差值进行编码,从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)

重要信息 会议官网:itca2024.iaecst.org 会议时间:2024年12月06-08日 会议地点:中国-广州(越秀国际会议中心) 会议简介 第六届信息技术与计算机应用学术会议(ITCA 2024) 依旧作为第六届国际科技创新学术交流大会…

Leetcode 将有序数组转换为二叉搜索树

算法思想及代码解析: 这段代码的目的是将一个有序数组转换为 高度平衡的二叉搜索树(Balanced Binary Search Tree, BST)。以下是算法的详细解释: 1. 什么是高度平衡的二叉搜索树? 二叉搜索树:对于树中的每…

15 go语言(golang) - 并发编程goroutine原理及数据安全

底层原理 Go 的 goroutine 是一种轻量级的线程实现,允许我们在程序中并发地执行函数。与传统的操作系统线程相比,goroutine 更加高效和易于使用。 轻量级调度 用户态调度:Go 运行时提供了自己的调度器,这意味着 goroutine 的创建…

ESP-KeyBoard:基于 ESP32-S3 的三模客制化机械键盘

概述 在这个充满挑战与机遇的数字化时代,键盘已经成为我们日常学习、工作、娱乐生活必不可少的设备。而在众多键盘中,机械键盘,以其独特的触感、清脆的敲击音和经久耐用的特性,已经成为众多游戏玩家和电子工程师的首选。本文将为…

PyTorch基础05_模型的保存和加载

目录 一、模型定义组件——重构线性回归 二、模型的加载和保存 2、序列化保存对象和加载 3、保存模型参数 一、模型定义组件——重构线性回归 回顾之前的手动构建线性回归案例: 1.构建数据集;2.加载数据集(数据集转换为迭代器);3.参数初…

《Python基础》之函数的用法

一、简介 在 Python 中,函数是一段可重用的代码块,用于执行特定的任务。函数可以帮助你将代码模块化,提高代码的可读性和可维护性。 函数的用途 代码重用:通过函数,你可以将常用的代码块封装起来,避免重复…

java:aqs实现自定义锁

aqs采用模板方式设计模式,需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…