文章目录
- nodelet
- 基本语法
- nodelet调用案例
nodelet
对应ROS2的Composition
ROS通信是基于Node(节点)的,Node使用方便、易于扩展,可以满足ROS中大多数应用场景,但是也存在一些局限性,由于一个Node启动之后独占一根进程,不同Node之间数据交互其实是不同进程之间的数据交互,当传输类似于图片、点云的大容量数据时,会出现延时与阻塞的情况。
nodelet软件包旨在提供在同一进程中运行多个算法(节点)的方式,不同算法之间通过传递指向数据的指针来代替了数据本身的传输(类似于编程传值与传址的区别),从而实现零成本的数据拷贝。
nodelet功能包的核心实现也是插件,是对插件的进一步封装:
- 不同算法被封装进插件类,可以像单独的节点一样运行;
- 在该功能包中提供插件类实现的基类:Nodelet;
- 并且提供了加载插件类的类加载器:NodeletLoader。
基本语法
# Launch a nodelet manager node
nodelet manager
# Launch a nodelet of type pkg/Type on m_name manager
nodelet load pkg/Type m_name
# Launch a nodelet of type pkg/Type in a standalone node
nodelet standalone pkg/Type
# Unload a nodelet a nodelet by name from manager
nodelet unload name manager
nodelet调用案例
rosrun nodelet nodelet manager __name:=mymanager
__name:= 用于设置管理器名称。
添加第一个节点
rosrun nodelet nodelet load nodelet_tutorial_math/Plus mymanager __name:=n1 _value:=100
-
nodelet 的节点名称是: /n1
-
添加的参数名称是: /n1/value。
添加第二个节点
rosrun nodelet nodelet load nodelet_tutorial_math/Plus mymanager __name:=n2 _value:=-50 /n2/in:=/n1/out
- /n2/in 重映射为 /n1/out