前言:最近在学习无人驾驶路径规划和ROS的一些基础理论,过程中遇到了一些问题,写这个系列记录一下个人的学习过程。

遇到这个问题的初衷是看了小巨同学一篇帖子

使用自定义RRT*全局规划器建图导航

文中提到了向move_base中添加全局路径规划插件RRT的过程,刚好在学习过程中对插件及插件编写的原则这一部分不是很理解,所以跟着原帖复现了一遍并在此做一下记录,如有问题或错误的地方也欢迎指出和讨论。

一、move_base节点及插件

move_base是Navigation功能包中的核心节点,它在导航的任务中处于支配地位,其他的一些package都是它的插件:

图片来源:《重德智能机器人操作系统入门》

这里就以小巨同学文章中的自定义RRT算法作为例子来进行插件的编写及添加说明。由于RRT算法属于全局路径规划部分,所以插件类型是Base Global Planner。

插件的概念并不是我们抽象的描述,而是在ROS里catkin编译系统能够认出的,并且与其他节点能够耦合的C++库。插件是可以动态加载的类,也就是说插件不需要提前链接到ROS的程序上,只需在运行时加载插件就可以调用其中的功能。

关于插件具体的介绍,可以参考roswiki中的具体介绍http://wiki.ros.org/pluginlib。

二、Plugin插件添加

先在工作空间中下载自定义RRT算法源码:https://github.com/li-huanhuan/rrt_star_global_planner

git clone https://github.com/li-huanhuan/rrt_star_global_planner

下载完成并catkin_make编译后有如下几个文件:

其中src文件夹中包含了RRT算法的源码,在这由于主要介绍插件的添加过程故不对源码进行解释。

1、插件注册

在src/rrt_star_ros.cpp文件中添加插件注册指令:

PLUGINLIB_EXPORT_CLASS(RRTstar_planner::RRTstarPlannerROS, nav_core::BaseGlobalPlanner)

含义:使RRTstar_planner::RRTstarPlannerROS类注册为move_base包中nav_core::BaseGlobalPlanner类的插件

2、编译

在CMakeLists.txt中添加库文件:

add_library(${PROJECT_NAME} src/rrt_star_ros.cpp)

3、插件描述文件

插件描述文件是一个XML文件,用于以机器可读格式存储有关插件的所有重要信息。它包含有关插件库的信息,插件的名称,插件的类型等。需要创建一个新文件并将其保存在包中的某个位置(如rrt_ star_global_planner包),并给它一个名称,如本例中的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/

第2-3行指定了实现插件的类的名称,例子中是RRTstar_planner::RRTstarPlannerROS,而base_class_type指定了实现插件的基类的名称,例子中是nav_core::BaseGlobalPlanner

第4行<description> 标记提供关于插件的简要说明。

4、注册插件到ROS包系统

在package.xml中指向插件描述文件:

  <export><nav_core plugin="${prefix}/rrt_star_planner_plugin.xml"/></export>

其中在${PREFIX}中确定文件完整的路径

此外package.xml文件还需添加nav_core包的依赖性

  ...  <build_depend>pluginlib</build_depend>...<build_export_depend>pluginlib</build_export_depend>...<exec_depend>pluginlib</exec_depend>...

5、在ROS包系统中,查询可用插件

catkin_make编译后可以通过rospack查询ROS包系统,以查看任何给定的包可用的插件:

rospack plugins --attrib=plugin nav_core

如果插件添加成功,会在终端显示如下结果:

6、在launch文件中的movebase添加新的规划器添加为全局规划器的参数

我这里以《ROS机器人开发实践》中的例程为例进行插件的添加,在mrobot_navigation功能包下的launch文件中找到运行move_base节点的文件,并将注册好的插件添加进来:

…<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true"><param name="base_global_planner" value="RRTstar_planner/RRTstarPlannerROS" />…

三、测试插件功能

在终端中运行导航功能包:

roslaunch mrobot_navigation fake_nav_demo.launch

在rviz中找到Global Plan,并选择话题:/move_base/RRTstarPlannerROS/plan

这样就将全局路径规划选中了我们自己添加的RRT算法,最终效果如下:

写在最后

ros中的插件功能方便我们添加自己写的算法,学会插件文件的编写及添加过程对后续在ros平台验证算法很有帮助。

此外由于是第一次写博客,可能有出错或者疏忽地方,还请各位海涵。

PS:我学习ROS主要是参考古月老师的教材:《ROS机器人开发实践》(若有需要PDF书籍的可以在评论区留下邮箱),在这特别感谢周_云川同学提供的电子教材。

