ROS nodelets-----简介和简单应用
2016-11-11 18:01
369 查看
1 nodelet简介
使用ROS中nodelet包可以实现在同一个进程内同时运行多种算法,且算法之间通信开销零拷贝。这个包有2个重要的class:1)提供了实现nodelet插件所必须的基类nodelet::Nodelet; 2)提供了NodeletLoader类用以实例化nodelet插件。由于nodelets实现了零拷贝,所以常常应用于大数据吞吐量场景,避免了多node通过ROSTCP通信带来的延时问题。
nodelets动态加载nodelet插件类到同一个node中实现了零拷贝, 加入进来的各个nodelet虽然在同一个进程内,但是由于nodelet拥有自己的命名空间,所以看似是一个个独立的node在存在。
2 nodelet技术原理
1)nodelet包定义了一个基类nodelet::Nodelet,所有的nodelet插件类会继承这个基类,并通过pluginlib实现nodelet插件的动态加载;
2)存在一个nodelet_manager进程,可以把nodelet到加载到该manager内进行管理;
3)任何nodelet之间的通信可以使用零拷贝的roscpp publish完成,这种零拷贝实质上是使用了boost shared_ptr;
2 应用
2.1 基本命令
nodelet usage:
nodelet load pkg/Type manager - Launch a nodelet of type pkg/Type on manager manager
nodelet standalone pkg/Type - Launch a nodelet of type pkg/Type in a standalone node
nodelet unload name manager - Unload a nodelet a nodelet by name from manager
nodelet manager - Launch a nodelet manager node
2.2 一个应用实例
这里将简单运行ROS中的一个tutorial(nodelet_tutorial_math),需要提前安装。
1)启动nodelet manager
一般nodelet manager是用C++实现的一段程序,用以监听ROS service,nodelet可以动态加载进来运行。本例子将运行一个standalone manager,但通常manager是被嵌入到node中使用的。
rosrun nodelet nodelet manager __name:=nodelet_manager
2)启动nodelet
rosrun nodelet nodelet load nodelet_tutorial_math/Plus nodelet_manager __name:=nodelet1 nodelet1/in:=foo _value:=1.1
为了运行nodelet,该命令指示nodelet_magager实例化nodelet_tutorial_math/Plus描述的nodelet,并将name和remapping传递到了nodelet中。
3)简单测试
方式一: 命令行测试
一个终端运行:
rostopic pub /foo std_msgs/Float64 5.0 -r 10
另一终端可查看topic,查看node list和topic list
rosnode list
/nodelet1
/nodelet_manager
/rosout
rostopic echo /nodelet1/out
data: 6.1
---
data: 6.1
---
data: 6.1
---
rosrun rqt_graph rqt_graph
方式二:启动文件测试
<launch>
<node pkg="nodelet" type="nodelet" name="standalone_nodelet" args="manager"/>
<node pkg="nodelet" type="nodelet" name="Plus"
args="load nodelet_tutorial_math/Plus standalone_nodelet">
<remap from="/Plus/out" to="remapped_output"/>
</node>
<rosparam param="Plus2" file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
<node pkg="nodelet" type="nodelet" name="Plus2" args="load nodelet_tutorial_math/Plus standalone_nodelet">
<rosparam file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
</node>
<node pkg="nodelet" type="nodelet" name="Plus3" args="standalone nodelet_tutorial_math/Plus">
<param name="value" type="double" value="2.5"/>
<remap from="Plus3/in" to="Plus2/out"/>
</node>
</launch>
rosrun rqt_graph rqt_graph
使用ROS中nodelet包可以实现在同一个进程内同时运行多种算法,且算法之间通信开销零拷贝。这个包有2个重要的class:1)提供了实现nodelet插件所必须的基类nodelet::Nodelet; 2)提供了NodeletLoader类用以实例化nodelet插件。由于nodelets实现了零拷贝,所以常常应用于大数据吞吐量场景,避免了多node通过ROSTCP通信带来的延时问题。
nodelets动态加载nodelet插件类到同一个node中实现了零拷贝, 加入进来的各个nodelet虽然在同一个进程内,但是由于nodelet拥有自己的命名空间,所以看似是一个个独立的node在存在。
2 nodelet技术原理
1)nodelet包定义了一个基类nodelet::Nodelet,所有的nodelet插件类会继承这个基类,并通过pluginlib实现nodelet插件的动态加载;
2)存在一个nodelet_manager进程,可以把nodelet到加载到该manager内进行管理;
3)任何nodelet之间的通信可以使用零拷贝的roscpp publish完成,这种零拷贝实质上是使用了boost shared_ptr;
2 应用
2.1 基本命令
nodelet usage:
nodelet load pkg/Type manager - Launch a nodelet of type pkg/Type on manager manager
nodelet standalone pkg/Type - Launch a nodelet of type pkg/Type in a standalone node
nodelet unload name manager - Unload a nodelet a nodelet by name from manager
nodelet manager - Launch a nodelet manager node
2.2 一个应用实例
这里将简单运行ROS中的一个tutorial(nodelet_tutorial_math),需要提前安装。
1)启动nodelet manager
一般nodelet manager是用C++实现的一段程序,用以监听ROS service,nodelet可以动态加载进来运行。本例子将运行一个standalone manager,但通常manager是被嵌入到node中使用的。
rosrun nodelet nodelet manager __name:=nodelet_manager
2)启动nodelet
rosrun nodelet nodelet load nodelet_tutorial_math/Plus nodelet_manager __name:=nodelet1 nodelet1/in:=foo _value:=1.1
为了运行nodelet,该命令指示nodelet_magager实例化nodelet_tutorial_math/Plus描述的nodelet,并将name和remapping传递到了nodelet中。
3)简单测试
方式一: 命令行测试
一个终端运行:
rostopic pub /foo std_msgs/Float64 5.0 -r 10
另一终端可查看topic,查看node list和topic list
rosnode list
/nodelet1
/nodelet_manager
/rosout
rostopic echo /nodelet1/out
data: 6.1
---
data: 6.1
---
data: 6.1
---
rosrun rqt_graph rqt_graph
方式二:启动文件测试
<launch>
<node pkg="nodelet" type="nodelet" name="standalone_nodelet" args="manager"/>
<node pkg="nodelet" type="nodelet" name="Plus"
args="load nodelet_tutorial_math/Plus standalone_nodelet">
<remap from="/Plus/out" to="remapped_output"/>
</node>
<rosparam param="Plus2" file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
<node pkg="nodelet" type="nodelet" name="Plus2" args="load nodelet_tutorial_math/Plus standalone_nodelet">
<rosparam file="$(find nodelet_tutorial_math)/plus_default.yaml"/>
</node>
<node pkg="nodelet" type="nodelet" name="Plus3" args="standalone nodelet_tutorial_math/Plus">
<param name="value" type="double" value="2.5"/>
<remap from="Plus3/in" to="Plus2/out"/>
</node>
</launch>
rosrun rqt_graph rqt_graph
相关文章推荐
- Selenium简介(二)--基于CORE/IDE的简单应用
- Log4net简介及在项目中的简单应用
- Linux下FTP服务器原理简介及简单应用
- [Django]第二篇:MVC框架简介以及Django简单应用
- android之viewFlipper简介及简单应用--滑动翻页功能
- POI 简介及简单应用
- [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
- ibatis的简介以及简单的应用实例
- vrrp简介及一个简单应用
- Selenium简介(二)--基于CORE/IDE的简单应用
- Log4net简介及在项目中的简单应用
- 过滤器的简介和简单应用(禁止缓存,设置中文乱码等)
- Selenium简介(三)--基于RC的简单应用
- Linux下FTP服务器原理简介及简单应用
- Jquery简介及简单应用
- Selenium简介(三)--基于RC的简单应用
- Selenium简介(二)--基于CORE/IDE的简单应用
- 过滤器的简介和简单应用
- jQuery EasyUI学习笔记_1.easyui简介和简单应用
- Redis简介和简单应用