Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

ROS学习 <十一> ROS Nodelet学习

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

0. 背景介绍
ROS是一种基于消息传递的分布式多进程框架。ROS Node之间的通讯,是基于TCP/IP协议,在传递Message或Service时,都需要先打包,后解包。对资源有较大浪费,在实时性上也表现不佳。
在需要传递的数据附载小,频率低时,这样的资源和时间消耗还可以接受。但当传递的是图像,点云等数量巨大的数据时,或实时性要求较高时,传输问题则必需要考虑。nodelet的出现,就是为解决此类问题。

1. ROS Nodelet简介
Nodelet用来提供一种方式,让多个算法运行在同一个进程内,他们之间数据实现zero  copy 传输。
使用shared_ptr实现零copy传输(Zero  Copy Transport). 它使用插件机制。

简单的说:Nodelet即为将之前启动的多个Node捆绑到一起,由一个Manager管理。在同一个Manager内, Topic数据更快,zero Copy.

nodelet package既提供用来实现Nodelet的nodelet base class。 又提供NodeletLoader class用来实例化Nodelet。

 设计目标:
1. 使用现有的ROS C++ 接口。
2. 在Nodelet之间,实现零copy数据传输。
3. 动态加载插件, 以打破构建时间的依赖性。
4. 写Node或nodelet代码,差距最小化。


2.技术概要和Nodelet使用
所有Nodelet代码继承base calss nodelet::Nodelet ,Nodelet代码将作为pluginlib 被动态load.
将提供namespace, 自动remapping arguments and parameter。 
一个nodelet_manager可以管理一个或多个Nodelet。

用法:

nodelet usage:


nodelet load pkg/Type manager - Launch a nodelet of type pkg/Type on manager manager

在Manager内,载入一个Nodelet。pkg为包名,Type为Class名(或库名)



nodelet standalone pkg/Type   - Launch a nodelet of type pkg/Type in a standalone node

以standalone模式Load和启动一个Nodelet

nodelet unload name manager   - Unload a nodelet a nodelet by name from manager
从Manager内卸载一个Nodelet。



nodelet manager               - Launch a nodelet manager node

启动一个Nodelet  Manager 



可以在字符界面使用如:
rosrun nodelet nodelet manager



 

Viewing all articles
Browse latest Browse all 158

Trending Articles