自动驾驶路径规划算法学习(1)—Dijkstra算法

写这个系列的第一篇文章是自动驾驶路径规划算法学习(2)—A*算法
这篇文章的起源是看了古月居的文章运动规划入门 | 白话Dijkstra,从原理到Matlab实现,由于其中的编程风格与之前A*算法的风格不同,所以将其重写。
理论部分不再赘述,可查看古月居的文章。

一、问题

给定材料(CreateMAP.m)中包含的MATLAB代码,可以生成50X50的地图,x表示障碍物,起点和终点均已给定,用Dijkstra算法实现路径规划。

二、说明

古月居在文章中也给出了代码实现,可查看其文章。
之前采用了A *算法的Matlab实现来进行代码实现,个人认为其实现结构较完整,所以本文采用该结构进行Dijkstra算法的实现。
以下介绍各模块功能。

三、main.m

主程序文件,包括调用创建的地图,起止点,调用函数Dijkstra算法获取路径,绘制程序运行过程图像。

% 该文件为以map.mat为地图文件,point.mat为起止位置文件,
% 进行Dijkstra算法路径规划的主程序
clc
clear all
close all;
disp('Dijkstra Path Planing start!!')
load map.mat                    % 加载地图
load point.mat                  % 加载起止位置点
[map.XMAX,map.YMAX] = size(MAP); %%代表我们要画一个地图的长和宽
map.start = node(1:2);  %起始点 注意必须在地图范围内
map.goal = node(3:4);  %目标点 注意必须在地图范围内
obstacle = GetObstacle(map,MAP);% 获取边界数据和障碍物坐标
clear MAP node                  % 后续程序不再使用这两个变量
%obstacle = [obstacle;4,1; 4,2; 4,3; 4,4; 3,4 ;2,4;];%全封死的情况,是没有路的

% 画出地图和起止点
figure(1)
if length(obstacle)>=1
    plot(obstacle(:,1)+.5,obstacle(:,2)+.5,'rx');hold on;
    % plot(obstacle(:,1),obstacle(:,2),'om');hold on;
end
pause(1);
h=msgbox('Please confirm the map information and click the buttion "confirm".');
uiwait(h,20);% 5s后关闭消息框
if ishandle(h) == 1
    delete(h);
end
close 1
figure(1)
axis([1 map.XMAX+1 1 map.YMAX+1])
set(gca,'YTick',0:1:map.YMAX);
set(gca,'XTick',0:1:map.XMAX);
grid on;hold on;
% 绘制边界和障碍点
plot(obstacle(:,1)+.5,obstacle(:,2)+.5,'rx');hold on;
% 绘制起始点
plot(map.start(1)+.5,map.start(2)+.5,'bo');hold on;
% 绘制终止点
plot(map.goal(1)+.5,map.goal(2)+.5,'gd');hold on;
text(map.goal(1)+1,map.goal(2)+.5,'Target');
% plot(map.start(1),map.start(2),'*r');hold on;
% plot(map.goal(1),map.goal(2),'*b');hold on;

% 采用Dijkstra算法进行路径规划
path = Dijkstra(obstacle,map)% A*算法

%画出路径
%
if length(path)>=1
    plot(path(:,1)+0.5,path(:,2)+0.5,'-m','LineWidth',5);hold on;
end
%
  • 0
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
自动驾驶路径规划算法是指无人车为了到达目的地而做出决策和计划的过程,以规划出带速度信息的路径。其中,D*算法是一种常用的路径规划算法,它是由卡耐基梅隆机器人中心的Stentz在1994年提出的,主要用于机器人探路和美国火星探测器上的路径规划。与传统的A*算法相比,D*算法在重规划时具有更高的计算效率,因为它储存了空间中每个点到终点的最短路径信息。D*算法是一种反向搜索算法,即从目标点开始搜索过程,并在初次遍历时保存每个节点的信息。这使得D*算法能够更好地适应环境变化,并提供更高效的路径规划。\[1\] 另外,经典的A*算法是一种常见的路径规划算法,它使用曼哈顿距离作为距离估计,以获得最短路径。然而,经典A*算法并没有考虑实际道路坡度、道路滚动阻力系数和能量损耗等因素对行驶车辆的影响,因此其搜索的最短路径并不一定是符合实际车辆行驶的最优路径。\[3\] 综上所述,自动驾驶路径规划算法包括D*算法和经典A*算法等,它们都是为了实现无人车安全、舒适地到达目的地而设计的。这些算法通过考虑不同的因素和采用不同的搜索策略,以提供最优的路径规划方案。\[2\] #### 引用[.reference_title] - *1* *2* [自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等)](https://blog.csdn.net/CV_Autobot/article/details/127781014)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [自动驾驶路径规划——A*(Astar)算法](https://blog.csdn.net/sinat_52032317/article/details/127077625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值