无人机三维路径规划:基于蜣螂优化算法DBO的无人机三维路径规划MATLAB https://mbd.pub/o/bread/mbd-ZJmck5tp

无人机三维路径规划这活儿,说难不难,说简单也不简单。想象一下让无人机在布满障碍物的城市峡谷里穿梭,还得找条最省电的路线——这时候传统方法可能得跪,不过今天咱们聊的蜣螂优化算法(DBO)倒是有点意思。

先上段核心代码热热身:

function [Best_pos,Best_score]=DBO(nPop,MaxIt,lb,ub,dim,fobj)
    % 初始化种群
    Positions = rand(nPop,dim).*(ub-lb)+lb;
    Best_score = inf;
    for i=1:nPop
        fitness(i) = fobj(Positions(i,:));
        if fitness(i) < Best_score
            Best_score = fitness(i);
            Best_pos = Positions(i,:);
        end
    end
    % 迭代优化
    for it=1:MaxIt
        for i=1:nPop
            % 滚球行为更新
            newPos = Positions(i,:) + tan(rand*pi/2) * (Best_pos - abs(Positions(i,:)));
            % 跳舞行为更新
            if rand < 0.5
                newPos = newPos + randn * (Best_pos - Positions(i,:));
            end
            % 边界处理
            newPos = max(newPos, lb);
            newPos = min(newPos, ub);
            % 更新适应度
            newFitness = fobj(newPos);
            if newFitness < fitness(i)
                Positions(i,:) = newPos;
                fitness(i) = newFitness;
            end
        end
        [~, idx] = min(fitness);
        Best_pos = Positions(idx,:);
        Best_score = fitness(idx);
    end
end

这段代码的精华在位置更新部分。蜣螂的滚球行为用tan函数实现非线性移动,跳舞行为加入了随机扰动——这比单纯用rand函数更符合自然界中的随机性。注意边界处理那两行,很多人容易漏掉这个,结果路径点直接飞出地图外。

适应度函数才是灵魂所在。假设我们要同时考虑路径长度和障碍物规避:

function cost = pathCost(path)
    % 路径长度计算
    dist = sum(sqrt(sum(diff(path).^2,2)));
    
    % 障碍物碰撞惩罚
    collision_penalty = 0;
    for i=1:size(path,1)
        if isInObstacle(path(i,:))
            collision_penalty = collision_penalty + 1000;
        end
    end
    
    % 高度变化惩罚
    height_change = sum(abs(diff(path(:,3))));
    
    cost = dist + collision_penalty + 0.3*height_change;
end

这里用了三层代价:基础距离、碰撞惩罚(直接加1000够狠)、高度变化惩罚。实际调试时建议把障碍物检测换成空间哈希或者KD-Tree,直接遍历所有障碍物点的话,计算量会爆炸。

三维可视化用scatter3画障碍物,plot3连路径线,注意设置好光照和视角:

figure('Color',[0.1,0.1,0.1]);
scatter3(obstacles(:,1),obstacles(:,2),obstacles(:,3),'filled');
hold on;
plot3(path(:,1),path(:,2),path(:,3),'r-o','LineWidth',2);
view(45,30);  % 最佳装逼视角
axis equal;

这个视角设置能让三维效果更立体,红色路径线在黑色背景里特别显眼。遇到过有人把障碍物画成骷髅头形状的,虽然没啥实际作用,但演示效果满分。

参数调优是个玄学,但有几个经验值:

  • 种群数量别超过50,三维路径变量太多容易过拟合
  • 最大迭代次数设在200-300之间,再往后收敛曲线都平了
  • 高度变化权重0.3是个平衡值,太大会导致无人机像过山车

遇到过最奇葩的bug是忘记转换坐标系,结果无人机全程贴地飞行——合着这蜣螂优化出来的是扫地机器人路线。后来加了个高度随机初始化才解决,所以说初始化范围设置真的很关键。

最后说个实战技巧:把DBO和A结合使用。先用A生成粗路径,再用DBO做精细化调整,这样既能避免陷入局部最优,又能大幅缩短计算时间。这种混合策略在复杂地形中特别有效,谁用谁知道。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