ROS pluginlib 加载插件链接Cpp Class
一、简介
ROS中的插件(plugin)就是可以动态加载的扩展功能类,在ROS框架中,加载和卸载插件通过pluginlib功能包实现,开发者在使用插件的时候不需要考虑其链接位置,只需要直接注册到pluginlib中。
pluginlib是一个C++库,可以实现为一个ROS包动态的加载和卸载插件。这里的插件通常是一些功能类,且以运行时可动态加载的库(如共享对象,动态链接库)的形式存在。使用插件来扩展或者修改应用程序的功能非常方便,不用改动源码重新编译应用程序,通过插件的动态加载即可完成功能的扩展和修改。
二、 实现步骤
1. 创建插件基类,定义统一接口
首先,定义插件的抽象类,采用虚函数定义统一接口。
2. 继承插件基类
在基类的基础上继承,并且实现子类。
对于每个插件,习惯上会定义一个插件描述文件,该描述文件格式为xml,其中包含必要的路径、类型信息等。
<library path="libpath">
<class type="libSubClassName" base_class_type="libClassName">
<description>
mask
</description>
</class>
</library>
3. 注册插件
对其插件子类进行标注。在实现的cpp文件后使用宏定义 PLUGINLIB_EXPORT_CLASS 对该子类进行标注。
4. 将插件加入ROS系统
在package.xml文件中添加外部引用的tag块,使pluginlib能够找寻到插件的位置。
<export>
<polygon_interface_package plugin="${prefix}/插件xml文件名" />
</export>
同时,还需要在build和run依赖项中添加如下信息:
<build_depend>polygon_interface_package</build_depend>
<run_depend>polygon_interface_package</run_depend>
验证是否注册成功
使用rospack命令查询可用的插件
rospack plugins --attrib=plugin packageName
返回所有packageName
包中导入的插件.
后续
喜欢的话可以关注一下我的公众号技术开发小圈,尤其是对深度学习以及计算机视觉有兴趣的朋友,我会把相关的源码以及更多资料发在上面,希望可以帮助到新入门的大家!