経路計画アルゴリズム 3 改良型人工ポテンシャル場法 (Matlab)

目次

従来の人工ポテンシャルフィールド

重力ポテンシャル場

反発ポテンシャル場

 力のポテンシャル場

 従来の人工ポテンシャル場法の問題点

 改良された人工電位場機能

 Matlab コードの実装


参考リンク:

[1] Zhu Weida. 改良型人工ポテンシャル場法に基づく車両障害物回避経路計画の研究 [D]. 江蘇大学、2017.

1986 年に、Khatib は初めて人工ポテンシャル場法を提案し、それをロボットの障害物回避の分野に応用しました。この手法の基本的な考え方は、障害物の周囲に障害物反発ポテンシャル場を構築し、目標点の周囲に重力ポテンシャル場を構築することであり、これは物理学における電磁場に似ています。この 2 つのポテンシャル場からなる合成場において制御対象物には斥力と重力が作用し、斥力と重力の合力によって制御対象物の移動が誘導され、衝突のない障害物回避経路が探索されます。

この手法は構造が単純で低レベルのリアルタイム制御に便利であり、リアルタイムの障害物回避や滑らかな軌道制御に広く使用されていますが、局所最適解、到達不可能な目標、衝突の存在が欠点です。障害物がある。

従来の人工ポテンシャルフィールド

重力ポテンシャル場

反発ポテンシャル場

障害物反発ポテンシャルフィールドを決定する要因は、自動車と障害物との距離であり、自動車が障害物の影響範囲に入らない場合、自動車が受け取る位置エネルギー値はゼロとなり、自動車が障害物の影響範囲に入った後は、障害物、車両間の距離 距離が大きいほど車の位置エネルギー値は小さくなり、距離が小さいほど車の位置エネルギー値は大きくなります。

 力のポテンシャル場

ここに画像の説明を挿入  +  ここに画像の説明を挿入

 従来の人工ポテンシャル場法の問題点

 改良された人工電位場機能

 

 Matlab コードの実装

メインメイン関数

%main主函数
%created by MW
%date: 2023/2/28
%func: Artificial Potential Field(APF) avoiding obstacle
 
clc;
clear;
 
%% 创建并绘制障碍物
obstacle = [2 5;
            3 8;
            7 9;
            4 2;
            6 6;
            9 3];
figure(1);
scatter(obstacle(:,1),obstacle(:,2),'r')
axis equal;

%% 创建并绘制初始位置和目标位置
start = [0 0];
goal = [10 10];
hold on;
scatter(start(1),start(2),'filled','g');
scatter(goal(1),goal(2),'filled','g');
 
%% 图片标注
text(start(1),start(2),'起点');
text(goal(1),goal(2),'终点');
grid on;
axis equal;
axis([0 10 0 10]);
xlabel('x');
ylabel('y');
title('人工势场法生成避障路径')

%% 生成并绘制避障路径
path = APF2D(start, goal, obstacle);
hold on;
plot(path(:,1), path(:,2),'LineWidth',1,'Color','b');

人工ポテンシャル場法の主な機能:

function path = APF2D(start,goal,obstacle)
% Artificial Potential Field(APF)avoiding obstacle path
%%APF参数初始化
%如果不能实现预期目标,可能也与初始的增益系数,Po设置的不合适有关。
att = 35;%引力增益系数
req = 10;%斥力增益系数
p0 = 5;%障碍物产生影响的最大距离,当障碍与移动目标之间距离大于Po时,斥力为0。
step = 2;%步长
maxIter = 200;%最大循环迭代次数
n = length(obstacle(:,1));%障碍物个数

path = start;%路径初始化
newNode = start;
for i = 1:maxIter
    %% 引力计算
    V_att = goal - newNode;%路径点到目标点的向量
    r_att = sqrt(V_att(1)^2 + V_att(2)^2);%路径点到目标点的欧氏距离
    P_att = att * V_att;%引力
    
    %% 斥力计算
    %改进的人工势场法,将斥力分散一部分到引力方向。通过添加随机扰动r_att^n实现,r_att为路径点到目标点的欧氏距离,本文n取2。
    V_req = zeros(n,2);
    for j =1:n
        V_req(j,:) = [obstacle(j,1) - newNode(1), obstacle(j,2) - newNode(2)];%路径点到各个障碍物的向量
        r_req(j) = sqrt(V_req(j,1)* V_req(j,1) + V_req(j,2)* V_req(j,2));%路径点到各个障碍物的欧氏距离
    end   
    P_req = 0;
    for k = 1:n
        if r_req(k) <= p0
            P_req1 = req * (1 / r_req(k) - 1 / p0) * r_att^2 / r_req(k)^2;%斥力分量1:障碍物指向路径点的斥力
            P_req2 = req * (1 / r_req(k) - 1 / p0)^2 * r_att;%斥力分量2:路径点指向目标点的分引力
            P_reqk = P_req1 / r_req(k) * V_req(k,:) + P_req2 / r_att * V_att;%合力分散到x,y方向
            P_req = P_req + P_reqk;%斥力
        end     
    end
    %% 合力计算
    P = P_att + P_req;
    newNode = newNode + step * P / norm(P);
    path = [path; newNode];   
end

end

結果:

重力、反発ゲイン、ステップ サイズの選択が結果に影響し、適切に調整できることに注意してください。

特に人工ポテンシャル場法は極小値に陥りやすく、調整係数を加えて改善したとしても、場合によっては極小値に陥ることを避けられない。 

おすすめ

転載: blog.csdn.net/MWooooo/article/details/129149844