movebase导航和地图数据的使用 - 6 local planner如何使用global planner计算出的路径规划和自己的local costmap数据完成避障

具体需要看看一下localplanner如何循环控制底座移动。

Globalplanner会使用dijkstra算法找到一条最短路径plan叫做globalplan,因为planthread一直在运行,所以这个plan一直在更新,所以只要globalcostmap一直在变化,那么这个globalplan也会一直变化。有了globalplan,就可以把他设置给localplanner.

然后localplanner把globalplan转换成基于localplanner坐标系的坐标点,将一些超出了localcostmap范围的坐标点去掉。将转换后的Plan数据设置给localplanner.然后让Localplanner算出多条可选轨迹,通过criticfunction给每个轨迹打分,找到最优的轨迹,然后计算出速度控制命令。在localplanner里面,给各个方向的轨迹打分时,会考虑localcostmap里面的障碍物数据,从而将和障碍物冲突的轨迹抛弃。还会考虑到local的目标点,和localplan.

障碍物的规避主要有两个阶段:

1.global planner使用global costmap数据会规避已知的障碍物,所以globalplan里面已经将该障碍物规避了。

2. local planner为达到local目标点,会使用localcostmap里面新遇到的障碍物数据,使用criticfunction打分机制找出一条最佳的local轨迹规划,并产生速度控制命令。



movebase里下面的函数循环来计算速度并发送给底座。

MoveBase::executeCycle函数。

