您的位置:首页 > 其它

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

2016-08-24 19:15 399 查看

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日于哈尔滨
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ROS 节点 roscore