ROS之nodelet

一、初见

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()中声明,最好作为成员变量或全局变量。
发布了50 篇原创文章 · 获赞 31 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/random_repick/article/details/102588275