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.htmlhttp://blog.csdn.net/zhangrelay/article/details/62048915http://rosclub.cn/post-164.htmlhttp://blog.csdn.net/yiranhaiziqi/article/details/53308657http://www.lai18.com/content/2386868.htmlhttp://blog.csdn.net/zyh821351004/article/details/52143309

时间: 2024-10-13 07:15:26

nodelet的应用的相关文章

第十九课 pluginlib&amp;Nodelet

把rgb摄像头的数据转换为laser的时候使用了Nodelet. pluginlib(插件库) 在ros中有一个plugin的包,下面是一个ROS Plugin Registration的例子 上面包含一个polygon_interface多边形接口,它包含了两个插件,第一个插件是rectangle_plugin(矩形),第二个插件是triangle_plugin(三角形),他们都是通过class list export导出到Polygon_interface中,然后在Polygon plugi

nodelet的理解

1.介绍 nodelet包可以为在相同进程中的多个算法之间实现零拷贝的传输方式. 这个包也提供了实现一个nodelet所需的nodelet基类以及用于实例化nodelet的NodeletLoader类. Source: git https://github.com/ros/nodelet_core.git (branch: indigo-devel) Nodelets旨在提供一种在单机器单进程运行多个算法而不会在进程中传递消息时产生复制成本的方法. roscpp具有在同一节点内的发布和订阅调用之

ROS nodelet的使用

ROS是一种基于分布式网络通讯的操作系统,整个机器人控制系统是由一个Master主节点和若干个功能相对独立的Node子节点组成,这也是ROS系统最主要的特点就是分布式以及模块化的设计.在ROS通讯过程中Master节点存储着各个子节点的topics和services的注册信息,每个功能节点在请求服务之前先向主节点进行注册,然后节点之间就可以直接进行信息传递.ROS的底层通信都是基于XML-RPC协议实现的. XML-RPC协议是XML Remote Prodecure Call的简称,是一种远程

ROS turtlebot_follower :让机器人跟随我们移动

ROS turtlebot_follower 学习 首先在catkin_ws/src目录下载源码,地址:https://github.com/turtlebot/turtlebot_apps.git 了解代码见注释(其中有些地方我也不是很明白) follower.cpp #include <ros/ros.h> #include <pluginlib/class_list_macros.h> #include <nodelet/nodelet.h> #include &

movebase导航

利用turtlebot 的导航配置文件 由于movbase发的速度太不友好了所以使用了ros自带的滤波安装相应的包 apt-get install ros-indigo-yocs-velocity-smoother 我的配置文件 standalone.yaml # Example configuration: # - velocity limits are around a 10% above the physical limits # - acceleration limits are jus

move_base

1>准备导航所需要的包. a.ros-indigo-gampping :我们不需要修改包内的东西,所以直接安装可执行文件就好了. sudo apt-get install ros-indigo-slam-gmapping b.安装雷达的驱动(我的是robopack),直接将提供的ros驱动包拷贝到工作空间中, c.安装导航定位包,navigation 进入git:https://github.com/ros-planning/navigation/tree/indigo-devel,下载和自己r

ROS Node/Topic/Message/Service的一些问题

1.Node http://blog.exbot.net/archives/1412 (摘自老王说ros) node干的什么活?callback queue里的活.这个callback queue里的callback是哪里来的呢?常见的是subscriber的callback,当然还有其他的,包括publisher的,service的.那这些callback是什么时候被调用的呢.那就是spin()或者spinonce().spin调用在queue 里所有的availiable的callback,

ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念

由于工作事物繁忙,更新有些慢,抱歉. 已经完成的各章节补充说明,会依据反馈意见持续更新,希望大家多提宝贵意见,非常感谢. 在完成了第一章的学习实现之后,基本已经掌握了ROS系统的安装,那么如何使用ROS,理解系统架构和概念,这是第二章的内容.hydro-indigo-kinetic通用概念不做区分. 如果使用IDEs进行ROS开发环境构建,推荐:http://wiki.ros.org/IDEs RoboWare Studio:http://www.roboware.me 补充参考:http://

深度相机的仿激光数据创建地图--24

原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 前提: 1.本教程确保你已经成功安装了kinect 或者xtion深度相机的驱动,能够正常使用.驱动安装可参考我的博客http://www.cnblogs.com/zxouxuewei/p/5271939.html 2.你已经具有一台能够手动或者自动移动的平台,将你的深度相机真确安装在移动平台上.(如下图片是我自己制作的移动平台,以后会对接口做详细的描述) 一.使用kinect深度相机将点云数据转换为