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