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_test,依赖项nodelet roscpp std_msgs

CMakeLists.txt

  1. cmake_minimum_required(VERSION 2.8.3)
  2. project(nodelet_test_pkg)
  3. find_package(catkin REQUIRED COMPONENTS nodelet roscpp std_msgs)#
  4. ## Setup include directories
  5. include_directories(${catkin_INCLUDE_DIRS})
  6. catkin_package(
  7. )
  8. add_library(nodelet_test plus.cpp)
  9. target_link_libraries(nodelet_test ${catkin_LIBRARIES})

package.xml

  1. <package>
  2. <name>nodelet_test_pkg</name>
  3. <version>0.0.0</version>
  4. <description>Nodelet test.</description>
  5. <maintainer email="huasheng_zyh@163.com">kint zhao</maintainer>
  6. <license>BSD</license>
  7. <buildtool_depend>catkin</buildtool_depend>
  8. <build_depend>nodelet</build_depend>
  9. <build_depend>roscpp</build_depend>
  10. <build_depend>std_msgs</build_depend>
  11. <run_depend>nodelet</run_depend>
  12. <run_depend>roscpp</run_depend>
  13. <run_depend>std_msgs</run_depend>
  14. <export>
  15. <nodelet plugin="${prefix}/nodelet_test_plugin.xml"/>
  16. </export>
  17. </package>
plugin
  1. <library path="lib/libnodelet_test_lib">
  2. <class name="nodelet_ns/Plus" type="nodelet_ns::Plus" base_class_type="nodelet::Nodelet">
  3. <description>
  4. A node to add a value and republish.
  5. </description>
  6. </class>
  7. </library>

launch

  1. <launch>
  2. <node pkg="nodelet" type="nodelet" name="manager_1"  args="manager" output="screen"/>
  3. <node pkg="nodelet" type="nodelet" name="test1" args="load nodelet_ns/Plus manager_1" output="screen"/>
  4. <node pkg="nodelet" type="nodelet" name="test2" args="load nodelet_ns/Plus manager_1" output="screen"/>
  5. <node pkg="nodelet" type="nodelet" name="test3" args="load nodelet_ns/Plus manager_1" output="screen"/>
  6. <node pkg="nodelet" type="nodelet" name="manager_2"  args="manager" output="screen"/>
  7. <node pkg="nodelet" type="nodelet" name="test4" args="load nodelet_ns/Plus manager_2" output="screen"/>
  8. <node pkg="nodelet" type="nodelet" name="test5" args="load nodelet_ns/Plus manager_2" output="screen"/>
  9. <node pkg="nodelet" type="nodelet" name="test6" args="standalone nodelet_ns/Plus " output="screen"/>
  10. </launch>

.cpp文件

  1. #include <pluginlib/class_list_macros.h>
  2. #include <nodelet/nodelet.h>
  3. #include <ros/ros.h>
  4. #include <std_msgs/Float64.h>
  5. #include <stdio.h>
  6. #include <math.h> //fabs
  7. namespace nodelet_ns
  8. {
  9. class Plus : public nodelet::Nodelet
  10. {
  11. public:
  12. Plus()
  13. : value_(0)
  14. {}
  15. private:
  16. virtual void onInit()
  17. {
  18. ros::NodeHandle& private_nh = getPrivateNodeHandle();
  19. private_nh.getParam("value", value_);
  20. pub = private_nh.advertise<std_msgs::Float64>("out", 10);
  21. sub = private_nh.subscribe("in", 10, &Plus::callback, this);
  22. }
  23. void callback(const std_msgs::Float64::ConstPtr& input)
  24. {
  25. std_msgs::Float64Ptr output(new std_msgs::Float64());
  26. output->data = input->data + value_;
  27. NODELET_DEBUG("Adding %f to get %f", value_, output->data);
  28. pub.publish(output);
  29. }
  30. ros::Publisher pub;
  31. ros::Subscriber sub;
  32. double value_;
  33. };
  34. PLUGINLIB_DECLARE_CLASS(nodelet_ns, Plus, nodelet_ns::Plus, nodelet::Nodelet);//*******
  35. }



