ROS pluginlib笔记

概述

pluginlib是一个C++库,可以实现为一个ROS包动态的加载和卸载插件。这里的插件通常是一些功能类,且以运行时可动态加载的库(如共享对象,动态链接库)的形式存在。借助pluginlib的帮助,用户不必关心自己的应用程序该如何链接包含自己想使用的的class的库(如定义class的头文件在哪里,如何定义的),因为pluginlib会在你调用时自动打开你需要的插件库(Note:需要提前将插件库注册到pluginlib)。使用插件来扩展或者修改应用程序的功能非常方便,不用改动源码重新编译应用程序,通过插件的动态加载即可完成功能的扩展和修改。
思想:

  • pluginlib是一个用于从ROS包中加载和卸载插件的C++库。 插件是从运行时库(即共享对象,动态链接库)加载的动态可加载类。
  • 使用pluginlib,不必显式地将其应用程序与包含类的库链接。
  • pluginlib可以在任何时候打开包含导出类的库,而应用程序不必预先知道库或包含类定义的头文件。
  • 插件可用于扩展/修改应用程序行为,而不需要应用程序源代码。

个人理解:主要是调用时方便,cmakelists文件不需要指出相关的头文件与链接库。相反的注册时的准备工作较多。

创立插件流程

1、写一个基类
2、写一个派生类
note:一般定义带参数的initialize初始化,而不是带参数的构造函数。

注册插件流程

1、注册为插件
#include <pluginlib/class_list_macros.h>
PLUGINLIB_EXPORT_CLASS(类名,基类名)
2、修改CMakelists文件。
3、添加Plugin XML(与cmakelists在同一目录下)
4、修改pakage.xml文件,export插件。

使用插件流程

1、包含插件工具类,和定义的插件的类
#include <pluginlib/class_loader.h>
#include 自己定义的插件
2、调用
例如:
boost::shared_ptr<polygon_base::RegularPolygon> triangle = poly_loader.createInstance(“polygon_plugins::Triangle”);
triangle->initialize(10.0);

猜你喜欢

转载自blog.csdn.net/qq_41986495/article/details/89850793