无人机3维路径规划,170余种优化算法随随意切换,详细对比实验,附Python代码

发布于:2025-03-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

声明:对于作者的原创代码,禁止转售倒卖,违者必究!


本期代码,利用强大的python库——mealpy,实现无人机3维路径规划设计。可以非常方便的对比170种优化算法,让你的论文不再乏力!

mealpy库包含了170多个智能优化算法,其中包含一些原始算法和改进的算法。关于mealpy库的详细介绍,链接在这里:https://mealpy.readthedocs.io/en/latest/

本期代码实现功能:

图片

①3维无人机模型地图随意更改,可以随意增加障碍物,随意更改起始点位置;

②mealpy库中的170种算法都可以用到这个路径规划模型中;

③绘制了不同算法之间最佳短路径迭代曲线对比图

④绘制了3d模型下,无人机飞行轨迹对比图

图片

学会本期代码后,参考一些论文,还可以将改进的智能算法用于机器人路径规划中,突出改进智能算法的优势!

第一组实验:

采用北方苍鹰(NGO)、灰狼算法(GWO)、蜜獾算法(HBA)进行对比,收敛曲线如下,在经过两千次迭代后,灰狼算法寻得路径最短。

自动打印出结果:

三维路径规划示意图:

这么乍一看是不是以为这些路径线都穿过障碍物了,哈哈,其实不然,看下面这个动画,就能清楚的看到,每一个无人机路径都完美避开了障碍物!

第二组实验:

由于mealpy库切换算法非常简单,可以说你几秒钟就可以切换几个新算法!这么多的算法,随意切换!

#  为了方便算法调用,我把部分算法名字写在这里了 ,想要知道每个算法详情,请 参考 https://mealpy.readthedocs.io/en/latest/#  (BBO, BBOA, BMO, EOA, IWO, SBO, SMA, SOA, SOS, TPO, TSA, VCS, WHO)(CRO, DE, EP, ES, FPA, GA, MA)(BRO, BSO, CA, CHIO, FBIO, GSKA, HBO, HCO, ICA, LCO, QSA, SARO, SPBO, SSDO, TLO, TOA, WarSO)# (AOA, CEM, CGO, CircleSA, GBO, HC, INFO, PSS, RUN, SCA, SHIO)(ArchOA, ASO, CDO, EFO, EO, EVO, FLA, HGSO, MVO, NRO, RIME, SA, TWO, WDO)#  (ABC, ACOR, AGTO, ALO, AO, ARO, AVOA, BA, BeesA, BES, BFO, BSA, COA, CoatiOA, CSA, CSO, DMOA, DO, EHO, ESOA, #   FA, FFA, FFO, FOA, FOX, GJO, GOA, GTO, GWO, HBA, HGS, HHO, JA, MFO, MGO, MPA, MRFO, MSA, NGO, NMRA, OOA, PFA,#   POA, PSO, SCSO, SeaHO, ServalOA, SFO, SHO, SLO, SRSR, SSA, SSO, SSpiderA, SSpiderO, STO, TDO, TSO, WaOA, WOA, ZOA)#  AEO, GCO, WCA,HS

咱们再挑选三个对比一下吧!采用霜冰优化算法(RIME)、粒子群优化(PSO)、生物地理学优化算法(BBO)进行对比,收敛曲线如下,在经过两千次迭代后,霜冰算法寻得路径最短。

部分代码展示

from matplotlib.colors import LightSourceimport numpy as npimport randomimport mathfrom src.core.uav_setup import UAV_SetUpimport matplotlib.pyplot as pltfrom src.core.obj_fun import ObjFunfrom mealpy import GWO,HBA,BMO,NGO,IWO,TPO'''mealpy 这个包一定要装 2.5.3版本的哦!!! ''''''想要改地图,改起始点位置,在""uav_setup.py" 中修改'''#  为了方便算法调用,我把部分算法名字写在这里了 ,想要知道每个算法详情,请 参考 https://mealpy.readthedocs.io/en/latest/#  (BBO, BBOA, BMO, EOA, IWO, SBO, SMA, SOA, SOS, TPO, TSA, VCS, WHO)(CRO, DE, EP, ES, FPA, GA, MA)(BRO, BSO, CA, CHIO, FBIO, GSKA, HBO, HCO, ICA, LCO, QSA, SARO, SPBO, SSDO, TLO, TOA, WarSO)# (AOA, CEM, CGO, CircleSA, GBO, HC, INFO, PSS, RUN, SCA, SHIO)(ArchOA, ASO, CDO, EFO, EO, EVO, FLA, HGSO, MVO, NRO, RIME, SA, TWO, WDO)#  (ABC, ACOR, AGTO, ALO, AO, ARO, AVOA, BA, BeesA, BES, BFO, BSA, COA, CoatiOA, CSA, CSO, DMOA, DO, EHO, ESOA, #   FA, FFA, FFO, FOA, FOX, GJO, GOA, GTO, GWO, HBA, HGS, HHO, JA, MFO, MGO, MPA, MRFO, MSA, NGO, NMRA, OOA, PFA,#   POA, PSO, SCSO, SeaHO, ServalOA, SFO, SHO, SLO, SRSR, SSA, SSO, SSpiderA, SSpiderO, STO, TDO, TSO, WaOA, WOA, ZOA)#  AEO, GCO, WCA,HS# ... 其他导入保持不变 ...def set_seed(seed=None):    if seed is None:        seed = random.randint(0, 100000)    np.random.seed(seed)    random.seed(seed)    return seeddef configure_3d_axis(ax):    '''配置三维坐标轴参数'''    ax.grid(True, linestyle=':', alpha=0.6, color='slategray')    ax.xaxis.pane.set_facecolor('white')    ax.yaxis.pane.set_facecolor('whitesmoke')    ax.zaxis.pane.set_facecolor('ghostwhite')    ax.set_xlabel('X (m)', fontsize=12, labelpad=12)    ax.set_ylabel('Y (m)', fontsize=12, labelpad=12)    ax.set_zlabel('Altitude (m)', fontsize=12, labelpad=12)def draw_obstacles_3d(ax, obstacles):    """增强型三维障碍物绘制"""    ls = LightSource(azdeg=100, altdeg=45)    for x, y, h, r in obstacles:        # 柱体表面        theta = np.linspace(0, 2 * np.pi, 80)        z = np.linspace(0, h, 30)        theta, z = np.meshgrid(theta, z)        x_cyl = x + r * np.cos(theta)        y_cyl = y + r * np.sin(theta)        # 添加材质效果        shaded = ls.shade(z, cmap=plt.cm.Greys_r, vert_exag=0.2)        ax.plot_surface(x_cyl, y_cyl, z, facecolors=shaded,                        alpha=0.6, edgecolor='dimgray', linewidth=0.2)        # 顶部平台        theta = np.linspace(0, 2 * np.pi, 100)        x_top = x + r * np.cos(theta)        y_top = y + r * np.sin(theta)        ax.plot_trisurf(x_top, y_top, np.full_like(x_top, h),                        color='gray', alpha=0.6, edgecolor='k')

本期代码获取

点击下方阅读原文获取,或者复制链接跳转!

获取链接:https://mbd.pub/o/bread/aJaUmJxw

获取更多代码:


网站公告

今日签到

点亮在社区的每一天
去签到