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,
运行之