文档章节

理解 ROS节点

慕水
 慕水
发布于 2017/09/08 13:15
字数 1552
阅读 24
收藏 0

码上生花,ECharts 作品展示赛正式启动!>>>

先决条件

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

$ sudo apt-get install ros-<distro>-ros-tutorials

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

 

图概念概述

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

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

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

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

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

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

 

节点

一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。

(节点是ros中非常重要的一个概念,为了帮助初学者理解这个概念,这里举一个通俗的例子:

例如,咱们有一个机器人,和一个遥控器,那么这个机器人和遥控器开始工作后,就是两个节点。遥控器起到了下达指 令的作用;机器人负责监听遥控器下达的指令,完成相应动作。从这里我们可以看出,节点是一个能执行特定工作任 务的工作单元,并且能够相互通信,从而实现一个机器人系统整体的功能。在这里我们把遥控器和机器人简单定义为两个节点,实际上在机器人中根据控制器、传感器、执行机构等不同组成模块,还可以将其进一步细分为更多的节点,这个是根据用户编写的程序来定义的。)

客户端库

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

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

 

roscore

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

请运行:

$ roscore

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

  • ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-
    
    machine_name-13039.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.7
    
    SUMMARY
    ========
    
    PARAMETERS
     * /rosversion
     * /rosdistro
    
    NODES
    
    auto-starting new master
    process[master]: started with pid [13054]
    ROS_MASTER_URI=http://machine_name:11311/
    
    setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
    process[rosout-1]: started with pid [13067]
    started core service [/rosout]

如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题。参见

网络设置——单机设置

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

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

 

$ sudo chown -R <your_username> ~/.ros

 

使用rosnode

打开一个新的终端, 可以使用 rosnode 像运行 roscore 一样看看在

运行什么...

 

注意: 当打开一个新的终端时,你的运行环境会复位,同时你的~/.bashrc

文件会复原。如果你在运行类似于rosnode的指令时出现一些问题,也许你需要添加

一些环境设置文件到你的~/.bashrc或者手动重新配置他们。

rosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点:

 

$ rosnode list
  • 你会看到:
  • /rosout

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

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

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

 

$ rosnode info /rosout

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

/rosout_agg.

  • ------------------------------------------------------------------------
    Node [/rosout]
    Publications:
     * /rosout_agg [rosgraph_msgs/Log]
    
    Subscriptions:
     * /rosout [unknown type]
    
    Services:
     * /rosout/set_logger_level
     * /rosout/get_loggers
    
    contacting node http://machine_name:54614/ ...
    Pid: 5092

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

 

使用 rosrun

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

用法:

 

$ rosrun [package_name] [node_name]

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

然后, 在一个 新的终端:

 

$ rosrun turtlesim turtlesim_node

你会看到 turtlesim 窗口:

  • turtlesim.png

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

在一个 新的终端:

 

$ rosnode list

你会看见类似于:

  • /rosout
    /turtlesim

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

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

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

 

$ rosrun turtlesim turtlesim_node __name:=my_turtle

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

 

$ rosnode list
  • 你会看见类似于:
  • /rosout
    /my_turtle

 

注意: 如果你仍看到 /turtlesim在列表中,这可能意味着你在终端中使用ctrl-C停

止节点而不是关闭窗口,或者你没有$ROS_HOSTNAME环境变量,这在

Network Setup - Single Machine Configuration中有定义。你可以尝试清除rosnode

列表,通过: $ rosnode cleanup

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

测试:

 

$ rosnode ping my_turtle
  • rosnode: node is [/my_turtle]
    pinging /my_turtle with a timeout of 3.0s
    xmlrpc reply from http://aqy:42235/     time=1.152992ms
    xmlrpc reply from http://aqy:42235/     time=1.120090ms
    xmlrpc reply from http://aqy:42235/     time=1.700878ms
    xmlrpc reply from http://aqy:42235/     time=1.127958ms

 

回顾

本节所涉及的内容:

  • 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话题。如果您想关闭

turtlesim_node,请按下“Ctrl-C”

本文转载自网络

上一篇: 理解ROS话题
下一篇: 编译ROS程序包
慕水
粉丝 1
博文 11
码字总数 0
作品 0
深圳
私信 提问
加载中
请先登录后再评论。
ROS进阶学习的过程

环境的安装与配置 这里有第一次按照书上的方法进行安装的步骤,也有后面学习中遇到的问题,需要对ROS进行重新安装配置的过程。 ROS使用教程-关于安装 初次在ubuntu14上安装ros-indigo的过程,...

CSDNhuaong
2017/11/04
0
0
SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——7.开机自启动ROS节点

摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识。接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发。本章将从树莓派3的开发环境搭建入手,为后...

osc_hccok3rz
2019/02/21
1
0
client library&roscpp

Client Library & roscpp ROS为机器人开发者提供了不同语言的编程接口,比如C++接口叫做roscpp,python接口叫做rospy,Java接口叫做rosjava。尽管语言不通,但这些接口都可以用来创建toppic、...

徐凯_xp
2019/05/04
0
0
【ROS入门-5】深入了解ROS话题通信机制的过程

文章目录 前言 在上一篇文章中简单了解了ROS话题通信机制,但是它内部的通信过程,很多人都是不知道的,今天我看了 胡春旭的书籍——《ROS机器人开发实践》,又加深了对ROS话题通信的理解,打...

_杰杰_
04/07
0
0
ROS学习笔记二:ROS系统架构及概念

本文主要是了解ROS的系统架构、文件夹结构以及工作所需的核心文件。 ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:<span style="color:red">文件系统级(The filesyst...

osc_3fzeg1rk
2019/03/20
6
0

没有更多内容

加载失败,请刷新页面

加载更多

idea 启动命令行的时候提示不能创建PTY

问题描述: 昨天上午,凯哥还在好好的使用idea,中午的时候,360扫描,好像要升级还是要干嘛的,没细看,然后凯哥就点击确定。结果到下午使用idea的Terminal 命令行的时候提示,如下图错误: ...

中凯_凯哥java
37分钟前
19
0
常用计数技巧和方法(理论篇)

常用计数技巧和方法(理论篇) 文章较长且大量使用 \(\LaTeX\) 导致渲染较慢,因此分为两个部分 由于组合方面的知识非常的繁细,容易忘记,使用时不够熟练,这里总结一下 以下内容有所借鉴百...

osc_tq5hz9vv
38分钟前
11
0
WinForm 工作流设计 1

从事软件行业那么多年,一直很少写博。很多技术,长时间不用都慢慢淡忘。 把自己学到的用笔记下来,可以巩固和发现不足,也可以把自己对技术的一些 理解,分享出来供大家批评指正。 废话不多...

osc_4p2c0ecc
40分钟前
15
0
vnc中文版客户端,vnc中文版客户端下载,使用教程。

vnc客户端简介 iis7远程桌面管理软件,是一款绿色小巧,功能实用的vnc客户端软件,其界面简洁,操作方便,可以同时远程查看多台主机,并且支持多台服务器间的来回切换,支持分屏,群控操作。...

知殴粥
40分钟前
12
0
K-Means聚类算法原理

    K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变...

osc_u20gxst6
41分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部