ROS路径规划(全局路径规划)
目录
- 全局路径规划
- 自定义全局路径规划
- 注意
- 参考
路径规划包括全局路径规划和局部路径规划。
全局路径规划
ROS 的navigation官方功能包提供了三种全局路径规划器:carrot_planner、global_planner、navfn。我们通常使用的是navfn,如果机器人执行一些特殊任务而navfn不支持的话就需要自己写一个全局路径规划区并注册到ROS系统。
ROS的全局路径规划器是以lib插件形式(pluginlib)存在的,通过配置move_base 中base_global_planner参数指定实际路径规划执行时采用的全局路径规划器,这种设计大大提高了navigation包的可扩展性。
ROS官网wiki有详细的教程指导如何为ROS添加自定义的全局路径规划器。主要思路是:直接拷贝一份现成的全局路径规划器代码包,将软件包中的相关名字修改成想要的,最后实现下自己的makeplan方法即可。
自定义全局路径规划
为了向ROS添加一个新的全局路径规划器,新的路径规划器必须遵守nav_core包中定义的。
nav_core::BaseGlobalPlanner
C ++接口。一旦编写了全局路径规划器,它必须作为插件添加到ROS中,以便它可以被move_base包使用。
(1)编写路径规划类
Class Header/类头文件
第一步是为遵循nav_core::BaseGlobalPlanner的路径规划器编写一个新类,然后在该类中重写initialize
,makePlan
方法。。在carrot_planner.h中可以找到一个类似的例子作为参考。
(2)为全局规划类创建插件
1.注册规划器作为BaseGlobalPlanner插件:
这是通过指令PLUGINLIB_EXPORT_CLASS(global_planner::GlobalPlanner, nav_core::BaseGlobalPlanner)
完成的。其中,global_planner::GlobalPlanner
为自己定义的命名空间::类
。为此,必须包含库 #include <pluginlib/class_list_macros.h>
。
宏PLUGINLIB_EXPORT_CLASS
:允许一个类被动态加载,标记为一个导出的类。可以放在构成插件库的任何源(.cpp)文件中,通常放在导出类的.cpp文件的末尾。
插件描述文件:
XML文件,用于以机器可读格式存储有关插件的所有重要信息。它包含有关插件库的信息,插件的名称,插件的类型等。
举例rrt_star_planner_plugin.xml
:
<library path="lib/librrt_star_global_planner"><class name="RRTstar_planner/RRTstarPlannerROS" type="RRTstar_planner::RRTstarPlannerROS" base_class_type="nav_core::BaseGlobalPlanner"><description>This is RRT Star Global Planner Plugin by Rafael Barreto.</description></class>
</library>
在第一行 <library path="lib/librrt_star_global_planner">
我们指定插件库的路径。我们的例子,路径是lib/librrt_star_global_planner
,其中lib
是目录中的文件夹 ~/catkin_ws/devel/
。
在第二行中,我们首先指定我们将在move_base启动文件中使用的RRTstar_planner
插件的名称作为参数,它指定了要在nav_core
中使用的全局规划器。通常使用命名空间(RRTstar_planner
)后跟斜杠,然后使用类( RRTstarPlannerROS
)的名称来指定插件的名称。如果不指定名称,那么名称将等于该类型,在这种情况下将是RRTstar_planner::RRTstarPlannerROS
。它建议指定名称以避免混淆。该类型指定了实现插件的类的名称,在我们的例子中是RRTstar_planner::RRTstarPlannerROS
,而base_class_type
指定了实现插件的基类的名称,在我们的例子中是nav_core::BaseGlobalPlanner
。
第三行所述<description>
标记提供关于插件的简要说明。有关插件描述文件及其相关标签/属性的详细说明。
为什么我们需要这个描述文件? 除了代码宏,我们需要这个文件,以允许ROS系统自动发现,加载。插件描述文件还包含重要信息,如插件的描述,不适合加在宏定义里。
注册插件到ROS包系统:
待补充
2.makePlan()
方法实现:在开始和目标参数用来获取初始位置和目标位置。在该说明性实现中,以起始位置(plan.push_back(start)))作为开始的规划变量。然后,在for循环中,将在规划中静态插入虚拟位置,然后将目标位置作为最后一个位置插入规划。然后,此规划路径将发送到move_base全局规划模块,该模块将通过ROS话题nav_msgs/Path
进行发布,然后将由本地规划模块接收。
现在,全局规划类已经完成,您已准备好进行第二步,即为全局规划类创建插件,将其集成到move_base包的全局规划模块nav_core::BaseGlobalPlanner
中。
(3)编译
要编译上面创建的全局规划库,必须将其添加到CMakeLists.txt中。添加代码:
add_library(global_planner_lib src/path_planner/global_planner/global_planner.cpp)
然后在终端中运行catkin_make,在catkin工作空间目录中生成二进制文件。这将在lib目录中创建库文件 ~/catkin_ws/devel/lib/libglobal_planner_lib。观察到“lib”附加到CMakeLists.txt中声明的库名global_planner_lib
注意
bool makePlan(start,goal,plan)
的方法必须要重写。最终规划将存储在方法的参数std::vector<geometry_msgs::PoseStamped>& plan
中。该规划将通过插件自动发布为话题。
参考
ROS与navigation教程-编写自定义全局路径规划
使用自定义RRT*全局规划器建图导航这篇文章很好上手,但是由于全局路径一直更新,加上使用的rrt算法,很有可能导致路径一直在变,需要改进。
ROS路径规划(全局路径规划)相关推荐
- linux npm全局安装路径,NPM全局路径的设置及NRM的使用
NPM(node package manager)是node的包管理工具.因为node是一套轻内核的平台,它虽然提供了一系列的内置模块,但远远不足以满足开发者的需求,于是出现了包(package)的概 ...
- a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...
若步智能 移动这一简单动作,对于人类来说相当容易,但对机器人而言就变得极为复杂,说到机器人移动就不得不提到路径规划,路径规划是移动机器人导航最基本的环节,指的是 ...
- ROS导航系列(四):全局路径规划器的参数配置分析
全局路径规划器global_planner的参数配置与分析 一.global_planner相关参数 二.测试 nav_core中提供了对应的全局路径规划接口.要想使用机器人move_base提供的便 ...
- 苏宁 11.11:仓库内多 AGV 协作的全局路径规划算法研究
本文为『InfoQ x 苏宁 2018双十一』技术特别策划系列文章之一. 1. 背景 随着物联网和人工智能的发展,越来越多的任务渐渐的被机器人取代,机器人逐渐在发展中慢慢进入物流领域,"智能 ...
- ROS1云课→20迷宫不惑之A*大法(一种虽古老但实用全局路径规划算法)
ROS1云课→19仿真turtlebot(stage) 19提及的机器人如何实现全局路径规划?A*算法是一种可行的选择. www.gamedev.net/reference/articles/arti ...
- 视觉学习笔记5——FAR Planner全局路径规划算法学习研究
文章目录 一.Far Planner是什么? 二.配置安装Far Planner 1.运行环境 2.下载编译开发环境包 3.编译Far_Planner 一.Far Planner是什么? FAR Pl ...
- (一)路径规划算法---Astar实现自定义的全局路径规划插件
Astar实现自定义的全局路径规划插件 文章目录 Astar实现自定义的全局路径规划插件 1.插件功能包的建立 2. 相关步骤 2.1 建立工作空间和环境变量的配置 2.2 建立功能包 2.3 添加源 ...
- 自动驾驶技术 ROS混合A*算法路径规划插件(非完整约束模型,阿克曼转向模型小车)
ROS混合A*路径规划算法 混合A*路径规划插件 ROS 路径规划 非完整约束条件 ROS导航包面对非完整约束模型存在的问题 混合A*算法 ROS插件 代码实现 混合A*路径规划插件 传统的机器人导航 ...
- 全局路径规划:图搜索算法介绍6(A star)Matlab算法实现
本文接:全局路径规划:图搜索算法介绍2(A star) https://blog.csdn.net/gophae/article/details/103061702 % This is Yunchen ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
最新文章
- MSC EASY5 2020中文版
- Apache 2.4 配置多个虚拟主机的问题
- Android --- 数据库存储的是正确的时间格式(2021-06-17 21:47:23)但是在获取的时候变成了(2021-06-17T13:47:23.000+00:00)
- 死锁问题案例分析解决
- Linux 切换到 root 用户后没有颜色
- English trip EM2-LP-2A Around the world Teacher:Taylor
- 原生js模仿京东图片放大镜效果
- Docker Alpine安装oracle客户端
- c语言编写比赛评分程序,比赛评分系统c语言课程设计.doc
- 程序人生 - 游戏帧数很高,为什么还是会卡顿?
- T410与T410i有什么区别?
- mybatis-generator工具生成对应的自定Service和Controller
- 一般看不见的机械原理
- 《安卓逆向》查壳工具,权限查询,提取工具
- 地震时我先跑了教师挑逗网民抽人欲望
- 树莓派最新raspbian系统换国内源
- 镜头跑焦测试软件,简易的测试镜头跑焦和矫正AF微调办法
- mysql中backup_mysql中的备份(backup)和恢复(recovery)
- 数据产品经理---如何设计指标字典
- 使用Bmob云端代码开发微信公众平台(教程)
热门文章
- 蒙特卡罗方法计算圆周率C语言,用蒙特卡罗方法计算圆周率
- COMSOL有限元仿真深度指南:超弹性模型有限元分析入门
- 读研计算机技术与控制工程比较,电气工程与控制工程研究生考研就业的区别,哪个比较好...
- python学生信息管理系统课程设计实验报告_学生信息管理系统课程设计报告.docx...
- 星外、云谷、ZKEYS系统大比拼,哪个比较好用
- 推荐一款PHP的虚拟主机管理系统,比星外更好用
- 测试网络速度的软件 哪款好,网络测速工具有哪些?2018网络测速工具推荐
- 基于经纬度做航线图可视化
- 数据驱动型企业的海外服务器管理实践
- 计算机硬件专业实习日志,计算机维护实习日记总汇