ROS进阶功能—plugin插件机制

本文详细介绍了ROS中的plugin插件机制,包括工作原理、创建及实现插件、注册与编译插件库、将插件加入ROS、调用插件的步骤,以及plugin描述文件的结构。通过示例展示了如何创建一个用于计算几何图形面积的基类和两个插件(矩形和三角形),实现了功能的动态扩展。
摘要由CSDN通过智能技术生成

ROS进阶功能—plugin插件机制

在ROS开发中,常常会接触到一个名词——plugin(插件)。这个名词在计算机软件开发中也经常提到。简单来说,ROS中的插件就是可以动态加载的扩展功能类。ROS中的pluginlib功能包提供了加载和卸载plugin的C++库,开发者在使用插件时,不需要考虑plugin类的链接位置,只需要将插件注册到pluginlib中,即可直接动态加载。这种插件机制非常方便,开发者不需要改动原软件的代码,直接将需要的功能通过插件进行扩展即可。

一、工作原理

在这里插入图片描述假设ROS功能包中已经存在一个polygon的基类(polygon_interface_package),可以通过插件机制实现两种polygon的功能支持:rectangle_plugin(rectangle_plugin_package)和triangle_plugin(triangle_plugin_package)。在这两个功能包的package.xml 中,需要声明polygon_interface_package中的基类polygon,在编译过程中会把插件注册到ROS中,用户可以直接通过rospack命令进行全局插件查询,也可以在开发中直接使用这些插件。

二、实现一个插件

pluginlib 利用了C++多态的特性,不同的插件只要使用统一的接口就可以替换使用。用户在使用过程中也不需要修改代码或者重新编译,选择需要使用的插件即可扩展相应的功能。一般来讲,要实现一个插件,主要分为以下几个步骤。
1)创建基类,定义统一接口(如果基于现有基类实现插件,则不需要这个步骤)。
2)创建plugin类,继承基类,实现统一的接口。
3)注册插件。
4)编译生成插件的动态链接库。
5)将插件加入ROS中。

三、创建基类

在include目录下,新建头文件polygon_base.h来创建基类。

#ifndef SRC_POLYGON_BASE_H
#define SRC_POLYGON_BASE_H

namespace polygon_base{
   

class RegularPolygon{
   
public:
    virtual void initialize(double side_length) = 0;
    virtual double area() = 0;
    virtual ~RegularPolygon(){
   }

protected:
    RegularPolygon(){
   }
};
}

#endif //SRC_POLYGON_BASE_H

其中,插件要求构造函数不可以带参数,所以使用initialize函数实现参数初始化。

四、创建plugin类

继承基类,实现统一接口

#ifndef SRC_POLYGON_PLUGINS_H
#define SRC_POLYGON_PLUGINS_H

#include <learn_plugin/polygon_base.h>
#include <cmath>

namespace polygon_plugins{
   

class Triangle: public polygon_base::RegularPolygon
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是“耀”神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值