→boolDWAPlannerROS::computeVelocityCommands(geometry_msgs::Twist&cmd_vel) {

实际使用的是DWAPlanner。



详细分析DWAPlannerROS::computeVelocityCommands(geometry_msgs::Twist&cmd_vel) {

1. 得到机器人当前位置

2.调用LocalPlannerUtil::getLocalPlan函数先调用base_local_planner::transformGlobalPlan函数,遍历globalplan中的点,只保留到机器人距离在localcostmap范围之内的点。再将这些plan中的坐标点转换成基于localplanner使用的frame坐标系的数据。由于localcostmap是4米宽,所以半径是2米,所以将大于2米的坐标点会被去掉。从而确保我们得到一个局部的plan数据,减少后期的计算量。



3.调用DWAPlanner::updatePlanAndLocalCosts函数,将当前机器人位置,和上面过滤转换后的plan数据设置给loaclaplanner. planner里面的path_costs,goal_costs是criticcost function,他们由此知道了更新后的Plan数据和目标坐标,注意这个更新后的plan的最有一个点就是localplanner的目标。这些criticfunction在后面的路径规划中用来给路径打分。



4.然后调用LatchedStopRotateController::isPositionReached判断是否已经到达了目标地,如果到达,下面就可以旋转到目标方向,如果没有到,继续下面。



4. 如果没有到达目的地,调用boolDWAPlannerROS::dwaComputeVelocityCommands函数计算最终要使用的速度。首先调用base_local_planner::TrajectoryDWAPlanner::findBestPath

move_base介绍 move_bae框架参考:http://wiki.ros.org/move_base构成它由如下三部分构成: 实现一个actionlib,用于设定目标位置。 连接global planer和local planner,用于实现导航。可以通过重新实现nav_core::BaseGlobalPlanner 和 nav_core::BaseLocalPlanner 的接口,修改global planer 阅读详情

相关推荐

ROS机器人启动move base时代价地图概率性无法加载的原因及解决方法

最近,使用ROS机器人,在启动move_base 节点时,概率性会出现全局和局部代价地图不加载的问题,此时,发布目标点也无法启动路径规划。而且该问题有时候出现概率很低,比如启动10次,会有1次发送该情况,有时候概率又比较高,运气最差的一次,启动了8次才正常启动。

慕羽★的博客 2183

base_lcoal_planner的LocalPlannerUtil类中getLocalPlan函数详解

本文主要介绍base_lcoal_planner功能包中LocalPlannerUtil类的getLocalPlan函数,以及其调用的transformGlobalPlan函数、prunePlan函数的相关内容

慕羽★的博客 972

新手入门:N-CMAPSS数据集解析与实战指南

本文详细解析了N-CMAPSS数据集的结构与应用,为新手提供航空发动机故障预测的实战指南。通过Python代码示例展示数据加载、探索和特征工程技巧,帮助读者快速掌握剩余寿命(RUL)预测的关键步骤,并分享常见问题解决方案与进阶学习路径。

weixin_29056701的博客 378

费雪的未来增长评估:预测颠覆性技术的影响

本文旨在提供一个系统性的框架,用于评估和预测颠覆性技术的增长轨迹。我们将重点关注费雪增长模型(Fisher-Pry Model)这一经典技术扩散理论,探讨其在现代技术预测中的应用价值。文章首先介绍费雪增长模型的基本概念,然后深入其数学原理和算法实现。随后展示实际应用案例,讨论工具资源,最后探讨未来发展趋势。每个部分都包含详细的技术实现和理论分析。费雪增长模型(Fisher-Pry Model):一种描述技术替代过程的S型增长模型,用于预测新技术取代旧技术的速率。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 929

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

算法大师! 527

SAP GR(Group Reporting)合并报表内容及功能简介(五)-合并和抵消

随着合并和收购数量的显著增加,企业在全球经济中面临着诸多挑战。其中最常见的是法律实体与子公司之间缺乏透明度,导致无法以经济高效的方式对账法律实体与子公司之间的公司间交易,从而造成结算出现重大延迟。公司间匹配和对账功能允许用户在关账过程中进行早期分析,以避免公司间差异,并缩短关账时的延迟。公司间匹配和对账功能交易级别匹配和实时对账基于各种组织维度(如公司、利润中心和合并单位)的灵活建模自动差异解决。应用内通信和工作流。与公司间抵销集成。

weixin_43853754的博客 4403

Python爬虫实战:高效爬取法律法规数据库的完整指南

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的法律法规数据库爬虫。我们将从爬虫的基本原理讲起,逐步深入到反爬机制应对、数据解析与存储、性能优化等高级话题。文章包含完整的代码实现,使用requests-html、aiohttp等现代库,以及应对法律数据库特殊结构的处理技巧。通过本文,您将掌握构建专业级法律数据采集系统的全套技能。关键词:Python爬虫、法律法规、数据采集、异步爬虫、反反爬本文详细介绍了使用Python爬取法律法规数据库的完整技术方案。

2201_76125261的博客 1275

【功能安全】软件安全架构

目录01 软件安全架构介绍02 软件架构设计模板03 软件架构设计示例 软件架构设计的目的 软件架构设计的原则 软件架构设计输入与输出 软件架构设计的要求 注:软件架构设计和软件安全要求之间的双向可追溯性。软件架构设计原则: 软件架构静态/动态设计(参考秒尼科技术) 软件架构静态设计 软件架构动态设计 软件分层架构设计 软件架构设计安全机制错误探测的安全机制 其中:数据的范围检查指输入输出数据的范围进行检查,例如:在程序中我们可以通过数据范围来排除数据的正确性;合理性检查 例如:使用参

weixin_36460584的博客 515

【系统分析师】2026年上半年真题:论文及解题思路

四篇论文围绕系统与开发实践展开: 安全架构设计强调数据加密(国密算法)、零信任访问控制及容灾架构,以某医疗云平台为例,实现RTO<5分钟的高可用保障。 架构风格应用解析微服务/事件驱动等风格选型,结合电商平台案例,通过服务拆分与异步通信提升扩展性。 需求评审机制提出正式评审与走查结合的方法,在金融系统中减少30%返工,解决业务规则二义性问题。 LLM测试生成利用大模型从需求/代码生成用例,辅以人工校验,使测试效率提升50%,覆盖边缘场景。 各篇均遵循“背景-理论-实践”结构,突出

数据知道的博客 787

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: movebase导航和地图数据的使用 - 5 actionlib在movebase中的使用
下一篇: movebase导航和地图数据的使用 - 7 global costmap和local costmap的区别和用途
csshell2002
博客等级 码龄11年 30粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值