一、初见
1.对nodelet的理解:
ros节点基于TCP/IP通信,数据传输时会有打包和解包的过程,当数据量大或对实时性要求比较高的时候,这个时间就必须考虑。nodelet提供了一种方法,可以在同一个进程中运行多个节点,实现零复制通信。
2.使用注意事项:
- 1.源文件:需要 #include <pluginlib/class_list_macros.h>,在最后注册插件类,PLUGINLIB_EXPORT_CLASS(命名空间::插件类, nodelet::Nodelet)。
- 2.plugin.xml
<library path="lib/libexample">
<class name="pkg_name/plugin_name" type="namespace::plugin_class" base_class_type="nodelet::Nodelet">
<!-- plugin_name is named by self -->
<description>
This is my nodelet.
</description>
</class>
</library>
- 3.launch
<launch>
<node pkg="nodelet" type="nodelet" name="manager" args="manager" output="screen"/>
<node pkg="nodelet" type="nodelet" name="random" args="load (same as class name in plugin.xml) manager" output="screen">
</node>
</launch>
3.参考
二、问题
- 1.使用ros::spin()会导致bond无法发布,使用rqt会看到节点都是独立的,没有交互。
- 2.注意发布变量和接收变量的生命周期,不要在onInit()中声明,最好作为成员变量或全局变量。