Algoritmo de planificación de ruta 3 Método de campo potencial artificial mejorado (Matlab)

Tabla de contenido

Campo potencial artificial tradicional

campo potencial gravitacional

campo potencial repulsivo

 campo de potencial de fuerza

 Problemas existentes en el método tradicional de campo potencial artificial

 Función mejorada del campo potencial artificial

 Implementación del código Matlab


Link de referencia:

[1] Zhu Weida. Investigación sobre la planificación de rutas para evitar obstáculos en vehículos basada en un método mejorado de campo potencial artificial [D], Universidad de Jiangsu, 2017.

En 1986, Khatib propuso por primera vez el método del campo potencial artificial y lo aplicó en el campo de la evitación de obstáculos por parte de robots. La idea básica de este método es construir un campo potencial repulsivo de obstáculo alrededor del obstáculo y un campo potencial gravitacional alrededor del punto objetivo, que es similar al campo electromagnético en física. El objeto controlado está sometido a una fuerza repulsiva y una fuerza gravitacional en el campo compuesto formado por estos dos campos potenciales. La fuerza resultante de la fuerza repulsiva y la fuerza gravitacional guía el movimiento del objeto controlado y busca un camino para evitar obstáculos sin colisiones.

Este método tiene una estructura simple y es conveniente para el control en tiempo real de bajo nivel. Se ha utilizado ampliamente para evitar obstáculos en tiempo real y controlar trayectorias suaves. Sus desventajas radican en la existencia de soluciones óptimas locales, objetivos inalcanzables y colisiones. con obstáculos.

Campo potencial artificial tradicional

campo potencial gravitacional

campo potencial repulsivo

El factor que determina el campo potencial de repulsión del obstáculo es la distancia entre el automóvil y el obstáculo. Cuando el automóvil no entra en el rango de influencia del obstáculo, el valor de energía potencial que recibe es cero; después de que el automóvil ingresa en el rango de influencia del obstáculo. obstáculo, la distancia entre los dos Cuanto mayor es la distancia, menor es el valor de la energía potencial del automóvil, y cuanto menor es la distancia, mayor es el valor de la energía potencial del automóvil.

 campo de potencial de fuerza

inserte la descripción de la imagen aquí  +  inserte la descripción de la imagen aquí

 Problemas existentes en el método tradicional de campo potencial artificial

 Función mejorada del campo potencial artificial

 

 Implementación del código Matlab

principal función principal

%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');

La función principal del método del campo de potencial artificial:

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

resultado:

Cabe señalar que la selección de gravedad, ganancia de repulsión y tamaño del paso afectará el resultado y se puede ajustar adecuadamente.

En particular, el método del campo de potencial artificial tiende a caer en un mínimo local, incluso si se mejora agregando un factor de ajuste, en algunos casos sigue siendo inevitable. 

Supongo que te gusta

Origin blog.csdn.net/MWooooo/article/details/129149844
Recomendado
Clasificación