nodelet的应用

Posted 郭润

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nodelet的应用相关的知识,希望对你有一定的参考价值。

1.创建一个包,如example_pkg

catkin_create_pkg  example_pkg

2.创建MyNodeletClass.h文件

cd ~/catkin_ws/src/example_pkg/
mkdir -p include/example_pkg
touch include/example_pkg/MyNodeletClass.h
vim include/example_pkg/MyNodeletClass.h
其内容为
#include <nodelet/nodelet.h>
namespace example_pkg
{

    class MyNodeletClass : public nodelet::Nodelet
    {
        public:
            virtual void onInit();
    };

}
 

3.创建MyNodeletClass.cpp文件

cd ~/catkin_ws/src/example_pkg/
mkdir src
touch src/MyNodeletClass.cpp
vim src/MyNodeletClass.cpp
其内容为
// this should really be in the implementation (.cpp file)
#include <ros/ros.h>
#include <pluginlib/class_list_macros.h>
#include <example_pkg/MyNodeletClass.h>


namespace example_pkg
{
    void MyNodeletClass::onInit()
    {
        NODELET_DEBUG("Initializing nodelet...");
        ROS_INFO("Nodelet is Ok for test!!");
    }
}

// watch the capitalization carefully
PLUGINLIB_DECLARE_CLASS(example_pkg, MyNodeletClass, example_pkg::MyNodeletClass, nodelet::Nodelet)
成功则输出"Nodelet is Ok for test!!"

4.创建nodelet_plugins.xml文件

cd ~/catkin_ws/src/example_pkg/
mkdir plugins
touch plugins/nodelet_plugins.xml
vim plugins/nodelet_plugins.xml
其内容为
<library path="lib/libexample_pkg">
  <class name="example_pkg/MyNodeletClass" type="example_pkg::MyNodeletClass" base_class_type="nodelet::Nodelet">
  <description>
  This is my nodelet.
  </description>
  </class>
</library>

5.修改package.xml文件,增加:

cd ~/catkin_ws/src/example_pkg/
vim package.xml
其内容为
 <buildtool_depend>catkin</buildtool_depend>
  <build_depend>nodelet</build_depend>
  <build_depend>roscpp</build_depend>

  <run_depend>nodelet</run_depend>
  <run_depend>roscpp</run_depend>


  <!-- The export tag contains other, unspecified, tags -->
  <export>
    <!-- Other tools can request additional information be placed here -->
    <nodelet plugin="${prefix}/plugins/nodelet_plugins.xml" />
  </export>

6.修改CMakeLists.txt

cd ~/catkin_ws/src/example_pkg
vim  CMakeLists.txt 

其内容为
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
  include
  ${catkin_INCLUDE_DIRS}
  ${Boost_INCLUDE_DIRS}
)

## Declare a C++ library
add_library(${PROJECT_NAME}  src/MyNodeletClass.cpp)

add_dependencies(${PROJECT_NAME} 
   ${${PROJECT_NAME}_EXPORTED_TARGETS} 
   ${catkin_EXPORTED_TARGETS}
)

target_link_libraries(${PROJECT_NAME}
   ${catkin_LIBRARIES}
)

6.创建mynodelet.launch文件

d ~/catkin_ws/src/example_pkg/
mkdir launch
touch launch/mynodelet.launch
vim  launch/mynodelet.launch
其内容为
<launch>
  <node pkg="nodelet" type="nodelet" name="standalone_nodelet"  args="manager" output="screen"/>

  <node pkg="nodelet" type="nodelet" name="MyNodeletClass" args="load example_pkg/MyNodeletClass standalone_nodelet" output="screen">
  </node>                 
</launch>

6.编译

cd ~/catkin_ws/
catkin_make
rospack profile

7.运行

  • 新终端,运行roscore
$ roscore
  • 新终端,运行launch
$ rosluanch examples_pkg mynodelet.launch

参考:
http://www.ncnynl.com/archives/201702/1326.html
http://blog.csdn.net/zhangrelay/article/details/62048915
http://rosclub.cn/post-164.html
http://blog.csdn.net/yiranhaiziqi/article/details/53308657
http://www.lai18.com/content/2386868.html
http://blog.csdn.net/zyh821351004/article/details/52143309










以上是关于nodelet的应用的主要内容,如果未能解决你的问题,请参考以下文章

ros nodelet 使用

第十九课 pluginlib&Nodelet

ROS nodelet的使用

hdl_localization_nodelet.cpp问题记录

静态库的c ++链接器错误

ROS到ROS2的多节点组合运行