ROS专题之nodelet简明笔记_电气自动化网
首页 资讯 应用 高压 设计 行业 低压 电路图 关于

机器人

旗下栏目: 物联网 机器人 新技术 仪器仪表

ROS专题之nodelet简明笔记

机器人 | 发布时间:2017-09-07 | 人气: | #评论# | 本文关键字:ROS,nodelet
摘要:ROS专题----nodelet简明笔记 ------ 此页面包含使用nodelet的教程。 运行节点 这将显示如何在系统中运行节点。 将节点移植到节点 来自使用nodelet的其他包/堆栈的教程: Kobuki控制器教程 :为

ROS专题----nodelet简明笔记

------


此页面包含使用nodelet的教程。

  1. 运行节点

    这将显示如何在系统中运行节点。

  2. 将节点移植到节点

来自使用nodelet的其他包/堆栈的教程:

  • Kobuki控制器教程:为Kobuki编写您自己的基于节点的控制器

------

roslaunch nodelet_tutorial_math plus.launch 
... logging to /home/relaybot/.ros/log/7f42ed06-088b-11e7-99c2-70f1a1ca7552/roslaunch-relaybot-desktop-8447.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://relaybot-desktop:34104/

SUMMARY
========

PARAMETERS
 * /Plus2/value: 10
 * /Plus3/value: 2.5
 * /rosdistro: kinetic
 * /rosversion: 1.12.7

NODES
  /
    Plus (nodelet/nodelet)
    Plus2 (nodelet/nodelet)
    Plus3 (nodelet/nodelet)
    standalone_nodelet (nodelet/nodelet)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
process[standalone_nodelet-1]: started with pid [8485]
process[Plus-2]: started with pid [8486]
process[Plus2-3]: started with pid [8487]
process[Plus3-4]: started with pid [8488]
[ INFO] [1489489721.430571269]: Loading nodelet /Plus of type nodelet_tutorial_math/Plus to manager standalone_nodelet with the following remappings:
[ INFO] [1489489721.430679072]: /Plus/out -> /remapped_output
[ INFO] [1489489721.439768636]: waitForService: Service [/standalone_nodelet/load_nodelet] has not been advertised, waiting...
type is nodelet_tutorial_math/Plus
[ INFO] [1489489721.444581734]: Loading nodelet /Plus2 of type nodelet_tutorial_math/Plus to manager standalone_nodelet with the following remappings:
[ INFO] [1489489721.451421641]: waitForService: Service [/standalone_nodelet/load_nodelet] has not been advertised, waiting...
[ INFO] [1489489721.872693083]: Initializing nodelet with 4 worker threads.
[ INFO] [1489489721.886004455]: waitForService: Service [/standalone_nodelet/load_nodelet] is now available.
[ INFO] [1489489721.891109441]: waitForService: Service [/standalone_nodelet/load_nodelet] is now available.


1504791880128811.jpg

------


[cpp] view plain copy print?

  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.   

  7.   

  8. #include <math.h> //fabs  

  9.   

  10. namespace nodelet_tutorial_math  

  11. {  

  12.   

  13. class Plus : public nodelet::Nodelet  

  14. {  

  15. public:  

  16.   Plus()  

  17.   : value_(0)  

  18.   {}  

  19.   

  20. private:  

  21.   virtual void onInit()  

  22.   {  

  23.     ros::NodeHandle& private_nh = getPrivateNodeHandle();  

  24.     private_nh.getParam("value", value_);  

  25.     pub = private_nh.advertise<std_msgs::Float64>("out", 10);  

  26.     sub = private_nh.subscribe("in", 10, &Plus::callback, this);  

  27.   }  

  28.   

  29.   void callback(const std_msgs::Float64::ConstPtr& input)  

  30.   {  

  31.     std_msgs::Float64Ptr output(new std_msgs::Float64());  

  32.     output->data = input->data + value_;  

  33.     NODELET_DEBUG("Adding %f to get %f", value_, output->data);  

  34.     pub.publish(output);  

  35.   }  

  36.   

  37.   ros::Publisher pub;  

  38.   ros::Subscriber sub;  

  39.   double value_;  

  40. };  

  41.   

  42. PLUGINLIB_DECLARE_CLASS(nodelet_tutorial_math, Plus, nodelet_tutorial_math::Plus, nodelet::Nodelet);  

  43. }  




------


[html] view plain copy print?

  1. <launch>  

  2.   <node pkg="nodelet" type="nodelet" name="standalone_nodelet"  args="manager" output="screen"/>  

  3.   

  4.   <node pkg="nodelet" type="nodelet" name="Plus" args="load nodelet_tutorial_math/Plus standalone_nodelet" output="screen">  

  5.     <remap from="/Plus/out" to="remapped_output"/>  

  6.   </node>         

  7.     

  8.   <rosparam param="Plus2" file="$(find nodelet_tutorial_math)/plus_default.yaml"/>  

  9.   <node pkg="nodelet" type="nodelet" name="Plus2" args="load nodelet_tutorial_math/Plus standalone_nodelet" output="screen">  

  10.     <rosparam file="$(find nodelet_tutorial_math)/plus_default.yaml"/>  

  11.   </node>  

  12.   <node pkg="nodelet" type="nodelet" name="Plus3" args="standalone nodelet_tutorial_math/Plus" output="screen">  

  13.     <param name="value" type="double" value="2.5"/>  

  14.     <remap from="Plus3/in" to="Plus2/out"/>  

  15.   </node>  

  16. </launch>  




------

运行节点


建立


我们假设nodelet_tutorial_math已经被编译并且roscore正在运行。


rosmake nodelet_tutorial_math roscore

打开经理

一个nodelet会内运行NodeletManager节点管理器是一个c ++程序,它被设置为监听ROS服务,并且是动态加载节点的可执行文件。在这种情况下,我们将运行一个独立的管理器,但在许多情况下,这些管理器将嵌入在运行的节点中。


rosrun nodelet nodelet manager __name:= nodelet_manager

为了清楚起见,我们已将此节点重命名为nodelet_manager。

启动节点

Nodelet也通过使用nodelet可执行文件远程启动。

这个代码做什么:这里调用的nodelet可执行文件将联系nodelet_manager并要求它实例化nodelet_tutorial_math / Plus节点的一个实例。它将通过名称nodelet1,以及任何重新映射,如果应用于nodelet中的代码。参数也出现在右边的命名空间中。


rosrun nodelet nodelet load nodelet_tutorial_math / Plus nodelet_manager __name:= nodelet1 nodelet1 / in:= foo _value:= 1.1

如果你做一个rostopic列表,你会看到:


/ foo / nodelet1 / out

如果你看看rosnode列表的输出,你会看到:


/ nodelet1 / nodelet_manager

测试操作

在单独的端子运行:


rostopic pub / foo std_msgs / Float64 5.0 -r 10


rostopic echo / nodelet1 / out

将显示:6.1是5.0 + 1.1。

责任编辑:电气自动化网
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。