把rgb摄像头的数据转换为laser的时候使用了Nodelet.

pluginlib(插件库)

在ros中有一个plugin的包,下面是一个ROS Plugin Registration的例子

上面包含一个polygon_interface多边形接口,它包含了两个插件,第一个插件是rectangle_plugin(矩形),第二个插件是triangle_plugin(三角形),他们都是通过class list export导出到Polygon_interface中,然后在Polygon plugins list中就有了rectangle以及triangle;使用rospack plugins --attrib=plugin polygin_interface就可以找到polygon_interface里面的插件.

导出插件

注册插件

example_pkg/src/class_list.cpp

首先要包含几个头文件

#include<pluginlib/class_list_macros.h>//注册插件

#include<polygon_interface_package/polygon.h>//包含基类的头文件

#include<rectangle_package/rectangle.h>//插件的头文件

//Declare the Rectangle as a Polygon class

PLUGINLIB_EXPORT_CLASS(rectangle_namespace::Rectangle,polygon_namespace::Polygon)//第一个参数为用于导出的类型,第二个参数为基类的类型,插件的参数类型包括命名空间以及类名,以及基类的命名空间和类型.

如何添加到ROS工具链

example_pkg/rectangle_plugin.xml

<library path="lib/librectangle">//首先指定了库的路径

<class type="rectangle_namespace::Rectangle" base_class_type="polygon_namespace::Polygon">//包含一个class参数,类型为插件类型和基类类型

<description>

this is a rectangle plugin

</description>

</class>

</library>

如何导出插件

上面是在基类的包里面.

如何使用插件

ClassLoader,包含了四个参数,一个是基类的包,基类类型,属性的名字,插件xml的路径

下面是一个实例createInstance(const std::string &lookup_name)

.....

Nodelet

nodelet对于提高ROS性能有着重要的地位,特别是在视觉,控制,高频和高带宽程序中.

nodelet的优势:

在一个线程上运行多个算法

nodelet之间传输数据无需拷贝(在一个nodelet管理器下,使用boost共享指针)

作为插件动态载入

和节点相似性高

基本用法

在manager上启动pkg/Type类型的nodelet

在一个单独的节点上启动pkt/Type类型的nodelet

从manager上卸载名字为name的nodelet

启动一个nodeletmanager节点

它的API

公有成员参数

上面是一个初始化函数规定了nodelet该如何启动,

下面是构造函数和析构函数

保护成员函数

下面是它的实例

首先去启动一下它里面的launch文件,

roslaunch nodelet_tutorial_math plus.launch

rostopic  pub /Plus2/in std_msgs/Float64 5.0 -r 10
 rostopic echo /Plus3/out

最后总结:

很好的一个网址https://github.com/tue-robotics

第十九课 pluginlib&Nodelet的更多相关文章

  1. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

  2. NeHe OpenGL教程 第三十九课:物理模拟

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. NeHe OpenGL教程 第二十九课:Blt函数

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. NeHe OpenGL教程 第十九课:粒子系统

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest): #1.打开两个文件:1个关联读操作,1个关联写操作 fr=open(src,'rb ...

  6. python第二十九课——文件读写(读取读取中文字符)

    演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...

  7. 斯坦福第十九课:总结(Conclusion)

    19.1  总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...

  8. 第二十九课:javascript异步处理

    大家知道javascript中有多少方法能够实现异步处理吗?setTimeout(),setInterval()是最常用的两个.XMLHttpRequest对象,进行ajax请求时.postMessa ...

  9. Ng第十九课:总结(Conclusion)

    19.1  总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...

随机推荐

  1. Hexo博客网站再配置

    这两天整理网站方面的事,本地IIS部署,个人网站,发现我的hexo做的个人网站实在很单调,于是找来资料做进一步的配置. 一.网站图标 看一下hexo\themes\modernist\layout\_ ...

  2. LG3648 [APIO2014]序列分割

    题意 你正在玩一个关于长度为 \(n\) 的非负整数序列的游戏.这个游戏中你需要把序列分成 \(k+1\) 个非空的块.为了得到 \(k+1\) 块,你需要重复下面的操作 \(k\) 次: 选择一个有 ...

  3. 关于ant及svnant的一点随记

    在使用svnant的时候: 注意一下: 1.JDK版本,svnant目前更新到1.3.1,其中svnkit.jar是不支持1.7/1.8JDK的,容易出现各种错误 Ps:下载http://www.sv ...

  4. Ambari和YARN的Capacity调度器,安装过程

    用Spark测试YARN的资源池,测试过程中发现很多时候爆资源不够: 于是添加机器,专门用于跑spark:首先是ssh不通,原来错把71的id_psa.put文件拷贝到64上面:后来ssh通了,amb ...

  5. asp+jquery+ajax,asp后台程序执行不正常

    项目中前台页面通过jquery .ajax功能将关键数据传递到后台并写入数据库,调试中发现后台程序一直没有正常执行,后反复排查 发现asp程序中不能包含#include file语句

  6. java md5 函数

    private static final String md5(final String s) { final String MD5 = "MD5"; try { // Creat ...

  7. PL/SQL 训练08--触发器

    --什么是触发器呢?--一触即发,某个事件发生时,执行的程序块?--数据库触发器是一个当数据库发生某种事件时作为对这个事件的响应而执行的一个被命名的程序单元 --适合场景--对表的修改做验证--数据库 ...

  8. JSP搭建

    Tomcat7已经发布多时,Tomcat7增加了对Servlet 3.0,JSP 2.2和JSP-EL 2.2的支持.支持web application内存泄露的检测和防护等很多新功能.本片教程主要介 ...

  9. Mysql提权

    获取最高用户root的密码 获取方式:数据库配置文件.端口破解口令.下载数据库文件获取等1.数据库配置文件config,conn,data,sql,include,common,inc等命名文件2.数 ...

  10. transfrom-runtime文档

    transfrom-runtime文档 babel只会默认对句法进行转换,而那些方法,api不会转换,要转就要使用polyfill和transform,这里介绍transform,关于polyfill ...