m分别使用Dijkstra算法和Astar算法进行刚体机器人最短路径搜索和避障算法的matlab仿真,带GUI界面

news2024/11/18 15:36:03

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

       Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止(BFS、prime算法都有类似思想)。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。

算法描述

(1)S为已经找到的从v出发的最短路径的终点集合,它的初始状态为空集,将源点加入S中。 其余顶点构成集合U。

(2)构建源点到其余顶点的距离列表,与源点不相连的顶点距离记为∞。

(3)广度遍历与源点相连的顶点,找到距离最近的顶点,则到这个顶点的最短路径就确定了,最短距离就是当前距离,将这个顶点从U中拿出,放入S中。

(4)用当前的顶点作为中间点,对其进行广度遍历,对遍历到的顶点距离进行更新。

(5)在U中搜索最短距离的顶点,将其放入S。

(6)以这个节点作为中间点广度搜索,更新距离。

(7)重复这个过程,直至U为空。
       Astar算法是一种图形搜索算法,常用于寻路。它是个以广度优先搜索为基础,集Dijkstra算法与最佳优先(best fit)算法特点于一身的一种 算法。AStar(又称 A*),它结合了 Dijkstra 算法的节点信息(倾向于距离起点较近的节点)和贪心算法的最好优先搜索算法信息(倾向于距离目标较近的节点)。可以像 Dijkstra 算法一样保证找到最短路径,同时也像贪心最好优先搜索算法一样使用启发值对算法进行引导。AStar的核心在于将游戏背景分为一个又一个格子,每个格子有自己的靠谱值,然后通过遍历起点的格子去找到周围靠谱的格子,接着继续遍历周围…… 最终找到终点。

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
isshow = 0;
if get(handles.checkbox1,'Value')==1
   isshow = 1;%是否显示动态过程
else
   isshow = 0;
end

isshow2 = 0;
if get(handles.checkbox2,'Value')==1
   isshow2 = 1;%是否显示搜索区域
else
   isshow2 = 0;
end 

isrigid = 0;
if get(handles.checkbox3,'Value')==1
   isrigid = 1;%是否为刚体机器人
else
   isrigid = 0;
end

algsel = 0;
if get(handles.checkbox4,'Value')==1
   algsel = 1;%算法选择
else
   algsel = 0;
end


X      = 250;
Y      = 150;
% Resolution / Grid Size for the Map_updata
%网格化处理,转换为矩阵
step   = str2num(get(handles.edit1,'string'));;%定义精度越小,精度越高
tmps1  = str2num(get(handles.edit2,'string'));
tmps2  = str2num(get(handles.edit3,'string'));

tmps3  = str2num(get(handles.edit4,'string'));
tmps4  = str2num(get(handles.edit5,'string'));


% Start point
Starts    = floor([tmps1(1),tmps1(2)]/step)
% Robot radius
Rad       = floor(tmps3/step);
% Clearance 
Clearance = floor(tmps4/step);

% Goal point
Ends   = floor([tmps2(1),tmps2(2)]/step);

Map    = func_map(X,Y,step);
Mapr   = func_map_rigid(X,Y,step,Clearance);

[R,C] = size(Map);

axes(handles.axes1);
Color_Map = [1,1,1;0,0,0;1,1,0;1,1,0;0,1,1;1,0,1;1,0,0]; 

Map_updata1 = Map;
Map_updata2 = Mapr;

Map_updata1(Starts(2),Starts(1)) = 5;%起点 
Map_updata1(Ends(2)  ,Ends(1))   = 6;%终点 
Map_updata2(Starts(2),Starts(1)) = 5;%起点 
Map_updata2(Ends(2)  ,Ends(1))   = 6;%终点 

colormap(Color_Map); 
image(Map_updata1);  
axis image; 

if algsel == 0
   [Map_updata,route]=func_Dijkstra(Map_updata1,Map_updata2,Starts,Ends,R,C,isshow,isshow2,isrigid);
else
   [Map_updata,route]=func_Astar(Map_updata1,Map_updata2,Starts,Ends,R,C,isshow,isshow2,isrigid);
end
Map_updata_=Map_updata;
for k = 2:length(route)-1 
    Map_updata(route(k)) = 7; 
    tmps = Map_updata_(route(k));
    Map_updata_(route(k))= 7; 
    
    image(Map_updata); 
    %显示机器人
    [x,y]=find(Map_updata_==7);
    hold on
    if isrigid==0
       plot(y(1),x(1),'bo','MarkerSize',2); 
    else
       [xrr,yrr] = rigid_robot(Rad,y(1),x(1));  
       plot(xrr,yrr,'b-');     
    end
    hold off;
    axis image; 
    
    Map_updata_(route(k))= tmps; 
    pause(0.00002);         
end 
02_064m

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片加贴纸怎么添加?快来使用这些实用的添加方法

有时候我们需要发送一些图片给对方,可是图片上有自己的隐私,而且这些信息都显示在图片中间,那我们应该怎么处理这部分信息呢?可能有些小伙伴会使用马赛克来模糊这部分信息,但是马赛克不但影响图片美观,处理…

乐园管理系统| 乐园小程序 | 数字化门店会员管理

商场乐园总是不缺小孩子们的嬉闹,旁边也不缺拥挤的家长,不同于以前,现在的年轻家长,由于市场服务/产品多样化及思想进步,对自己孩子的衣食住行玩等方面非常上心,小孩子的天性使然,乐园行业在近些…

pca降维

