把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

最新文章

  1. node如何让一个端口同时支持https与http
  2. CSS 行内样式 页内样式 外部样式
  3. ViewController与outlet绑定
  4. 使用Mysqldump 备份数据库
  5. posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
  6. [原博客] BZOJ 2242 [SDOI2011] 计算器
  7. iframe中调用父iframe中的方法
  8. IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法
  9. echo print print_r的区别
  10. 【Java SE】利用Java的for循环加random制作小学试卷
  11. 安装cuda8.0中所遇到的问题-解决办法
  12. git使用步骤_2017
  13. Linux开机启动图片修改
  14. C. Prefixes and Suffixes
  15. bzoj 3129
  16. Dapper总结(二)---事务和存储过程
  17. cisco 的ACL
  18. Angular待办事项应用3
  19. linux下根目录扩容
  20. Webpack vs Rollup

热门文章

  1. Java中Set,List,Map的区别
  2. RecyclerView 初体验
  3. 冒泡排序的JavaScript实现
  4. Spring BeanPostProcessor与动态加载数据源配置
  5. ubuntu 环境变量配置
  6. What’s that ALUA exactly?
  7. 分布式缓存系统 Memcached 状态机之网络数据读取与解析
  8. Git使用点滴记录: You have no permission to access this repo.
  9. VS2017自定义代码片段, 实现快捷输入
  10. java成神之——Stream和Optional