ROS学习记录(一) Plugin插件相关推荐

  1. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  2. ros学习记录:Gazebo加载速度慢,长时间停在“Preparing your world”

    前言 ros学习记录笔记,一个小白的自留地,欢迎大佬批评指正~ 一.问题描述 Gazebo加载速度慢,长时间停在"Preparing your world" 二.解决办法 1.下载 ...

  3. Webots+ROS学习记录(4)——六轮全地形移动机器人

    Webots+ROS学习记录(4)--六轮全地形移动机器人 有了以上经验,可以创造出一个全地形的移动机器人如图1 第一步,创建robot节点,并给robot节点编写相应参数 注意,这里的机身不能再使用 ...

  4. ROS学习记录9——urdf文件的创建与使用

    零.前言 在学习这一节之前,至少得明白如何创建一个工作空间,如何编译工作空间,如何运行工作空间里的文件(把工作空间的环境目录添加到环境里).如果有不会的,请看鄙人的ROS学习记录3. 本节默认工作空间 ...

  5. 【ROS学习记录】2021/7/2 Gazebo+rviz仿真(一)

    [ROS学习记录]2021/7/2 Gazebo+rviz进行turtlebot2仿真问题记录 ##小插曲 今天ubuntu挂载u盘一直读取失败所以做了一些令人窒息的操作,晚上开机就进入了initra ...

  6. ROS学习记录 | 便于回顾

    ROS学习记录 | 便于回顾 ROS环境搭建 ROS部分基础知识 ROS环境搭建 step1 创建工作空间目录结构 mkdir catkin_ws cd catkin_ws mkdir src cd ...

  7. 【ROS学习记录】在gazebo中加入差分驱动插件后rostopic没有/cmd_vel话题的一种解决办法

    (1)背景:本人在b站学习的ros,自己安装的是ubuntu18.04,视频链接如下:[奥特学园]ROS机器人入门课程<ROS理论与实践>零基础教程_哔哩哔哩_bilibili 但是在P2 ...

  8. ros学习记录1 Hello World 使用c++

    声明:整个学习是我跟着奥特学园进行的,不是原创,只是记录自己的学习过程 步骤 创建命名空间 mkdir -p catkin_ws/src //其中前者是工作空间的名称,后者为存放源码的位置 cd ./ ...

  9. ROS学习记录(七) 连接单片机

    这次的记录来源于最近在把ROS和STM32联系在一起,更多是填坑吧. 一.使用串口联系ROS和下位机 主要参考: ROS中串口操作 中间遇到了一个问题,按照上一个文章进行操作,总会打开串口失败, 解决 ...

最新文章

  1. 什么插件格式化文档_推荐15款IntelliJ IDEA 神级插件
  2. linux 命令整理(持续更新)
  3. linux杂七杂八整理
  4. 大数据包围你我,技术人如何走知识分享之路
  5. 【clickhouse】Clickhouse 的group_concat 实现
  6. 计算机的智能化研究领域的是,科学网—第五代计算机为何在“智能化”阶段的发展像蜗牛般的徘徊前行? - 邹晓辉的博文...
  7. word文档一级计算机,计算机一级-word讲义
  8. 谷歌将彻底淘汰10年前发布的Android版本
  9. linux c 多进程,【linux下c语言服务器开发系列1】多进程处理多客户端的连接
  10. VB.NET 教程_04_高级教程
  11. 写给零基础入坑蓝桥杯的同学
  12. CGAL 计算几何库
  13. 最新全志超清4K视频编解码芯片-V316处理器
  14. 接口测试平台代码实现16:吐槽功能后台实现+orm初识
  15. 35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑! 凡尔赛还是事实?
  16. ODI 问题集锦 - Return Code 1722 invalid number
  17. 服务器运维环境安全体系(上篇)
  18. 笔记本升级--老华硕的升级之路
  19. 关于ztree的操作
  20. 移动硬盘某个分区打不开,显示“文件或目录损坏且无法读取”的解决方法

热门文章

  1. java 实时监控微信扫码支付,支付成功跳转到成功页面
  2. 键盘按键VK键值列表及宏定义
  3. 折半查找(二分查找)的理解
  4. 母亲节快乐flash动画素材
  5. 计算机二级模拟office,2016年计算机二级office模拟试卷(附答案)
  6. 【社区周会】2021-05-11 内容概要
  7. 大数据周会-本周学习内容总结04
  8. 云诊所管理系统(联合诊疗)支持远程高清视频会诊
  9. 振动开关和水银开关的区别
  10. 2-10进制优先编码器74LS147功能详解