【路径规划】基于人工势场(APF)算法、Vortex APF算法、Safe APF算法和动态 Windows 方法的比较

摘要

本文对比了人工势场(APF)算法、Vortex APF(VAPF)算法、Safe APF(SAPF)算法以及动态窗口(DWA)方法在机器人路径规划中的性能。通过实验,评估了各个算法在不同障碍环境中的表现,尤其是在避障和路径优化方面的差异。实验结果表明,VAPF和SAPF在解决传统APF算法的局部极小值问题上表现优异,而DWA在实时路径规划中具有较好的综合性能。

理论

  • 人工势场(APF)算法:基于人工势场算法,机器人在目标点生成吸引力,在障碍物处生成排斥力。通过力的合成引导机器人向目标移动。然而,该算法容易陷入局部极小值,即机器人被困在非目标点的区域。

  • Vortex APF(VAPF)算法:该算法通过引入旋涡场,改进了传统APF的局部极小值问题。机器人不仅受到吸引力和排斥力的影响,还在合适的情况下受到旋转力场的引导,使其更容易逃脱局部极小值区域。

  • Safe APF(SAPF)算法:SAPF算法通过动态调整障碍物周围的排斥力强度,确保机器人在复杂障碍环境中能够安全通行,减少了机器人和障碍物碰撞的风险。

  • 动态窗口(DWA)方法:DWA是一种基于速度和加速度的实时路径规划方法。该算法通过评估不同速度和角速度的可行性,找到最优路径,从而实现实时避障和路径规划。DWA方法适用于动态环境,且在计算资源有限的情况下表现优异。

实验结果

在多个复杂环境下,对比了各算法的表现。下图展示了四种算法的路径规划结果:

  • DWA(橙色):DWA路径较为平滑,避障效果明显,尤其适合实时路径规划。

  • APF(蓝色):APF算法在简单环境中效果较好,但在局部极小值问题上仍有缺陷。

  • VAPF(绿色):VAPF通过旋涡场改进了局部极小值问题,在复杂环境中表现优异。

  • SAPF(红色):SAPF算法在障碍物密集的情况下有更好的避障效果,确保了路径的安全性。

部分代码

  1. 人工势场算法(APF):

function apf_path = APF(start, goal, obstacles)
    % 初始化参数
    k_att = 1.0;  % 吸引力系数
    k_rep = 100.0; % 排斥力系数
    d0 = 2.0;     % 排斥力的作用范围
    max_step = 1000;
    apf_path = start;
    
    for i = 1:max_step
        pos = apf_path(end, :);
        f_att = k_att * (goal - pos);  % 吸引力
        f_rep = [0, 0]; % 初始化排斥力
        
        for j = 1:size(obstacles, 1)
            dist = norm(pos - obstacles(j, :));
            if dist < d0
                f_rep = f_rep + k_rep * (1/dist - 1/d0) * (pos - obstacles(j, :)) / dist^3;
            end
        end
        
        f_total = f_att + f_rep;  % 合力
        new_pos = pos + f_total;  % 更新位置
        apf_path = [apf_path; new_pos];
        
        if norm(goal - new_pos) < 0.1  % 如果接近目标点,结束
            break;
        end
    end
end
  1. Vortex APF算法(VAPF):

function vapf_path = VAPF(start, goal, obstacles)
    % 初始化参数
    k_att = 1.0;  % 吸引力系数
    k_rep = 100.0; % 排斥力系数
    k_vortex = 10.0; % 旋涡力系数
    d0 = 2.0;     % 排斥力的作用范围
    max_step = 1000;
    vapf_path = start;
    
    for i = 1:max_step
        pos = vapf_path(end, :);
        f_att = k_att * (goal - pos);  % 吸引力
        f_rep = [0, 0]; % 初始化排斥力
        f_vortex = [0, 0]; % 初始化旋涡力
        
        for j = 1:size(obstacles, 1)
            dist = norm(pos - obstacles(j, :));
            if dist < d0
                f_rep = f_rep + k_rep * (1/dist - 1/d0) * (pos - obstacles(j, :)) / dist^3;
                f_vortex = f_vortex + k_vortex * [-(pos(2) - obstacles(j, 2)), pos(1) - obstacles(j, 1)] / dist^2;
            end
        end
        
        f_total = f_att + f_rep + f_vortex;  % 合力
        new_pos = pos + f_total;  % 更新位置
        vapf_path = [vapf_path; new_pos];
        
        if norm(goal - new_pos) < 0.1  % 如果接近目标点,结束
            break;
        end
    end
