ROS学习笔记四:理解ROS节点

本节主要介绍ROS图形概念,讨论ROS命令行工具roscore、rosnode和rosrun。

要求

要求已经在Linux系统中安装一个学习用的ros软件包例子:

sudo apt-get install ros-indigo-ros-tutorials

ROS图形概念概述

  • nodes:一个节点可以通过ROS和其他节点进行通信;
  • messages:当订阅或者发布一个topic时使用的数据类型;
  • topics:节点可以发布信息到topics或者从topics那里订阅信息;
  • master:ROS的name service,例如让不同的节点可以找到彼此;
  • rosout:等价于ROS中的stdout/stderr;
  • roscore:master+rosout+parameter service。

节点

一个节点仅仅是ROS软件包中的一个可执行文件,ROS节点使用客户端库函数和其他节点进行通信,节点可以从topic中订阅信息,也可发送消息至topic,同时节点也可以使用或者提供服务。

客户端库函数

ROS客户端库函数允许使用不同的编程语言进行编程通信:

  • rospy:Python client library
  • roscpp:C++ client library

roscore

roscore是你在使用ROS的时候第一件应该做的事:

roscore &

然后就会看到输出的如下信息:

[1] 4080
mountzf@ubuntu:~/ros_tutorial$ ... logging to /home/mountzf/.ros/log/0491d61a-69eb-11e6-93e8-000c29521e21/roslaunch-ubuntu-4080.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://ubuntu:32777/
ros_comm version 1.11.20SUMMARY
========PARAMETERS* /rosdistro: indigo* /rosversion: 1.11.20NODESauto-starting new master
process[master]: started with pid [4092]
ROS_MASTER_URI=http://ubuntu:11311/setting /run_id to 0491d61a-69eb-11e6-93e8-000c29521e21
process[rosout-1]: started with pid [4105]
started core service [/rosout]

使用rosnode

打开一个新的终端窗口,看看运行roscore之后会出现些什么。rosnode显示了现在正在运行的ROS节点的信息。其中rosnode list命令列出了正在运行的节点名称。

rosnode list
/rosout

这说明现在系统中只有一个节点rosout在运行,它将一直运行并收集和记录节点的调试输出。命令rosnode info返回一个特定节点的节点信息。

rosnode info /rosout

这将返回节点rosout的一些信息:

Node [/rosout]
Publications: * /rosout_agg [rosgraph_msgs/Log]Subscriptions: * /rosout [unknown type]Services: * /rosout/set_logger_level* /rosout/get_loggerscontacting node http://ubuntu:35108/ ...
Pid: 4105

使用rosrun

rosrun命令允许你直接通过软件包名称运行软件包当中的节点(不需要知道软件包的所在路径,但必须是在ROS的搜索目录范围之内)。
使用方法:

rosrun [package_name] [node_name]

所以现在我们可以运行软件包turtlesim中的turtlesim_node节点:

rosrun turtlesim turtlesim_node

在一个新窗口中

rosnode list
/rosout
/turtlesim

ROS中很有力的一个特征是你可以在命令行中重新分配名字

rosrun turtlesim turtlesim_node __name:=my_turtlesim
rosnode list
/my_turtlesim
/rosout

如上,我们的节点名称更改为了my_turtlesim,下面我们使用另一个rosnode命令行命令rosnode ping:

rosnode ping /my_turtlesim
rosnode: node is [/my_turtlesim]
pinging /my_turtlesim with a timeout of 3.0s
xmlrpc reply from http://ubuntu:33201/  time=0.409842ms
xmlrpc reply from http://ubuntu:33201/  time=1.335144ms
xmlrpc reply from http://ubuntu:33201/  time=1.242876ms
xmlrpc reply from http://ubuntu:33201/  time=1.311064ms
xmlrpc reply from http://ubuntu:33201/  time=1.254082ms

总结

  • roscore=ros+core,master(为ROS提供名称服务)+rosout(stdout/stderr)+parameter server。所以在使用ROS的时候的第一件事就是运行roscore来启动这些服务;
  • rosnode=ros+node,用来获得ROS节点信息和操作节点的工具;
  • rosrun=ros+run,用来运行一个给定软件包中的节点。

祝枫
2016年8月24日于哈尔滨

ROS学习笔记四:理解ROS节点相关推荐

  1. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  2. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters 上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameter ...

  3. ROS学习笔记四:用C++编写ROS发布与订阅

    一.创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...

  4. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  5. ROS学习笔记26(ROS的命令行工具)

    需要说明的是:本篇博客内容来自于<ROS机器人编程 从基本概念到机器人应用程序编程实战>的第五章,本是打算参考和翻译官网相关资料,但官网资料的质量明显没有这本书描述的更为清楚,记录于此仅仅 ...

  6. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

  7. ROS学习笔记九:ROS工具

    ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...

  8. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

  9. ROS学习笔记2(ROS文件系统和ROS常用命令)

    文章目录 1 预备工作 2 ros包文件系统概览 3 文件系统工具 3.1 rospack 3.2 roscd 3.3 roscd log 3.4 rosls 3.5 tab代码补全 4 总结 1 预 ...

最新文章

  1. Nature:原来记忆是这样形成的!科学家发现记忆形成新机制
  2. oracle之二控制文件
  3. JQuery中$.ajax()方法参数详解(转)
  4. python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?
  5. java字符串与数组比较大小_java-如何将存储在数组中的字符串与简单字符串进行比较?...
  6. mysql 接收中文字符,MYSQL匹配中文字符
  7. 炜煌T3POS58微打参数设置方法
  8. 【转载】施一公谈如何做科研
  9. Android系统原理及开发要点详解
  10. 中国传统色的魅力|这8组中国风传统颜色你一定要收藏
  11. Windows XP SP2下载[转自Mydrivers.com]
  12. Android解决输入法自动弹出方法大全
  13. 学术新秀采访-陆品燕~How To Get Your SIGGRAPH Paper Rejected
  14. mysql 存储数据时,报错Cause: java.sql.SQLException: Incorrect string value: '\xF4\x80\xB3\x81\xE8\xAE...'
  15. 增速放缓、对手打劫,顺丰雄风不再?
  16. Django基础阶段小结一下
  17. 数据特征处理之数值型数据(标准化)
  18. 凸多边形的最优三角划分
  19. 小白必看,教你怎么设置引流脚本话术的教程
  20. 定义一个函数,求序列中的偶数,并求出偶数的个数。

热门文章

  1. 你不努力,就是你的错!
  2. Java程序猿笔试面试之String1
  3. webApp 开发技术要点总结
  4. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
  5. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign
  6. 那些年学过的Hibernate笔记
  7. WinServer2008R2搭建和授权DHCP服务器详解
  8. 不写代码不用Excel,如何制作高大上的财务分析?
  9. web报表工具FineReport常见的数据集报错错误代码和解释
  10. Ribbon客户端负载均衡