ROS学习笔记(七)- 理解ROS Nodes

这一篇介绍ROS graph的概念,并且讨论roscore,rosnode和rosrun命令行工具的用法

1 预备知识

又来一遍,以前的教程都有过了。
$ sudo apt-get install ros-<distro>-ros-tutorials
<distro>换成ROS版本号,我的是kinetic.

2 快速了解概Graph的概念

  • Nodes:一个Node第一个可执行程序,通过ROS与其他Nodes连接。
  • Messages:是一种ROS数据类型,向topic订阅和发布时使用。
  • Topics:Node可以向Topic发送Message或者向Topic订阅Message。
  • Master:ROS名称服务,也就是帮助Node找到彼此。
  • rosout:ROS等价于stdout/stderr(我也不明白什么意思)。
  • roscore:Master + rosout + parameter server(参数服务后面再说)

3 Nodes

Node差不多就是包里的一个可执行程序,Node之间可以通过一些服务通信,可以向Topic推送或者订阅消息,也可以提供或者使用服务。

4 客户库

ROS客户库允许Node用不同的编程语言写入交流。

  • rospy = python client library
  • roscpp = c++ client library

5 roscore

roscore是使用ROS之前需要第一个运行的东西
运行一下:
roscore
就会看到下面这个:

... logging to /home/qkingros/.ros/log/2f9f1242-fe5f-11e6-a174-000c29724ec8/roslaunch-ubuntu-4747.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:46865/
ros_comm version 1.12.6


SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.6

NODES

auto-starting new master
process[master]: started with pid [4759]
ROS_MASTER_URI=http://ubuntu:11311/

setting /run_id to 2f9f1242-fe5f-11e6-a174-000c29724ec8
process[rosout-1]: started with pid [4772]
started core service [/rosout]

6 使用rosnode

新打开一个Terminal,用rosnode看一下roscore到底在做什么。
rosnode显示当前正在运行的ROS nodes的信息。rosnode list命令列举出了这些活动的node:
rosnode list
你可以看到:

/rosout

显示只有一个node在运行,rosout总是在运行,因为它是用来收集和记录node调试输出的。
rosnode info指令返回指定node的信息:
$ 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://ubuntu:33983/ ...
Pid: 4772

下面要看更多node,我们要先使用rosrun再打开一个node。

7 使用rosrun

rosrun允许直接通过node的名称运行一个包内的node。
用法:
$ rosrun [package_name] [node_name]
再打开一个Terminal,运行:
$ rosrun turtlesim turtlesim_node
就会显示一只小乌龟,可能是海龟的卡通图片。
打开一个新窗口输入:
rosnode list
这个时候会显示:

/rosout
/turtlesim

ROS一个比较特色的功能就是可以使用命令行更改名字。
关掉海龟的窗口或者在运行海龟的命令行窗口Ctrl+C,现在重新运行,并且顺便给这个node改名:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
你会发现,诶……海龟变了一个。然鹅,这并不是改名起的作用,海龟样式本来就是随机出现的。真正改变的是这里:
$ rosnode list
然后显示的就类似于下面这个:

/my_turtle
/rosout
/turtlesim

仍然存在/turtlesim的原因是,刚刚用Ctrl-C而不是直接关掉窗口关掉了第一只海龟,可以使用$ rosnode cleanup清理一下列表。
根本原因是没有把 $ROS_HOSTNAME 环境变量设置成单机运行,可以进行如下设置之后再清理一下。

$ export ROS_HOSTNAME=localhost
$ export ROS_MASTER_URI=http://localhost:11311

还可以ping它一下:
$ rosnode ping my_turtle
结果如下:

rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://ubuntu:44591/  time=1.052856ms
xmlrpc reply from http://ubuntu:44591/  time=1.233101ms
xmlrpc reply from http://ubuntu:44591/  time=1.811028ms
xmlrpc reply from http://ubuntu:44591/  time=3.592014ms
xmlrpc reply from http://ubuntu:44591/  time=1.348972ms
xmlrpc reply from http://ubuntu:44591/  time=1.852036ms
xmlrpc reply from http://ubuntu:44591/  time=1.216173ms
xmlrpc reply from http://ubuntu:44591/  time=0.966072ms
xmlrpc reply from http://ubuntu:44591/  time=0.771046ms
xmlrpc reply from http://ubuntu:44591/  time=0.880003ms
xmlrpc reply from http://ubuntu:44591/  time=0.697851ms
xmlrpc reply from http://ubuntu:44591/  time=0.758171ms
xmlrpc reply from http://ubuntu:44591/  time=0.686169ms
xmlrpc reply from http://ubuntu:44591/  time=1.352072ms
xmlrpc reply from http://ubuntu:44591/  time=0.720024ms
xmlrpc reply from http://ubuntu:44591/  time=1.090050ms

8 复习

这个教程讲了:

  • roscore=ros+core:master(提供ROS名称服务)+rosout(stdout/stderr)+parameter server
  • rosnode=ros+node:ROS 获取node信息的工具
  • rosrun=ros+run:从一个指定的包中运行一个node
    现在我们已经了解了node是怎么工作的,下面介绍Topic是怎么工作的。
    而且接下来你可以放肆的使用Ctrl+C了。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容