理解 ROS节点(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/)

Description: 本教程主要介绍 ROS 图(graph)概念 并讨论roscorerosnoderosrun 命令行工具的使用。

  1.先决条件

  在本教程中我们将使用到一个轻量级的模拟器,请使用以下命令来安装:

root@zxwubuntu-Aspire-V3-572G:~#  sudo apt-get install ros-<distro>-ros-tutorials

  用你使用的ROS发行版本名称(例如electric、fuerte、groovy、hydro等)替换掉'<distro>'。

  2.图概念概述

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。

  • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

  • rosout: ROS中相当于stdout/stderr。

  • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

  3.节点

  一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点

  通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。

  4.客户端库

  ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

  • rospy = python 客户端库
  • roscpp = c++ 客户端库

  5.roscore

  roscore 是你在运行所有ROS程序前首先要运行的命令。

root@zxwubuntu-Aspire-V3-572G:~# roscore

然后你会看到类似下面的输出信息::

... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-

machine_name-.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://machine_name:33919/
ros_comm version 1.4. SUMMARY
======== PARAMETERS
* /rosversion
* /rosdistro NODES auto-starting new master
process[master]: started with pid []
ROS_MASTER_URI=http://machine_name:11311/ setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-]: started with pid []
started core service [/rosout]

如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题。参见 :http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration

如果 roscore 不能初始化并提示缺少权限,这可能是因为~/.ros文件夹

归属于root用户(只有root用户才能访问),修改该文件夹的用户归属关系:

root@zxwubuntu-Aspire-V3-572G:~# sudo chown -R <your_username> ~/.ros

  6.使用rosnode

  打开一个新的终端, 可以运行 rosnode list

root@zxwubuntu-Aspire-V3-572G:~# sudo rosnode list

这表示当前只有一个节点在运行: rosout。因为这个节点用于收集和记录节点调

试输出信息,所以它总是在运行的。

rosnode info 命令返回的是关于一个特定节点的信息。

root@zxwubuntu-Aspire-V3-572G:~# rosnode info /rosout

这给了我们更多的一些有关于rosout的信息, 例如,事实上由它发布/rosout_agg.

现在,让我们看看更多的节点。为此,我们将使用rosrun 弹出另一个节点。

  7.使用 rosrun

rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。

用法:

$ rosrun [package_name] [node_name]

现在我们可以运行turtlesim包中的 turtlesim_node。

然后, 在一个 新的终端:

root@zxwubuntu-Aspire-V3-572G:~# rosrun turtlesim turtlesim_node

你会看到 turtlesim 窗口:  

 

注意: 这里的 turtle 可能和你的 turtlesim 窗口不同。别担心,这里有许多版本的turtle ,而你的是一个惊喜!

在一个 新的终端:

root@zxwubuntu-Aspire-V3-572G:~# rosnode list

你会看见类似于:

ROS的一个强大特性就是你可以通过命令行重新配置名称。

关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用`ctrl

-C`)。现在让我们重新运行它,但是这一次使用Remapping Argument改变节点名称:

root@zxwubuntu-Aspire-V3-572G:~# rosrun turtlesim turtlesim_node __name:=my_turtle

现在,我们退回使用 rosnode list:

root@zxwubuntu-Aspire-V3-572G:~# rosnode list

注意: 如果你仍看到 /turtlesim在列表中,这可能意味着你在终端中使用ctrl-C停 止节点而不是关闭窗口,或者你没有$ROS_HOSTNAME环境变量,这在

http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration 中有定义。你可以尝试清除rosnode 列表,通过:

root@zxwubuntu-Aspire-V3-572G:~# rosnode cleanup 

我们可以看到新的/my_turtle 节点。使用另外一个 rosnode 指令, ping,:

root@zxwubuntu-Aspire-V3-572G:~# rosnode ping my_turtle 

  8.回顾

本节所涉及的内容:

  • roscore = ros+core : master (provides name service for ROS) + rosout (stdout/stderr) + parameter server (parameter server will be introduced later)
  • rosnode = ros+node : ROS tool to get information about a node.
  • rosrun = ros+run : runs a node from a given package.

到这里,您已经了解了ROS节点是如何工作的。

ROS节点理解--5的更多相关文章

  1. ROS学习(六)—— 理解ROS节点

    一.准备工作 下载一个轻量级的模拟器 sudo apt-get install ros-kinetic-ros-tutorials 二.图概念的理解 1.Nodes:一个节点就是一个可执行文件,用来与 ...

  2. ROS学习笔记三(理解ROS节点)

    要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点 ...

  3. (五)ROS节点

    一. 理解ROS 节点: ROS的节点: 可以说是一个可运行的程序.当然这个程序可不简单.因为它可以接受来自ROS网络上其他可运行程序的输出信息,也可以发送信息给ROS网络,被其他 ROS 可运行程序 ...

  4. ROS Learning-007 beginner_Tutorials ROS节点

    ROS Indigo beginner_Tutorials-06 ROS节点 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...

  5. 通过ros节点发布Twist Messages控制机器人--10

    原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 1.到目前为止,我们已经从命令行移动机器人,但大多数时间你将依靠一个ros节点发布适当的Twist消息. ...

  6. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package).   1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...

  7. ros节点启动和关闭相关

    Ros node启动与关闭 1. ros运行单位: Ros程序运行的单位是ros node. 2. ros 节点的启动: (1)初始化ros节点:通过调用ros::init()接口实现:可以通过参数指 ...

  8. ROS-4 : ROS节点和主题

    依照<ROS-3 : Catkin工作空间和ROS功能包>,创建catkin工作空间,并在起src下创建功能包ros_demo_pkg,依赖项为roscpp.std_msgs.action ...

  9. 4.4 ROS节点名称重名

    4.4 ROS节点名称重名 场景:ROS 中创建的节点是有名称的,C++初始化节点时通过API:ros::init(argc,argv,"xxxx");来定义节点名称,在Pytho ...

随机推荐

  1. SqlServer 如何知道是否发生了索引碎片

    --如何知道是否发生了索引碎片 SELECT object_name(dt.object_id) Tablename,si.name IndexName,dt.avg_fragmentation_in ...

  2. angular学习笔记(二十五)-$http(3)-转换请求和响应格式

    本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transfo ...

  3. ny523 亡命逃串 hdoj 1253胜利大逃亡

    亡命逃窜 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧.不过英雄不是这么好当的.这个可怜的娃被魔 ...

  4. python2 UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in position 7: ordinal not in range(128)

    python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...

  5. SimpleDateFormat转换时间,12,24时间格式

    Date d = new Date(); SimpleDateFormat ss = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//1 ...

  6. struts2文件下载的编写步骤(文件导出)和输入流转换的方法

    strut2文件下载三部曲:一个流.两个头信息 说明: ①一个流,在Action中需要一个getInputStream()的方法来获取下载的内容,其中inputStream是默认的,他会指示Strea ...

  7. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

  8. logback日志模板与详解

    <pattern>的转换符说明: (这部分引用自http://aub.iteye.com/blog/1103685)转换符 作用 c {length } lo {length } logg ...

  9. CocosIDE导出Android APK的注意事项

    近期在用CocosIDE来开发新的游戏,整体感觉非常不错.支持断点调试.真机调试,调试时候的变量信息也比非常多vs的lua插件丰富.用起来也比一些专门的lua调试工具要方便.并且有一定的语法差错功能. ...

  10. jquery-ajax-php(内容点赞并进行cookie限制实现)

    1.模板页html例如以下: 2.模板页的jquery里的ajax实现例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T ...