自适应蚁群算法优化的攀爬机器人的路径规划

        大家好,我是带我去滑雪!

        攀爬机器人是一种能够在复杂环境中自主移动和攀爬的具有广阔应用前景的智能机器人,具有较强的应用潜力和广泛的研究价值。随着科技的不断发展,攀爬机器人在许多领域中的应用越来越广泛,例如建筑物维护、救援任务、环境监测等,其在复杂环境下的路径规划问题一直是学术界和工业界的关注焦点。在现实应用中,攀爬机器人的自主移动和路径规划仍然面临很多挑战。因为攀爬机器人工作环境复杂、移动范围高度不确定,传统的路径规划方法存在着计算复杂度高、搜索效率低等问题,往往难以适应攀爬机器人的需求。所以,研究如何有效地规划攀爬机器人的行驶路径已经成为了当前研究的热点问题。

        自适应蚁群算法作为一种常用的优化算法,具有并行计算能力、适应性强以及全局搜索的特性,因而在解决路径规划的优化问题等方面广泛应用。本项目旨在基于自适应蚁群算法优化,探索解决攀爬机器人路径规划问题的新方法。通过利用自适应蚁群算法的全局搜索能力和路径优化特性,来提高全局路径规划的效率和质量,为攀爬机器人的实际应用提供有效的路径规划解决方案。使用matlab软件进行模拟,下面开始代码实战。

目录

(1)地图建模

(2)机器人建模

(3)自适应蚁群算法代码实现


(1)地图建模

        栅格法建模是一种广泛应用于地理信息系统中的空间数据建模方法。由于采用其方法建模的分辨率高,安全系数高,信息清晰,规划空间表达一致,灵活性强,易于存储和更新,在编程中容易实现,所以采用栅格法建立攀爬机器人的工作环境模型。下面,绘制栅格划分图:

function [map1] = map1(type)% type=1 简单栅格 =2 复杂栅格
map_easy = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1];
map_comp = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 1 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 1 11 0 0 1 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1 11 0 1 1 1 0 0 1 0 0 1 1 0 1 1 0 1 0 1 11 1 1 0 1 1 0 0 0 1 1 1 1 1 1 0 1 0 1 11 0 0 0 1 1 0 0 0 1 1 0 1 1 1 1 0 0 1 11 0 1 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 1 11 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 0 0 1 11 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 11 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1 1 11 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 1 11 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 11 1 1 0 1 1 1 1 1 0 1 0 0 0 1 0 0 1 0 11 1 1 1 1 1 1 1 1 0 1 0 0 0 1 0 0 1 0 11 1 0 0 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 11 1 0 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 11 1 1 1 1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 11 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 11 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1];if type==1map1 = map_easy;
elsemap1 = map_comp;
end

输出结果:

(2)机器人建模

       攀爬机器人利用视觉传感器对工作环境的信息进行采集整理,进行降维处理,将三维空间的信息转化为二进制方阵,进而在一个二维平面空间中,找到一条从起始位置到目标位置的无重复无碰撞的最优解路径。出于对建模的有效性考虑,假设攀爬机器人在二维空间中移动,将攀爬机器人视作一个红色质点在二维空间内移动,因此机器人的体积可忽略不计。工作空间内的障碍物可用黑体正方形进行表示。

(3)自适应蚁群算法代码实现

         采用自适应蚁群算法在20×20的平面空间中寻找一条从起始位置S到目标位置T的最优路径,在该机器人二维空间模型中存在着多个不移动的不规则障碍物。其中,起始位置O的坐标为(10,16),目标位置E的坐标为(4,2)。算法的执行流程如下图所示:

clc,clear
close all
rng(2)%% 构建简单/复杂环境栅格图
type = 1; % 1 简单栅格 2 复杂栅格
map = map(type);
map1 = map;%% 画出栅格
[m,n] = size(map);
figure(1)
for i=1:mfor j=1:nif map(i,j)==0x1=j;   y1=n-i;x2=j;   y2=n-i+1;
%             if j-1~=0
%                 map1(i,j-1) = 0;
%             endx3=j-1; y3=n-i+1;if i+1<=mmap1(i+1,j) = 0;endx4=j-1; y4=n-i;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0,0,0]);hold onelsex1=j;   y1=n-i;x2=j;   y2=n-i+1;x3=j-1; y3=n-i+1;x4=j-1; y4=n-i;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendend
end
axis([0,m,0,n])
grid on
grid minor
box on
set(gca,'LineWidth',1)
map(:,:) = map1(end:-1:1,:);%% 起始点/终点
Spoint = [2,4];
Epoint = [16,10];
Start = sub2ind([m,n],Spoint(1),Spoint(2));% 下标转索引
End = sub2ind([m,n],Epoint(1),Epoint(2));% 下标转索引%% 参数的设置
popsize = 50;           % 蚂蚁数目
maxiter = 800;          % 最大迭代次数
Rho = 0.1;              % 信息素挥发系数
Beta = 5;               % 启发式因子重要程度参数
Alpha = 2;              % 信息素重要程度参数
q0 = 0.9;               % 偏向选择的阈值
Q=1;
X = size(map,1);      % 问题的状态空间矩阵的行数
Y = size(map,2);      % 问题的状态空间矩阵的列数tauInit = 1/((X+Y)*(X*Y));        % 初始化信息素的量
tauInfo = tauInit .* ones(X*Y,8); % 8个节点 对于某个节点 其可选的下一个节点是其邻接节点 共8个upPheromone = 500;              % 信息素上限
lowPheromone = tauInit;         % 信息素下限bestSoFar_path_length = inf;    % 当前最优路径长度
bestSoFar_pathNode = [];bestSoFar_PathNode = cell(1,maxiter);
bestSoFar_PathLength = zeros(1,maxiter);
best_dist = [];%% 迭代
tic
for NC=1:maxiterfor k=1:popsizecurrentNode = Start;pathInfo = currentNode; % 记录一只蚂蚁的行驶路径的节点信息path_length = 0;        % 记录蚂蚁走过的路径长度distan = []; % 距离矩阵availableNode = findNextNodeSet(map,currentNode); %% 未经过禁忌表处理的可选节点nodeNumber = size(availableNode,1);while(nodeNumber>0&&currentNode~=End)% 计算启发信息heuristicInfo = compute_HeuristicInfo(End,map,availableNode);tauInfo_ = tauInfo(currentNode,:)';% 提取信息素% 启发信息和信息素的综合[info,availableNode_] = CCP(...tauInfo_,heuristicInfo,pathInfo,availableNode,Alpha,Beta); % 经过禁忌表处理的可选节点nodeNumber = size(availableNode_,1);% 如果无可选节点 就跳出循环if nodeNumber==0breakendnextNode = selectNextNode(info,availableNode_,q0);[xi,yi] = ind2sub([m,n],currentNode);[x,y] = ind2sub([m,n],nextNode);distanceCurrentAndNext = sqrt( (x-xi)^2 + (y-yi)^2 );distan = [distan distanceCurrentAndNext];path_length = path_length + distanceCurrentAndNext;pathInfo = [pathInfo,nextNode];%%% 判断下一节点集是否中存在目标点currentNode = nextNode;availableNode = findNextNodeSet(map,currentNode);nodeNumber = size(availableNode,1);flag = ismember(End,availableNode);if flag==1nextNode = End;pathInfo = [pathInfo,nextNode];[xi,yi] = ind2sub([m,n],currentNode);[x,y] = ind2sub([m,n],nextNode);distanceCurrentAndNext = sqrt( (x-xi)^2 + (y-yi)^2 );distan = [distan distanceCurrentAndNext];path_length = path_length + distanceCurrentAndNext;breakendend %end while,% 更新路径if pathInfo(end) == End && bestSoFar_path_length>path_lengthbestSoFar_path_length = path_length;bestSoFar_pathNode = pathInfo;best_dist = distan;end% 更新信息素for i=1:size(pathInfo,2)-1currentCity = pathInfo(1,i);nextCity = pathInfo(1,i+1);[xi,yi] = ind2sub([m,n],currentCity);[x,y] = ind2sub([m,n],nextCity);relativeIndex = CCTRI(xi,yi,x,y);%第二点相对于第一个点的位置tau_1 = tauInfo(currentCity,:);tau_1(1,relativeIndex) = (1-Rho)*tau_1(1,relativeIndex) + Q/distan(i);if tau_1(1,relativeIndex)<lowPheromonetau_1(1,relativeIndex) = lowPheromone;endtauInfo(currentCity,:) = tau_1;endend bestSoFar_PathNode{1,NC} = bestSoFar_pathNode;bestSoFar_PathLength(1,NC) = bestSoFar_path_length;% 更新信息素for i=1:size(bestSoFar_pathNode,2)-1currentCity = bestSoFar_pathNode(1,i);nextCity = bestSoFar_pathNode(1,i+1);[xi,yi] = ind2sub([m,n],currentCity);[x,y] = ind2sub([m,n],nextCity);relativeIndex = CCTRI(xi,yi,x,y);%第二点相对于第一个点的位置tau_1 = tauInfo(currentCity,:);tau_1(1,relativeIndex) = (1-Rho)*tau_1(1,relativeIndex) + Q/best_dist(i);if tau_1(1,relativeIndex)<lowPheromonetau_1(1,relativeIndex) = lowPheromone;endtauInfo(currentCity,:) = tau_1;end
end %end NCmaxtoc
clear currentNode distanceCurrentAndNext bad_pathNode flag heuristicInfo NC NCmax nextNode ...nodeNumber num_point path_length pathInfo info availableNode availableNode_ ...bestSoFar_path_length bestSoFar_pathLength bestSoFar_PathNode%% 绘制全局最优路径节点信息
the_end_path = bestSoFar_pathNode;
the_end = length(bestSoFar_PathLength);
length_shortest = bestSoFar_PathLength(1,the_end);
len_ROUTS = length(the_end_path);
Rx = the_end_path;
Ry = the_end_path;
for i=1:len_ROUTS[Rx(i),Ry(i)] = ind2sub([m,n],the_end_path(i));
end
plot(Ry,Rx,'r-','lineWidth',2);% 画出最优路径图
title(['Length of the global shortest road is ',num2str(length_shortest)])%% 绘制迭代图
figure(2)
plot(bestSoFar_PathLength,'r-','lineWidth',2)
xlabel('迭代次数')
ylabel('适应度值')
title(['进化过程 '])