两个矩阵相乘的意义是将右边矩阵中的每一列向量 ai 变换到左边矩阵中以每一行行向量为基所表示的空间中去 选择不同的基可以对同样一组数据给出不同的表示,如果基的数量少于向量本身的维数,则可以达到降维的效果。 将一组 N 维向量降为 K 维&#xff0…

SpringCloud-Ribbon负载均衡

关于Ribbon负载均衡 1.什么是Ribbon Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。 简单的说,Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将 Netflix的中间层服务连接在一起。…

智慧工地管理系统解决方案厂商-喜讯科技

智慧工地是建筑行业管理结合互联网的一种新的管理系统,应用最新的大数据、云计算和物联网的技术,对施工现场的人、机、料、法、环等资源进行集中管理,以可控化、数据化以及可视化的智能系统对项目管理进行全方位立体化的实时监管。 喜讯科技智…

elasticsearch8.5体验(docker部署)

服务部署 拉取elasticsearch镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.5.0拉取kibana镜像 docker pull docker.elastic.co/kibana/kibana:8.5.0创建docker网络 docker network create elastic启动elasticsearch docker run --name es01 --net el…

使用固定的公网TCP端口地址远程桌面【内网穿透】

文章目录1. 为远程桌面保留一个TCP地址2. 配置远程桌面隧道2.1 登录cpolar web ui2.2 修改远程桌面隧道信息2.3 查看公网地址3. 使用固定TCP地址远程桌面总结在上一篇文章中,我们通过cpolar映射远程桌面3389端口,成功实现了在外远程桌面控制家里/公司的W…

万字干货|Synchronized关键字详解

文章目录前言线程安全什么是synchronized关键字?synchronized实现方式1.修饰实例方法2.修饰静态方法3.修饰代码块synchronized关键字底层原理synchronized修饰实例方法monitor锁是什么?Java对象内存布局synchronized修饰代码块锁优化自旋锁锁粗化锁消除锁…

服务器硬件规格常用查看命令——通用命令

1. lshw 使用lshw命令可以查看服务器硬件配置的详细信息。使用它可以在支持DMI的x86或IA-64系统以及某些PowerPC机器上打印内存配置、固件版本、主板配置、CPU版本、G4可以工作)。目前该命令支持 CPU频率、缓存、总线速度等信息(已知PowerMac DMI&#…

[附源码]JAVA毕业设计同德佳苑物业信息(系统+LW)

[附源码]JAVA毕业设计同德佳苑物业信息(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

Java正则表达式

Java正则表达式正则表达式概述、初体验正则表达式的匹配规则正则表达式的常见案例正则表达式在方法中的应用正则表达式爬取信息正则表达式概述、初体验 正则表示: 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。 正则表达式初…

为远程群辉NAS配置固定二级子域名【内网穿透】

由于使用免费的cpolar内网穿透,所生成的公网地址为随机临时的公网地址,24小时内会发生变化。对于需要长期访问的用户来讲,我们可以为其配置固定的二级子域名,同时提高带宽,实现更为高效流畅的访问。 配置固定的二级子…

β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子|葡聚糖修饰BiO2-x纳米片

β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子|葡聚糖修饰BiO2-x纳米片 中文名称:β-1,3-D-葡聚糖修饰仿生中空二氧化硅复合粒子 产品描述:仿生中空二氧化硅粒子和β1,3D葡聚糖经过偶联反应后得到;其中,仿生中空二氧化硅粒子的纳米传输孔道的孔径范…

AT8637S(PHS/EN输入接口单通道0.8A低压H桥IC)

描述 AT8637S为摄像机、消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。AT8637/AT8637S能够驱动一个直流电机或其他诸如螺线管的器件。输出驱动模块由N MOS功率管构成的H桥组成,以驱动电机绕组。AT8637/AT8637S 能够…

[附源码]Python计算机毕业设计SSM基于响应式交友网站(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

大数据开发要学Java框架吗?

大数据开发要学Java框架吗?学习大数据要去学习Java而且还要精通,不仅要掌握Java基础知识还要掌握一些核心的Java架构。从java基础开始,学习大数据开发过程中必备的离线数据分析、实时数据分析和内存数据计算等,掌握大数据体系中几乎所有的核心…

(八)Vue之计算属性

文章目录插值语法实现methods实现计算属性实现计算属性简写Vue学习目录 上一篇:(七)Vue之事件处理 先看一个需求:提供两个输入框,一个输入姓,一个输入名,在下面展示全名。 插值语法实现 页…

vue3中的四种插槽的介绍-保证让你看看的明明白白!

插槽 当组件中只有一个插槽的时候,我们可以不设置 slot 的 name 属性。 v-slot 后可以不带参数,但是 v-slot 在没有设置 name 属性的时候, 插槽口会默认为“default”。 插槽主要是在封装组件的时候去使用 注意点:v-slot 只能添加…

【操作系统】操作系统硬件组成和进程

硬件组成体系结构 1.为什么要学操作系统 从操作系统-网络-应用程序-存储等多方面诊断和优化。比如:接口突然响应慢、服务器内存、CPU占用率高、Redis、MySQL查询慢,怎末排查问题。 2.性能优化诊断方法论 (1)围绕两个点&#x…

第12章 初识消息队列(MessageQueuing)

1 Redis分布式缓存数据库结合“StackExchange.Redis”中间件实现消息队列(MessageQueuing) Redis分布式缓存数据库消息队列(MessageQueuing)队列的实现模式有: 1、【生产(Producter)】--【消费(Worker)】模式。 变种模式:【基于异步消息队列List lpush-b…