💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
本文档提供的代码使用概率路线图算法进行机器人运动规划。假设如图1所示,您有一个带头顶摄像机的机器人竞技场。摄像机可以很容易地校准来自摄像头的图像可用于创建机器人地图,如图所示。这是一个对现实生活场景的简单实现,其中使用多个摄像头来捕捉不同部分整个工作空间,它们的输出被融合在一起,形成运动规划算法使用的整体地图。这个教程将假设这样的映射已经存在,并作为映射的输入。
同样的摄像头也可以用来捕捉机器人在规划开始时的位置,以及机器人移动时的位置。这解决了定位问题。一个有趣的感兴趣区域成为机器人运动规划算法中的目标。在图1的地图中没有显示机器人。本教程假设机器人的起点和目标点已明确给出。当前教程的目的仅是为机器人规划一条路径;代码不会进一步使机器人在期望的路径上移动,这需要控制算法来实现。
为了简化,机器人被视为一个点大小的对象。这使得实现和理解变得快速,而无需深入研究碰撞检测库和多维配置空间的概念。
一、核心算法原理
概率图路径规划(Probabilistic Roadmap, PRM)是一种基于采样的路径规划方法,其核心思想是通过随机采样构建无碰撞路径图,再利用图搜索算法寻找最优路径。算法分为两个阶段:
- 学习阶段(构建概率图)
- 随机采样:在机器人工作空间中随机生成大量节点,采样策略包括均匀采样、高斯采样等。
- 邻域连接:对每个节点,在其邻域内寻找其他节点,通过直线连接或RRT连接生成边,并检测碰撞。
- 图优化:通过简化(移除冗余节点)、锐化(平滑路径)等操作提升图质量。
- 查询阶段(路径搜索)
- 连接起点与目标点:将机器人起点和目标点连接到概率图中,通常使用局部规划器寻找最近节点并连接。
- 图搜索算法:采用A*、Dijkstra等算法在图中搜索最优路径,最终路径可能包含尖锐转弯,需通过样条曲线拟合或路径锐化进行平滑处理。
二、算法优势与局限性
- 优势
- 高维空间适用性:计算复杂度与空间维度无关,适合处理高维路径规划问题。
- 复杂环境处理能力:无需精确建模环境,通过随机采样探索连通性,可处理障碍物、狭窄通道等复杂约束。
- 可重复使用性:概率图构建后可多次用于不同起点和目标点的路径规划,提升效率。
- 实现简单性:仅需实现采样、局部规划和图搜索等基本模块。
- 局限性
- 完备性弱:参数设置不合理时(如采样点不足或邻域阈值过小),可能无法找到可行路径。
- 稳定性差:采样随机性导致同一问题多次求解结果可能不同,不适用于严格稳定性要求的场景。
- 计算效率依赖参数:采样点数量和邻域阈值显著影响计算时间和路径质量。
三、应用场景与改进方向
- 应用场景
- 自动驾驶:在复杂道路环境中规划安全路径。
- 仓储物流:为AGV(自动导引车)规划高效搬运路径。
- 医疗手术:为手术机器人规划无碰撞操作路径。
- 改进方向
- 动态环境适应:结合传感器数据实时更新概率图,适应环境变化。
- 混合算法融合:将PRM与RRT、A*等算法结合,提升路径质量和搜索效率。
- 并行计算优化:利用GPU加速采样和碰撞检测过程,提升实时性。
📚2 运行结果
部分代码:
mapName='map1.bmp'; % input map read from a bmp file. for new maps write the file name here
source=[10 10]; % source position in Y, X format
goal=[490 490]; % goal position in Y, X format
k=10; % number of points in the PRM
display=true; % display processing of nodes
map=im2bw(imread(mapName),0.5);
if ~feasiblePoint(source,map), error('source lies on an obstacle or outside map'); end
if ~feasiblePoint(goal,map), error('goal lies on an obstacle or outside map'); end
imshow(map);
rectangle('position',[1 1 size(map)-1],'edgecolor','k');
hold on
vertex=[source;goal]; % source and goal taken as additional vertices in the path planning to ease planning of the robot
if display, rectangle('Position',[vertex(1,2)-5,vertex(1,1)-5,10,10],'Curvature',[1,1],'FaceColor','r'); end
if display, rectangle('Position',[vertex(2,2)-5,vertex(2,1)-5,10,10],'Curvature',[1,1],'FaceColor','r'); end
tic;
while length(vertex)<k+2 % iteratively add vertices
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、文章下载
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取