第十九课 pluginlib&Nodelet
把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
最新文章
- node如何让一个端口同时支持https与http
- CSS 行内样式 页内样式 外部样式
- ViewController与outlet绑定
- 使用Mysqldump 备份数据库
- posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
- [原博客] BZOJ 2242 [SDOI2011] 计算器
- iframe中调用父iframe中的方法
- IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法
- echo print print_r的区别
- 【Java SE】利用Java的for循环加random制作小学试卷
- 安装cuda8.0中所遇到的问题-解决办法
- git使用步骤_2017
- Linux开机启动图片修改
- C. Prefixes and Suffixes
- bzoj 3129
- Dapper总结(二)---事务和存储过程
- cisco 的ACL
- Angular待办事项应用3
- linux下根目录扩容
- Webpack vs Rollup
热门文章
- Java中Set,List,Map的区别
- RecyclerView 初体验
- 冒泡排序的JavaScript实现
- Spring BeanPostProcessor与动态加载数据源配置
- ubuntu 环境变量配置
- What’s that ALUA exactly?
- 分布式缓存系统 Memcached 状态机之网络数据读取与解析
- Git使用点滴记录: You have no permission to access this repo.
- VS2017自定义代码片段, 实现快捷输入
- java成神之——Stream和Optional