首页 > 其他分享 >ROS pluginlib使用教程

ROS pluginlib使用教程

时间:2024-03-04 20:14:37浏览次数:31  
标签:core 教程 include polygon pluginlib plugin 插件 ROS pack

pluginlib用法

通俗一点说,plugin的用法就像是面向对象编程里面的多态。插件就是子类,插件实现父类的方法,那么系统调用父类方法时就是子类的方法,也就实现了替换。对应ROS里面只需要在launch文件中选择想要的插件,无需修改预案系统即可完成替换。

这里实现一个常用的plugin场景。

core_pack功能包相当于系统,里面定义了基类RegularPolygon,并且在main函数中调用area函数求多边形面积。

imp_plugin功能包实现了两个插件,继承自RegularPolygon,一个是三角形,一个是正方形,对基类的方法进行了重写。

这样在不修改core_pack的情况下,实现了对core_pack中功能的更改和扩展。

core_pack

需要注意的点是。CMakeLists.txt中

catkin_package(
 INCLUDE_DIRS include #必须有,插件的功能包需要依赖该功能包include中文件。相当于什么该功能包导出的include文件。
)
add_executable(polygon_loader src/polygon_loader.cpp)
# 上面两句话不能颠倒,如果颠倒,rosrun命令无法找到可执行文件

imp_plugin(重点)

这个功能包继承了core_pack中的基类,实现了两个子类三角形和正方形,这两个class在ros中就叫插件。

实现完基类后还需要配置4个文件。

1、在实现插件类的cpp文件中将插件类导出

//pluginlib 宏,可以注册插件类
#include <pluginlib/class_list_macros.h>
#include <core_pack/polygon_base.h>
#include <imp_plugin/polygon_plugins.h>
//参数:衍生类 参数:基类
PLUGINLIB_EXPORT_CLASS(polygon_plugins::Triangle, polygon_base::RegularPolygon)
PLUGINLIB_EXPORT_CLASS(polygon_plugins::Square, polygon_base::RegularPolygon)

2、配置package.xml

<!-- 插件的实现依赖于父类的功能包 -->
<build_depend>core_pack</build_depend>
<build_export_depend>core_pack</build_export_depend>
<exec_depend>core_pack</exec_depend>

<!-- 这里相当于导出插件,core_pack是父类的功能包 -->
<!-- 这句话会把该功能包的插件注册进 core_pack 功能包中-->
<export>
  <core_pack plugin="${prefix}/polygon_plugins.xml" />
</export>

3、新增xml文件,配置插件导出关系。polygon_plugins.xml,放在插件功能包目录下

<!-- 插件库的相对路径 -->
<library path="lib/libpolygon_plugins">
    <!-- type="插件类" base_class_type="基类" -->
    <class type="polygon_plugins::Triangle" base_class_type="polygon_base::RegularPolygon">
        <!-- 描述信息 -->
        <description>This is a triangle plugin.</description>
    </class>
    <class type="polygon_plugins::Square" base_class_type="polygon_base::RegularPolygon">
        <description>This is a square plugin.</description>
    </class>
</library>

最后正常配置cmakelists.txt文件,把插件编译成库文件,添加库文件的依赖,依赖core_pack。

编译方法

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/LadissonLai/learning_pluginlib.git
cd ~/catkin_ws
catkin_make
source ./devel/setup.bash
rosrun core_pack polygon_loader

查询core_pack功能包的插件

rospack plugins --attrib=plugin core_pack
# 这里会返回polygon_plugins.xml的绝对路径。

完整项目

完整项目请查看github仓库.

标签:core,教程,include,polygon,pluginlib,plugin,插件,ROS,pack
From: https://www.cnblogs.com/LadissonLai/p/18052540

相关文章

  • ROS 同一工作空间下两个功能包如何相互调用
    如何在同一工作空间下调用另一ros功能包本项目有两个ros功能包,a_pack和b_pack,a_pack调用了b_pack的函数,本项目为了展示如何配置b_pack和a_pack功能包,让a_pack可以调用b_pack。在c++编程中,常见用法是将b_pack编译成库文件,然后b_pack对外提供头文件,a_pack对b_pack的调用就是通过引......
  • codeblocks两种创建文件的方式(含调试教程)
    codeblock用法以及调试教程codeblock两种创建文件的方式:1.直接建一个空白文件这种方式创建新文件的缺点是不能调试,debug是灰色的不能点第二种创建文件的方式:新建一个项目project创建一个空项目同样新建一个空白文件,只不过这种方法会提示你是否要把这个文件放在项目里先......
  • docker系列教程04---容器网络
    一、Docker不启动时默认的网络情况这里先把Docker停掉了,然后咱们ifconfig看一眼:ifconfig ens33不用多说了,lo为回环。这里可能还会有一个virbr0,在CentOS7的安装过程中如果有选择相关虚拟化的的服务安装系统后,启动网卡时会发现有一个以网桥连接的私网地址的virbr0网卡(virbr......
  • 全网首套完整containerd容器工具教程
    1、Containerd的由来【Docker名噪一时,捐出runC】2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使用的Brog系统江湖地位受到的威胁,希望Docker公司能够与自己联合打造一款开源的容器运行时作为Docker核心依赖,但Docker......
  • matlab教程_台大lecture1基本操作和矩阵输入
    matlab教程视频matlabascalculatorcommendline直接用命令行计算部分ans是结果运算法则和平时一样((),^乘除加减)onlinehelpeg:helpsin&直接搜索嵌套式公式sin(cos(pi))==cos(pi)sin(ans)其中,ans是第一个的结果变量可以用who查看变量,whos详细信息一些保留......
  • AntSK:打造你的本地AI知识库——离线运行详细教程
        亲爱的读者朋友们,今天我要给大家介绍一个强大的开源工具——AntSK。这个工具能让您在没有Internet连接时依然能使用人工智能知识库对话和查询,想象一下,即使在无网络的环境中,您也能与AI进行愉快的交流!项目地址:https://github.com/xuzeyu91/AntSK    AntSK......
  • Taurus.MVC WebMVC 入门开发教程7:部分视图和页面片段(结束篇)
    本系列的目录大纲为:Taurus.MVCWebMVC入门开发教程1:框架下载环境配置与运行Taurus.MVCWebMVC入门开发教程2:一个简单的页面呈现Taurus.MVCWebMVC入门开发教程3:数据绑定ModelTaurus.MVCWebMVC入门开发教程4:数据列表绑定List<Model>Taurus.MVCWebMVC入门开发教程5......
  • Office tool plus 下载&安装教程
    part1下载1在浏览器中搜索Officetoolplus,并且找到官网如图:点击下载你会看到以下界面:图:我们可以选择山东大学镜像站的下载链接这里需要看你的电脑是64位,还是32位我们可以回到桌面,右键此电脑或者是计算机点击属性,就可查看。注意:x64就是64位操作系统,x86就是......
  • PyQt入门教程(版本1)
    第1章PyQt5开发环境搭建和配置PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。本文内容本文主要第1节PyQt5环境搭建和配置。主要内容包括:[!TIP......
  • MediaTek Filogic 系列路由器串口救砖教程
    感谢蝈蝈大佬开发的mtk_uartboot工具,这样就可以随便刷砖了适用系列:MediaTekMT7622、MT7981、MT7986、MT7988SoC1.下载工具地址:https://github.com/981213/mtk_uartboot/releasesWindows用户选择mtk_uartboot-x86_64-pc-windows-msvc.zipLinux用户选择mtk_uartboot-......