ROS 的Plugin官方文档是以polygon为例。本文以global_planner和 carrot_planner为例。
在Navgation 中。global_planner 是基类nav_core :: BaseGlobalPlanner的一个插件子类。同时也提供了另外一个carrot_planner子类。以carrot_planner子类为例。

1 创建插件导入导出类

首先在自己创建的功能包中的导出类的cpp文件的起始位置加入:(global_planner中就是planner_core.cpp文件)

PLUGINLIB_EXPORT_CLASS(carrot_planner::CarrotPlanner, nav_core::BaseGlobalPlanner)

其中carrot::CarrotPlanne表示的是插件的名称,而后的nav_core::BaseGlobalPlanner是这个插件所依赖的基类。因此nav_core这个包即使在global_planner这个包出来之后也并为被作者删除。虽然其仅仅含有几个头文件。

2 添加plugin.xml插件描述文件

而后在carrot_planner包中加入 **plugin.xml文件. (插件描述文件)。 在carrot_planner包中为 bgp_plugin.xml。其内容如下:

<library path="lib/libcarrot_planner"><class name="carrot_planner/CarrotPlanner" type="carrot_planner::CarrotPlanner" base_class_type="nav_core::BaseGlobalPlanner"><description>A simple planner that seeks to place a legal carrot in-front of the robot</description></class>
</library>

其中我们主要需要修改的是path 和class中的 name ,type, base_class_type.
其中 path 表示该库插件的存放位置。使用的是相对路径。在本例中即为:~/nkai_ws/devel/lib 。name即该插件的名称。 type为插件的类。本例即为 carrot_planner 的namespace中的 CarrotPlanner。 base_class_type。是其中的基类。在导航包中,如果要用自己的全局规划器,base_class_type均为 nav_core :: BaseGlobalPlanner.
<description>是对该插件功能的一个描述。
如果带有多个插件或者是插件在多个namespace下。可以参照 ROS官网plugin相关介绍 Plugin Description file

3 修改package.xml文件

修改package.xml文件,在最后加上如下

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

bgp_plugin.xml为之前描述文件的名称。{prefix}会自动寻找其路径。
同时为了使上述导出命令正常工作,提供的程序包必须直接依赖于包含插件接口的程序包,对于全局规划器,该程序包为nav_core。因此,carrot_planner软件包的package.xml中必须包含以下行:

<build_depend>nav_core</build_depend>
<run_depend>nav_core</run_depend>

在完成后对功能包进行编译。然后可以利用

rospack plugins --attrib=plugin nav_core

查看是否含有插件。

4 修改move_base使用插件

在move_base.launch 文件中加入以下代码

<param name="base_global_planner" value="carrotplanner/CarrotPlanner" />

参考
global_planner解析
ROS 中 Plugin机制 (wiki)
ROS 中 写全局规划器插件介绍

ROS中Plugin插件学习相关推荐

  1. 使用 ROS中的插件

    URDF文件完成后,可以在rviz中显示机器人的模型,如果要在gazebo中进行物理环境仿真,还需要为URDF文件加入一些gazebo相关的标签.既然是仿真,那么机器人应该像真在真实环境中一样,可以通 ...

  2. ROS学习记录(一) Plugin插件

    前言:最近在学习无人驾驶路径规划和ROS的一些基础理论,过程中遇到了一些问题,写这个系列记录一下个人的学习过程. 遇到这个问题的初衷是看了小巨同学一篇帖子 使用自定义RRT*全局规划器建图导航 文中提 ...

  3. 【Jenkins学习 】Jenkins安装 Build User Vars Plugin插件来获取jenkins用户相关信息

    一.需求描述 最近在一台测试服务器上安装最新版本的Jenkins,然后学习Pipeline语法,一切都是正常的.最后编译完成,发送通知的时候,因为需要使用到${BUILD_NUMBER} 变量,如下所 ...

  4. ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记

    ubuntu18.04 Qt Creator 安装+ROS Qt Creator Plug-in 插件安装笔记: 一.Qt Creator 5.10安装 官网下载地址: http://download ...

  5. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters 上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameter ...

  6. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  7. ROS中的roslaunch命令和launch文件(ROS入门学习笔记四)

    ROS中的基本对象和概念学习笔记(ROS入门学习笔记一) ROS中创建工作区和包(ROS入门学习笔记二) ROS功能包中CMakeLists.txt的说明(ROS入门学习笔记三) 1.roslaunc ...

  8. Unity3D开发HTC VIVE项目中插件HTC.Input.Utility.Plugin插件的运用

    这是基于SteamVR基础之上的一款插件,再获得硬件设备上比之前单独使用steamVR方便很多. 比如,之前我们获得硬件设备是这样的:首先写一个如下图的脚本,挂在CameraRig的手柄上(看需要那个 ...

  9. notepad++中Analyse Plugin插件如何使用

    问题  在代码开发过程中,除了常见的source insight和vs  code编辑器外.还经常使用notepad++来查看单一文件和分析log 在使用notepad++的使用,一般常见的都是在ct ...

  10. Jenkins中使用HTML Publisher plugin插件

    一.安装html插件 方法一:系统中直接安装 在[系统设置]-[管理插件]搜索HTML Publisher plugin后进行安装即可 方法二:下载插件后手动安装 http://updates.jen ...

最新文章

  1. Istio,灰度发布从未如此轻松!!!
  2. ASP.NET中使用Cache类来缓存页面的信息
  3. 全网最新Redis结合Kaptcha实现验证码功能篇一(前后端分离)
  4. java返回泛型_Java泛型从泛型方法返回持有者对象
  5. PSD分层模板素材丨只需掌握三大规则!电商海报秒脱俗套
  6. 使用Newtonsoft.Json接受部分资源
  7. CVPR学习(一):CVPR2019-人脸方向
  8. Puppet apply命令参数介绍(五)
  9. 御剑情缘服务器维护吗,御剑情缘更新后登不上怎么回事 1月11日更新后进不去解决方法...
  10. 鸿蒙系统怎么关闭地理位置通知,鸿蒙OS 获取设备的位置信息
  11. 计算机设置ip后提示未识别网络连接,win10设置正确的静态IP,但电脑显示未识别网络,怎么回事。求大佬们帮助啊...
  12. Promethues原理详解
  13. 新兴职业背后的认知逻辑
  14. mysql5.5升级到8_MySQL5.7升级到8.0过程详解
  15. Python中的对日期时间的处理
  16. 怎么在自己电脑上搭建一个服务器,以便于外网访问呢?
  17. linux安装oracle12c
  18. g4600黑苹果efi_黑苹果硬盘引导的两种方式
  19. ss命令的参数及使用详解
  20. 采购流程图怎么画?手把手教你绘制采购流程图

热门文章

  1. 感人!华为员工累死,同事模仿鲁迅写《纪念胡新宇君》(转贴)
  2. 5G网络中TNL和RNL的理解
  3. vue学习之ElementUI时间选择器报错getTime is not a function
  4. Javase 第五次作业智商题
  5. Zemax学习笔记——序列模式点光源与平行光设置
  6. Adobe又逆天!不用机器学习,用13.5M软件把《长安十二时辰》变成水墨动画
  7. 3大奇葩排序之猴子算法
  8. 混合现实开发教程unity2017
  9. 网盘翻车不断,我是如何低价自建一个自用网盘
  10. 从菜鸟到架构师(三)