zoukankan      html  css  js  c++  java
  • 实现一个简单的Plugin

    1.准备

    1)安装pluginlib_tutorials包:

    2)创建一个包

    2.创建基类

    创建一个基类,所有的插件都将从基类继承,如RegularPolygon基类

    创建一个基类头文件

    其内容如下

    在这里创建了一个抽象类名为RegularPolygon。

    需要注意的是这个初始化方法,在使用pluginlib,类需要一个没有参数的构造函数,所以如果需要任何参数,则使用initialize方法来初始化对象。

    3.创建插件

    这里创建了两个插件,一个是Triangle,另一个是Square

    在文件夹/home/gary/catkin_ws/src/pluginlib_tutorials_/include/pluginlib_tutorials_下创建一个文件polygon_plugins.h
    在里面加入如下内容

    4.注册插件

    下面将开始做pluginlib特定的工作,因为我们声明了Triangle类和Square类作为插件

    在src文件下新建文件polygon_plugins.cpp

    其内容如下:

    头文件 #include <pluginlib/class_list_macros.h>,这个包含pluginlib宏定义,允许注册类作为插件

    对于PLUGINLIB_EXPORT_CLASS(polygon_plugins::Triangle, polygon_base::RegularPolygon)

    以上是注册Triangle类作为插件;PLUGINLIB_EXPORT_CLASS宏参数:

    1)完全限定类型的插件类,polygon_plugins::Triangle

    2)完全限定类型的基类,polygon_base::RegularPolygon

    5.构建插件库

    在CMakeLists.txt文件添加如下内容:

    include_directories(include)

    add_library(polygon_plugins src/polygon_plugins.cpp)

    现在可以到catkin_ws下面进行编译,catkin_make

    生成了库文件

    6.使插件可用于ROS工具链

    1)上面的步骤使得我们的插件库被加载,就可以创建插件实例。

    2)但插件加载器仍然需要一种方式来找到该库,并知道在该库中引用。

    3)为此,我们还将创建一个XML文件,以及在包清单中的特殊导出行,将所有有关插件的必要信息提供给ROS工具链。

    在包目录下新建一个XML文件polygon_plugins.xml

    <library path="lib/libpolygon_plugins">,该library标签给出库的相对路径,其包含我们希望导出插件库。

    <class type="polygon_plugins::Triangle" base_class_type="polygon_base::RegularPolygon">
        <description>This is a triangle plugin.</description>
      </class>
    class标签声明我们希望从我们的库导出的插件。

    参数含义:

    1)type,完全限定类型的插件,polygon_plugins::Triangle

    2)base_class,完全限定基类类型的插件, polygon_base::RegularPolygon

    3)description,插件的描述它做什么的

    4)name,(在上面的例子中不使用):这指的是插件的名称

    • 我们输出为plugin_namespace/PluginName。
    • 因为我们使用包名称作为我们的regular_triangle插件的命名空间
    • 这导致我们使用pluginlib_tutorials_/regular_triangle。
    • 之后的API改变,这个属性不再是必需的。

    7.导出插件

    要导出我们创建的插件,我们必须以下行添加到我们的任何的manifest.xml(rosbuild包)或package.xml(catkin包):

    在上面的标签,上面为 pluginlib_tutorials_,应该更改为base_class所在的包,示例里基类和继承类都在同一包,但很多情况下是分别独立不同包里。

    plugin 属性应该指向上面创建的XML文件。

    验证是否生效:

    您应该看到输出给出polygon_plugins.xml文件的完整路径。

    这意味着ROS工具链已经正确设置,可以使用您的插件。

    8.使用插件

    上面已经成功地创建并导出了插件,下面去使用。

    在src目录下创建polygon_loader.cpp,其内容如下

    • 创建ClassLoader,加载插件。有两个参数:
      • 第一个是包含基类的包名,如pluginlib_tutorials_,
      • 第二个是基类,如polygon_base::RegularPolygon
    • 实际加载pluginlib_tutorials_/regulare_triangle插件,插件构造器不带参数,可以调用initialize增加参数。

    9.运行插件

    在CMakeLists.txt文件添加如下

    编译catkin_make,

    运行之

  • 相关阅读:
    ASP.NET缓存页面
    SQL2005没有服务端开启程序
    Cookie创建以及清除Cookie数组
    http 错误编号大全(转)
    .net 控件库名称
    window.location.hash属性介绍
    CSS半透明滤镜在FIREFOX和IE下面的能够通用的写法
    兼容性问题
    Js获取窗体大小
    springcloud 微服务分布式 flowable 工作流 前后分离vue.js 集成代码生成器 shiro权限
  • 原文地址:https://www.cnblogs.com/gary-guo/p/7047995.html
Copyright © 2011-2022 走看看