目录

  • 全局路径规划
    • 自定义全局路径规划
    • 注意
  • 参考

路径规划包括全局路径规划局部路径规划

全局路径规划

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的路径规划器编写一个新类,然后在该类中重写initializemakePlan方法。。在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路径规划(全局路径规划)相关推荐

  1. linux npm全局安装路径,NPM全局路径的设置及NRM的使用

    NPM(node package manager)是node的包管理工具.因为node是一套轻内核的平台,它虽然提供了一系列的内置模块,但远远不足以满足开发者的需求,于是出现了包(package)的概 ...

  2. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...

       若步智能                  移动这一简单动作,对于人类来说相当容易,但对机器人而言就变得极为复杂,说到机器人移动就不得不提到路径规划,路径规划是移动机器人导航最基本的环节,指的是 ...

  3. ROS导航系列(四):全局路径规划器的参数配置分析

    全局路径规划器global_planner的参数配置与分析 一.global_planner相关参数 二.测试 nav_core中提供了对应的全局路径规划接口.要想使用机器人move_base提供的便 ...

  4. 苏宁 11.11:仓库内多 AGV 协作的全局路径规划算法研究

    本文为『InfoQ x 苏宁 2018双十一』技术特别策划系列文章之一. 1. 背景 随着物联网和人工智能的发展,越来越多的任务渐渐的被机器人取代,机器人逐渐在发展中慢慢进入物流领域,"智能 ...

  5. ROS1云课→20迷宫不惑之A*大法(一种虽古老但实用全局路径规划算法)

    ROS1云课→19仿真turtlebot(stage) 19提及的机器人如何实现全局路径规划?A*算法是一种可行的选择. www.gamedev.net/reference/articles/arti ...

  6. 视觉学习笔记5——FAR Planner全局路径规划算法学习研究

    文章目录 一.Far Planner是什么? 二.配置安装Far Planner 1.运行环境 2.下载编译开发环境包 3.编译Far_Planner 一.Far Planner是什么? FAR Pl ...

  7. (一)路径规划算法---Astar实现自定义的全局路径规划插件

    Astar实现自定义的全局路径规划插件 文章目录 Astar实现自定义的全局路径规划插件 1.插件功能包的建立 2. 相关步骤 2.1 建立工作空间和环境变量的配置 2.2 建立功能包 2.3 添加源 ...

  8. 自动驾驶技术 ROS混合A*算法路径规划插件(非完整约束模型,阿克曼转向模型小车)

    ROS混合A*路径规划算法 混合A*路径规划插件 ROS 路径规划 非完整约束条件 ROS导航包面对非完整约束模型存在的问题 混合A*算法 ROS插件 代码实现 混合A*路径规划插件 传统的机器人导航 ...

  9. 全局路径规划:图搜索算法介绍6(A star)Matlab算法实现

    本文接:全局路径规划:图搜索算法介绍2(A star) https://blog.csdn.net/gophae/article/details/103061702 % This is Yunchen ...

  10. 全局路径规划:图搜索算法介绍1(BFS/DFS)

    对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...

最新文章

  1. MSC EASY5 2020中文版
  2. Apache 2.4 配置多个虚拟主机的问题
  3. Android --- 数据库存储的是正确的时间格式(2021-06-17 21:47:23)但是在获取的时候变成了(2021-06-17T13:47:23.000+00:00)
  4. 死锁问题案例分析解决
  5. Linux 切换到 root 用户后没有颜色
  6. English trip EM2-LP-2A Around the world Teacher:Taylor
  7. 原生js模仿京东图片放大镜效果
  8. Docker Alpine安装oracle客户端
  9. c语言编写比赛评分程序,比赛评分系统c语言课程设计.doc
  10. 程序人生 - 游戏帧数很高,为什么还是会卡顿?
  11. T410与T410i有什么区别?
  12. mybatis-generator工具生成对应的自定Service和Controller
  13. 一般看不见的机械原理
  14. 《安卓逆向》查壳工具,权限查询,提取工具
  15. 地震时我先跑了教师挑逗网民抽人欲望
  16. 树莓派最新raspbian系统换国内源
  17. 镜头跑焦测试软件,简易的测试镜头跑焦和矫正AF微调办法
  18. mysql中backup_mysql中的备份(backup)和恢复(recovery)
  19. 数据产品经理---如何设计指标字典
  20. 使用Bmob云端代码开发微信公众平台(教程)

热门文章

  1. 蒙特卡罗方法计算圆周率C语言,用蒙特卡罗方法计算圆周率
  2. COMSOL有限元仿真深度指南:超弹性模型有限元分析入门
  3. 读研计算机技术与控制工程比较,电气工程与控制工程研究生考研就业的区别,哪个比较好...
  4. python学生信息管理系统课程设计实验报告_学生信息管理系统课程设计报告.docx...
  5. 星外、云谷、ZKEYS系统大比拼,哪个比较好用
  6. 推荐一款PHP的虚拟主机管理系统,比星外更好用
  7. 测试网络速度的软件 哪款好,网络测速工具有哪些?2018网络测速工具推荐
  8. 基于经纬度做航线图可视化
  9. 数据驱动型企业的海外服务器管理实践
  10. 计算机硬件专业实习日志,计算机维护实习日记总汇