end
  1. Safe APF算法(SAPF):

function sapf_path = SAPF(start, goal, obstacles)
    % 初始化参数
    k_att = 1.0;  % 吸引力系数
    k_rep = 100.0; % 排斥力系数
    d0 = 2.0;     % 排斥力的作用范围
    max_step = 1000;
    sapf_path = start;
    
    for i = 1:max_step
        pos = sapf_path(end, :);
        f_att = k_att * (goal - pos);  % 吸引力
        f_rep = [0, 0]; % 初始化排斥力
        
        for j = 1:size(obstacles, 1)
            dist = norm(pos - obstacles(j, :));
            if dist < d0
                % 动态调整排斥力
                safe_dist = max(0.1, dist);
                f_rep = f_rep + k_rep * (1/safe_dist - 1/d0) * (pos - obstacles(j, :)) / safe_dist^3;
            end
        end
        
        f_total = f_att + f_rep;  % 合力
        new_pos = pos + f_total;  % 更新位置
        sapf_path = [sapf_path; new_pos];
        
        if norm(goal - new_pos) < 0.1  % 如果接近目标点,结束
            break;
        end
    end
end
  1. 动态窗口(DWA)算法的核心伪代码:

function dwa_path = DWA(start, goal, obstacles, max_v, max_w)
    % 初始化
    max_step = 1000;
    dwa_path = start;
    pos = start;
    v = 0; % 初始速度
    w = 0; % 初始角速度
    
    for i = 1:max_step
        [v, w] = calculate_velocity(v, w, pos, goal, obstacles, max_v, max_w);
        pos = update_position(pos, v, w);
        dwa_path = [dwa_path; pos];
        
        if norm(goal - pos(1:2)) < 0.1  % 如果接近目标点,结束
            break;
        end
    end
end

参考文献

  1. Khatib, O. (1986). Real-time obstacle avoidance for manipulators and mobile robots. The International Journal of Robotics Research, 5(1), 90-98.

  2. Fox, D., Burgard, W., & Thrun, S. (1997). The dynamic window approach to collision avoidance. IEEE Robotics & Automation Magazine, 4(1), 23-33.

  3. Park, J. H., & Oh, J. H. (2003). Vortex field method for local path planning of mobile robots. Journal of Intelligent and Robotic Systems, 37(1), 1-16.

  4. Tan, H. S., Zhang, H., & Zhu, Q. (2011). A safe artificial potential field approach for robot path planning. Proceedings of the 2011 International Conference on Information and Automation, 1121-1126.

人工势场法(Artificial Potential Field,简称APF)是一种在路径规划中常用的算法。其基本原理是将机器人或无人机等移动物体视为带电荷的粒子,通过电势场的理论来进行路径规划APF算法首先定义了一个目标点,即机器人的目标位置,然后将目标点设为正电荷,环境中的障碍物设为负电荷。随着机器人的移动,其周围会存在的电势场会受到这些电荷的影响。机器人会根据电势场的大小和方向来选择合适的方向进行移动。 具体来说,APF算法会计算每个位置的斥力和吸引力。斥力是由障碍物产生的,相当于推动机器人远离障碍物。吸引力是由目标点产生的,相当于吸引机器人朝目标点移动。通过斥力和吸引力的叠加,机器人可以找到一条避开障碍物,同时朝目标点靠近的路径。 在具体实现APF算法时,需要考虑一些问题。比如,如果机器人陷入局部最小值,即在一个较小的势能坑中无法继续前进,此时可能需要采取一些策略来使机器人能够绕过障碍物。另外,对于多个目标点的情况,需要对多个目标点的电势场进行叠加,然后再进行路径规划APF算法是一种简单而有效的路径规划方法,但也存在一些限制。比如,当机器人数量增加或者环境复杂度增加时,APF算法容易陷入局部最小值,导致无法找到最优解。此外,APF算法对环境中障碍物的准确模型要求较高,如果障碍物模型不准确,可能会导致规划出的路径不可行。 总的来说,APF算法通过电势场的概念进行路径规划,具有简单、高效的特点。在一些简单环境下,APF算法可以得到较好的路径规划结果。但在复杂环境下,可能需要结合其他算法或进行改进,以提高路径规划的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值