一种使 Dijkstra A* 规划出来的路径更平滑的方法

    我们知道一般用Dijkstra A* 等路径规划算法规划出来的路径都不是很平滑的   机器人沿着这些不平滑路径驾驶,效果差强人意,为了时机器人能自然的沿着给定路径行驶,必须对路径点做平滑处理

如上图  S表示路线规划的起点, E表示路线规划的重点 ,蓝色的线为路线规划 Dijkstra A*规划出来的路路线,但在实际行驶中,车辆不可能遇到大拐弯原地停下后转个90度的大弯,不仅可操作性不强,对于乘客也是非常危险的行为。在实际的行驶中,我们更希望车辆的路线如平滑处理后橙色线路,非常平缓平稳连贯的从S点行走到终点E。

 

假设路线规划的结果为点序列:[x1,x2,…xn] 
平滑后路线规划的点序列:[y1,y2,…yn] 

路线平滑的过程本质上是如下2种距离最小

<1 > 求解y(i)使得||x(i) - y(i)|| 的平方最小 (平滑后的点yi与原始点xi的偏离程度)

<2> 同时y(i)满足 || y(i) - y(i+1)||   (平滑后 点之间的距离)取值最小

 

即 最小化目标 alpha*||x(i) - y(i)||平方 + beta*|| y(i) - y(i+1)||  

求解最优解的方法采用梯度下降法(gradient descent),即通过多次迭代,调整y(i) 使得目标函数取得最小值。

初始化 y(i) = x(i)

迭代 y(i) := y(i) + alpha * [ x(i) - y(i) ] + beta * [y(i-1) - 2*y(i) + y(i + 1)]

matlab 代码:

clc;
clear;
% (x,y)一系列离散点 构成路径原始
x = [1 2 3 4 5 5 5 5 6 7 8 9 10 10 10 10 11 12 13 14 15 16 16 17];
y = [7 7 7 7 7 6 5 4 4 4 4 4 4 3 2 2  1 1 1 2 2 3 3 4];
alpha = 0.5; %
beta = 0.5; % 平滑程度

xi = x;% 初始化
yi = y;
% 迭代 8 次
 for k=1:8
    for i = 2:1:(length(x)-1) % 不优化起始点S 和 终点 E
       xi(i) = xi(i) + alpha*(x(i) - xi(i)) + beta*(xi(i-1) - 2*xi(i) + xi(i+1));
       yi(i) = yi(i) + alpha*(y(i) - yi(i)) + beta*(yi(i-1) - 2*yi(i) + yi(i+1));
    end
end
plot(x,y,xi,yi)
grid on

调节alpha beta参数 达到不同程度的平滑

 

 

 

 

  • 13
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
本实验使用Matlab编程实现了基于A*算法和Dijkstra算法的路径规划。两种算法都是单源最短路算法,其中Dijkstra算法能够处理带权重的图或网络,而A*算法则可在许多实际应用中快地找到最短路线。 在本实验中,我们构建了一个9×9网格地图,其中包含3个起点和3个终点,并随机设置了不同长度的障碍物。通过A*算法和Dijkstra算法遍历地图来查找从每个起点到每个终点的最短路径。 我们首先实现了Dijkstra算法,它首先将起点的距离初始化为0,所有其他点的距离初始化为无限大。然后,通过遍历所有尚未确定最短路径的节点,计算从起点到该节点的距离,并新相邻节点的最短距离。重复这个过程,直到所有节点都被遍历过。 接下来,我们实现了A*算法,它是一种启发式搜索算法。除了计算起点到每个节点的距离外,它还根据每个节点到终点的估计距离来决定下一个遍历节点。这个估计距离可以使用欧几里得距离或曼哈顿距离等方法来计算。通过使用这种启发式方法,A*算法可以减少搜索空间,从而快地找到最短路径。 最后,我们通过比较两种算法的搜索效率和路径质量来评估它们的表现。实验结果表明,在小规模的网格地图中,两种算法的搜索效率和路径质量没有显著差异。然而,在大型网格地图中,A*算法的搜索效率要高于Dijkstra算法。 总之,本实验演示了A*算法和Dijkstra算法的路径规划原理,并为了好地了解它们的表现而在Matlab中进行了比较。这将有助于选择最适合特定应用的算法。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值