输出轨迹路径图:

 输出算法迭代图:

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/173deLlgLYUz789M3KHYw-Q?pwd=0ly6
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

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

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

相关文章

Talk|CityU 助理教授马佳葳: CVPR 2024, 基于多模态理解的混合数据专家模型

本期为TechBeat人工智能社区第604期线上Talk。 北京时间6月27日(周四)20:00&#xff0c;香港城市大学助理教授—马佳葳的Talk已经准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “基于多模态理解的混合数据专家模型”&#xff0c;他向大家介绍了混合数据专…

【合作ACM出版,稳定EI、Scopus稳定检索】第五届城市工程与管理科学国际会议(ICUEMS 2024,8月2-4)

第五届城市工程与管理科学国际会议&#xff08;ICUEMS 2024&#xff09;将于2024年8月2-4日在天津举行。 会议的目的是为从事城市工程、管理科学相关领域的专家、学者、工程师和技术研究人员提供一个平台&#xff0c;分享科研成果和前沿技术&#xff0c;了解学术发展趋势&…

航空电子制造业企业数字化转型:智能工厂建设

引言 航空电子制造业是航空工业的重要组成部分&#xff0c;涵盖了飞机的电子系统、导航设备、通信系统、自动驾驶仪等关键组件。自20世纪中期以来&#xff0c;航空电子技术经历了快速发展&#xff0c;从最初的机械和模拟设备逐步过渡到数字化、网络化和智能化系统。现代航空电子…

中国高分辨率土壤质地数据(1KM)

土壤中各粒级占土壤重量的百分比组合&#xff0c;叫做土壤质地。土壤质地是土壤的最基本物理性质之一&#xff0c;对土壤的各种性状&#xff0c;如土壤的通透性、保蓄性、耕性以及养分含量等都有很大的影响是评价土壤肥力和作物适宜性的重要依据。 中国土壤质地空间分布数据是根…

搭建ragflow的步骤

前提条件 CPU > 4 核 RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 如果你并没有在本机安装 Docker&#xff08;Windows、Mac&#xff0c;或者 Linux&#xff09;, 可以参考文档 Install Docker Engine 自行安装。 启动服务器 …

C盘太满怎么办

C盘红了怎么办&#xff0c;最常见的问题是微信装在了C盘&#xff0c;需要通过设置来更换缓存文件位置。 此外&#xff0c;如果是工作电脑&#xff0c;钉钉、企业微信等都有可能产生和微信同样的问题&#xff0c;解决方式也相同&#xff0c;通过设置更换文件位置。 此外&…

Linux创建目录——mkdir命令,du命令,touch用法,创建tree拓扑图

1. mkdir 命令 格式 mkdir - 参数 路径 / 目录名 参数 -p &#xff1a;快速创建多级目录&#xff08;递归目录&#xff09; -v &#xff1a;显示创建目录的详细过程 例&#xff1a; [rootserver ~] # mkdir t1 [rootserver ~] # mkdir t2 t3 t4 [rootserver ~] # mk…

什么是GPIO口,GPIO口最简单的input/output

