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

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.20


SUMMARY
========

PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.20

NODES

auto-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_loggers


contacting 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日于哈尔滨

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值