nodelet的应用的更多相关文章

  1. ROS nodelet的使用

    ROS是一种基于分布式网络通讯的操作系统,整个机器人控制系统是由一个Master主节点和若干个功能相对独立的Node子节点组成,这也是ROS系统最主要的特点就是分布式以及模块化的设计.在ROS通讯过程 ...

  2. ros nodelet 使用

    ros nodelet能够加快高吞吐量程序运行速度比如点云 基本入门程序可以看 http://wiki.ros.org/nodelet/Tutorials/Porting%20nodes%20to%2 ...

  3. nodelet的理解

    1.介绍 nodelet包可以为在相同进程中的多个算法之间实现零拷贝的传输方式. 这个包也提供了实现一个nodelet所需的nodelet基类以及用于实例化nodelet的NodeletLoader类 ...

  4. 第十九课 pluginlib&Nodelet

    把rgb摄像头的数据转换为laser的时候使用了Nodelet. pluginlib(插件库) 在ros中有一个plugin的包,下面是一个ROS Plugin Registration的例子 上面包 ...

  5. ROS nodelet 理解记录

    发现网上许多的例子都是基于官网的例子,还需要做进一步的说明. 1. NODELET_DEBUG 是无法打印的信息的,需要使用NODELET_INFO NODELET_DEBUG("Addin ...

  6. movebase导航

    利用turtlebot 的导航配置文件 由于movbase发的速度太不友好了所以使用了ros自带的滤波安装相应的包 apt-get install ros-indigo-yocs-velocity-s ...

  7. 利用move_base导航--42

    摘要: 原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 各位博友好长时间又没有写博客了,突然发现上班和在学校是不一样的,在公司的却没有时间写博客了,不过 ...

  8. PCL Nodelets 和 3D 点云---36

    原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先确保你的kinect驱动或者uvc相机驱动能正常启动,如果你没有安装kinect深度相机驱动,请 ...

  9. ubuntu14.04 and ros indigo install kinect driver--16

    摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 今日多次测设ros indigo install kinect driver ,提示各种失败,然 ...

随机推荐

  1. ArcGIS_Desktop安装步骤

      1.双击镜像文件 2.下一步 3.关闭 4.下一步 5.下一步 6.下一步 7.下一步 8.下一步 9.安装 10.一直到下一步安装完成

  2. yum 报错

    Loaded plugins: fastestmirror, prestoLoading mirror speeds from cached hostfileCould not retrieve mi ...

  3. eclipse配置项目部署到到本地tomcat

    一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...

  4. 1136 A Delayed Palindrome

    题意:略. 思路:大整数相加,回文数判断.对首次输入的数也要判断其是否是回文数,故这里用do...while,而不用while. 代码: #include <iostream> #incl ...

  5. PL/SQL 训练12--动态sql和绑定变量

    --什么是动态SQL?动态PL/SQL--动态SQL是指在运行时刻才构建执行的SQL语句--动态PL/SQL是指整个PL/SQL代码块都是动态构建,然后再编译执行 --动态SQL来可以用来干什么? - ...

  6. mysql 无意重启 [Note] /usr/sbin/mysqld: Normal shutdown

    情况: 今早发现,昨天下午安装的4台mysql服务器,突然出现,由于在shell窗口 (root@localhost:mysql.sock) [(none)]> 190102 18:12:16 ...

  7. 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形

    FindContours 在二值图像中寻找轮廓  int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_cont ...

  8. MyBatis 工具 pndao - 自动写 SQL

    pndao的原理并不复杂,是基于MyBatis的方法命名约定来生成SQL,并且写入MyBatis需要的XML. 写之前会判断是否已经存在XML或者注解,如果已经存在则略过此方法,所以无论是注解还是XM ...

  9. CVE-2017-11882复现配合koadic

    项目地址:https://github.com/iBearcat/CVE-2017-11882 首先开启koadic,然后配置一下 复制这句代码 mshta http://192.168.220.13 ...

  10. ansibel---tag模块

    如果你有一个大的剧本,你可以在不运行整个剧本的情况下运行一个特定的部分.  由于这个原因,两个游戏和任务都支持一个“标记:”属性.您只能根据命令行中的标记(标记或- skip- tags)对任务进行筛 ...