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_test,依赖项nodelet roscpp std_msgs
CMakeLists.txt
- cmake_minimum_required(VERSION 2.8.3)
- project(nodelet_test_pkg)
- find_package(catkin REQUIRED COMPONENTS nodelet roscpp std_msgs)#
- ## Setup include directories
- include_directories(${catkin_INCLUDE_DIRS})
- catkin_package(
- )
- add_library(nodelet_test plus.cpp)
- target_link_libraries(nodelet_test ${catkin_LIBRARIES})
package.xml
- <package>
- <name>nodelet_test_pkg</name>
- <version>0.0.0</version>
- <description>Nodelet test.</description>
- <maintainer email="huasheng_zyh@163.com">kint zhao</maintainer>
- <license>BSD</license>
- <buildtool_depend>catkin</buildtool_depend>
- <build_depend>nodelet</build_depend>
- <build_depend>roscpp</build_depend>
- <build_depend>std_msgs</build_depend>
- <run_depend>nodelet</run_depend>
- <run_depend>roscpp</run_depend>
- <run_depend>std_msgs</run_depend>
- <export>
- <nodelet plugin="${prefix}/nodelet_test_plugin.xml"/>
- </export>
- </package>
plugin
- <library path="lib/libnodelet_test_lib">
- <class name="nodelet_ns/Plus" type="nodelet_ns::Plus" base_class_type="nodelet::Nodelet">
- <description>
- A node to add a value and republish.
- </description>
- </class>
- </library>
launch
- <launch>
- <node pkg="nodelet" type="nodelet" name="manager_1" args="manager" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test1" args="load nodelet_ns/Plus manager_1" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test2" args="load nodelet_ns/Plus manager_1" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test3" args="load nodelet_ns/Plus manager_1" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="manager_2" args="manager" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test4" args="load nodelet_ns/Plus manager_2" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test5" args="load nodelet_ns/Plus manager_2" output="screen"/>
- <node pkg="nodelet" type="nodelet" name="test6" args="standalone nodelet_ns/Plus " output="screen"/>
- </launch>
.cpp文件
- #include <pluginlib/class_list_macros.h>
- #include <nodelet/nodelet.h>
- #include <ros/ros.h>
- #include <std_msgs/Float64.h>
- #include <stdio.h>
- #include <math.h> //fabs
- namespace nodelet_ns
- {
- class Plus : public nodelet::Nodelet
- {
- public:
- Plus()
- : value_(0)
- {}
- private:
- virtual void onInit()
- {
- ros::NodeHandle& private_nh = getPrivateNodeHandle();
- private_nh.getParam("value", value_);
- pub = private_nh.advertise<std_msgs::Float64>("out", 10);
- sub = private_nh.subscribe("in", 10, &Plus::callback, this);
- }
- void callback(const std_msgs::Float64::ConstPtr& input)
- {
- std_msgs::Float64Ptr output(new std_msgs::Float64());
- output->data = input->data + value_;
- NODELET_DEBUG("Adding %f to get %f", value_, output->data);
- pub.publish(output);
- }
- ros::Publisher pub;
- ros::Subscriber sub;
- double value_;
- };
- PLUGINLIB_DECLARE_CLASS(nodelet_ns, Plus, nodelet_ns::Plus, nodelet::Nodelet);//*******
- }
nodelet的应用的更多相关文章
- ROS nodelet的使用
ROS是一种基于分布式网络通讯的操作系统,整个机器人控制系统是由一个Master主节点和若干个功能相对独立的Node子节点组成,这也是ROS系统最主要的特点就是分布式以及模块化的设计.在ROS通讯过程 ...
- ros nodelet 使用
ros nodelet能够加快高吞吐量程序运行速度比如点云 基本入门程序可以看 http://wiki.ros.org/nodelet/Tutorials/Porting%20nodes%20to%2 ...
- nodelet的理解
1.介绍 nodelet包可以为在相同进程中的多个算法之间实现零拷贝的传输方式. 这个包也提供了实现一个nodelet所需的nodelet基类以及用于实例化nodelet的NodeletLoader类 ...
- 第十九课 pluginlib&Nodelet
把rgb摄像头的数据转换为laser的时候使用了Nodelet. pluginlib(插件库) 在ros中有一个plugin的包,下面是一个ROS Plugin Registration的例子 上面包 ...
- ROS nodelet 理解记录
发现网上许多的例子都是基于官网的例子,还需要做进一步的说明. 1. NODELET_DEBUG 是无法打印的信息的,需要使用NODELET_INFO NODELET_DEBUG("Addin ...
- movebase导航
利用turtlebot 的导航配置文件 由于movbase发的速度太不友好了所以使用了ros自带的滤波安装相应的包 apt-get install ros-indigo-yocs-velocity-s ...
- 利用move_base导航--42
摘要: 原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 各位博友好长时间又没有写博客了,突然发现上班和在学校是不一样的,在公司的却没有时间写博客了,不过 ...
- PCL Nodelets 和 3D 点云---36
原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 1.首先确保你的kinect驱动或者uvc相机驱动能正常启动,如果你没有安装kinect深度相机驱动,请 ...
- ubuntu14.04 and ros indigo install kinect driver--16
摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 今日多次测设ros indigo install kinect driver ,提示各种失败,然 ...
随机推荐
- Asp.net页面间传值方式汇总
七种传值方式,分别是:URL传值,Session传值,Cookie传值,Server.Transfer传值,Application传值,利用某些控件的PostBackUrl属性和使用@Previous ...
- excel oracle字段命名(大写下划线分词)转 驼峰命名
干货: (帕斯卡) =LEFT(C251,1)&MID(SUBSTITUTE(PROPER(C251),"_",""),2,100) (驼峰) =LOW ...
- SSM框架——整合搭建流程
1.首先创建maven工程,使用哪种方式进行创建都可以,可以参考博主之前的文章: <两种方式创建Maven项目[方式二]><两种方式创建Maven项目[方式一]> 2.先看看搭 ...
- Python学习系列(七)( 数据库编程)
Python学习系列(七)( 数据库编程) Python学习系列(六)(模块) 一,MySQL-Python插件 Python里操作MySQL数据库,需要Python下安装访 ...
- mysql存入GBK编码字段信息
set @moneyStr=BASE64_ENCODE(CONVERT(CONCAT('线上报名且已交费',money,'元') using GBK));
- (转)android平台下使用点九PNG技术
“点九”是andriod平台的应用软件开发里的一种特殊的图片形式,文件扩展名为:.9.png 智能手机中有自动横屏的功能,同一幅界面会在随着手机(或平板电脑)中的方向传感器的参数不同而改变显示的方向, ...
- 1088 Rational Arithmetic
题意: 给出两个分式(a1/b1 a2/b2),分子.分母的范围为int型,且确保分母不为0.计算两个分数的加减乘除,结果化为最简的形式,即"k a/b",其中若除数为0的话,输出 ...
- xunsearch基本使用
目录 基本实践 异常捕获 XSDocument 文档 添加操作 ini 更新.修改文档 删除文档 清空索引 平滑重建索引 使用索引缓冲区 自定义 SCWS 词库 基本实践 <?php // 引入 ...
- JavaScript笔记——事件
事件一般是用于浏览器和用户操作进行交互.最早是 IE 和 Netscape Navigator 中出现, 作为分担服务器端运算负载的一种手段.直到几乎所有的浏览器都支持事件处理.而 DOM2 级规范开 ...
- Android的按钮单击事件及监听器的实现方式
第一种:匿名内部类作为事件监听器类 大部分时候,事件处理器都没有什么利用价值(可利用代码通常都被抽象成了业务逻辑方法),因此大部分事件监听器只是临时使用一次,所以使用匿名内部类形式 的事件监听器更合适 ...