目录 一&#xff0c;什么是GPIO口 二&#xff0c;GPIO内部结构 三&#xff0c;GPIO口工作模式 一&#xff0c;什么是GPIO口 1.GPIO口是通用输入输出端口&#xff08;General-purpose input/output&#xff09;的英文缩写&#xff0c;是所有的微控制器必不可少的外设之一&…

每日一题系列-把字符串转换成整数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 题目 题目分析 对于这道题目而言&#xff0c;我们需要做到的是将字符串转换成整数。 这里我们需要注意几个点 首先我们需要保证下标在这个范围之内&#xff0c;所以我们会在每…

【Python】已解决:(SqlServer报错)SQL错误(208):对象名‘string_split’无效

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;&#xff08;SqlServer报错&#xff09;SQL错误&#xff08;208&#xff09;&#xff1a;对象名‘string_split’无效 一、分析问题背景 在使用Python连接SqlSe…

第二证券:股票盘口是什么?股票盘口基础知识?

股票的盘口是指在生意过程中实时盘面数据窗口。 盘口信息有&#xff1a;托付份额、生意生意五档挂单数据、股票开盘价、股票收盘价、股票涨跌幅、股票最高价、股票最低价、股票价、股票的量比、股票的表里盘数据、股票的总成交量、股票的换手率、股票的总股本、股票的流通股本…

python笔记----少儿编程课程

第1课&#xff1a; 认识新朋友-python 知识点&#xff1a; 1、在英文状态下编写Python语句。 2、内置函数print()将结果输出到标准的控制台上&#xff0c;它的基本语法格式如下&#xff1a; print("即将输出的内容") #输出的内容要用引号引起来&#xff0c;可…

主播美颜工具开发全攻略:美颜SDK从基础到进阶的技术指南

今天&#xff0c;笔者将为你详细介绍美颜SDK的基础知识以及如何进行进阶开发。 一、美颜SDK基础知识 什么是美颜SDK&#xff1f; 美颜SDK是一种软件开发工具包&#xff0c;包含了一系列用于图像处理的算法和功能&#xff0c;主要用于实时视频处理和图像优化。开发者可以将美…

CentOS安装Docker教程(包含踩坑的经验)

目录 一.基础安装 ▐ 安装Docker 二.启动Docker服务 三.配置Docker镜像加速 一.基础安装 在安装Docker之前可能需要先做以下准备 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载&#xff1a; yum remove docker \docker-client \docker-client-latest \docker-…

FastGPT 手动部署错误:MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo

在运行 FastGPT 时&#xff0c;mongodb 报如下错误&#xff1a; MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo 这是因为 mongo 没有解析出来&#xff0c;在 hosts 文件中添加如下信息&#xff1a; 127.0.0.1 mongo 重新运行 FastGPT 即可。 参考链接&#xff…

昇思25天学习打卡营第4天|网络构建

文章目录 网络构建 网络构建 在打卡第一天就简单演示了网络构建&#xff0c;一个神经网络模型表示为一个Cell&#xff0c;由不同的子Cell构成。使用这样的嵌套结构可以简单地使用面向对象编程的思维&#xff0c;对神经网络结构进行构建和管理。 继承nn.Cell类来定义神经网络&…

【MTK平台】连接蓝牙耳机播放音乐>插入有线耳机>再拔掉有线耳机,声音会从设备中播放一秒,再切到蓝牙耳机

一般这类情况优先考虑Audio的问题 修改如下这个BTA2DP_MUTE_CHECK_DELAY_MS 参数值既可&#xff0c;比如增加delay 把BTA2DP_MUTE_CHECK_DELAY_MS * 4改成 BTA2DP_MUTE_CHECK_DELAY_MS *8 frameworks/base/services/core/java/com/android/server/audio/AudioDeviceBroker.j…

Harris角点检测原理及其在python-opencv的调用

文章目录 原理测试 原理 Harris 角点检测的基本思路如下&#xff1a;考虑一个局部的区域&#xff0c;将其作为一个窗口四处移动&#xff0c;若窗口灰度发生了较大的变化&#xff0c;那么&#xff0c;就认为窗口内存在角点&#xff0c;否则窗口内就不存在角点。 对于图像 I ( …

力扣随机一题 位运算/滑动窗口/数组

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 3191.使二进制数组全部等于1的最少操作次数I【中等】 题目&#xff1a; 给…

bable 【实用教程】

简介 bable 用于将 ES6 的语法编译为 ES5 只关心语法&#xff0c;不关心 API 是否正确。不处理模块化&#xff08;webpack 会处理&#xff09; 搭建开发环境 安装相关的包 npm i babel/cli babel/core babel/preset-env新建文件 .babelrc&#xff0c;内容为 { "presets…