文章转载自: http://www.robotos.net/thread-14-1-1.html
描述:这篇教程主要介绍ROS图的概念及命令行工具roscore,rosnode和rosrun等;
1、必备条件
在这篇教程里,我们会使用一个轻量级的模拟器,可以通过下面的命令安装:
$ sudo apt-get install ros-<distro>-ros-tutorials
替换命令中<distro>为你的ROS发布版本,如electric,fuerte,groovy等;
2、浏览图的概念
• 节点:节点是一个可执行文件,可以与其它ROS节点进行通信;
• 消息:ROS中的一种数据类型,用于订阅或者发布一个主题;
• 话题:节点发布的一个话题,同时也可以接收一个话题;
• Master:ROS系统中的名称管理器,方便节点之间的查找;
• rosout:在ROS系统中相当于标准的stdout/stderr;
• roscore:Master+rosout+parameter server(parameter server会稍后介绍)
3、Nodes节点
节点只不过是ROS功能包中的一个可执行文件,ROS节点采用ROS客户端库与其它节点进行通信,节点可以发布或订阅一个话题,也可以提供或使用一个服务。
4、客户端库
ROS客户端库允许节点以不同的编程语言实现,通信方式也可以采用不同的语言实现:
• rospy 为 python 语言实现的客户端库
• roscpp 为 c++ 语言实现的客户端库
5、roscore
使用ROS时,roscore 是第一个需要运行的指令;
指令如下:
$ roscore
运行后将看到类似如下的相关信息:
• ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.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://machine_name:33919/
• ros_comm version 1.4.7
•
• SUMMARY
• ========
•
• PARAMETERS
• * /rosversion
• * /rosdistro
•
• NODES
•
• auto-starting new master
• process[master]: started with pid [13054]
• ROS_MASTER_URI=http://machine_name:11311/
•
• setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
• process[rosout-1]: started with pid [13067]
• started core service [/rosout]
如果roscore没有成功初始化,有可能是网络配置的问题;
6、rosnode的使用
打开一个新的命令终端,利用rosnode查看一下正在运行的roscore在做什么
rosnode可以显示正在运行的ROS节点信息;
rosnode list列出了正在活动的节点:
$ rosnode list
将会看到如下执行结果
• /rosout
这表明只有一个节点正在运行,就是rosout,这是一个始终都在运行的节点,它用来收集节点的调试输出信息等;
rosnode info命令显示指定的节点的信息:
$ rosnode info /rosout
• ------------------------------------------------------------------------
• Node [/rosout]
• Publications:
• * /rosout_agg [rosgraph_msgs/Log]
•
• Subscriptions:
• * /rosout [unknown type]
•
• Services:
• * /rosout/set_logger_level
• * /rosout/get_loggers
•
• contacting node http://machine_name:54614/ ...
• Pid: 5092
现在,我们查看其他的节点;这次采用rosrun的方式激活节点;
7、rosrun的使用
采用rosrun指令,可以通过功能包的名字直接运行一个节点,而不必知道这个功能包的具体路径;
用法:
$ rosrun [package_name] [node_name]
让我们来运行一下turtlesim功能包里的节点turtlesim_node;
在一个新的命令终端输入如下指令:
$ rosrun turtlesim turtlesim_node

注意:turtlesim窗口中的小乌龟可能不一样,不用担心,ROS里有多种类型的小乌龟,你的是一个惊喜哦!
在一个新的命令终端输入:
$ rosnode list
可以看到如下信息:
• /rosout
• /turtlesim
ROS中一个比较强大的功能是你可以通过命令行重新指定名称;
关闭turtlesim窗口停止这个节点,或者返回rosrun turtlesim命令终端,按下crtl+C键盘。我们重新运行它,不过这次我们通过映射参数(Remapping Argument)来改变节点的名字:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
现在我们依然采用rosnode list:
$ rosnode list
• 将会得到如下输出信息:
• /rosout
• /my_turtle
我们查看这个新的my_turtle节点,这次采用另外一个rosnode参数ping,如下所示:
$ rosnode ping my_turtle
• pinging /my_turtle with a timeout of 3.0s
• xmlrpc reply from http://aqy:42235/ time=1.152992ms
• xmlrpc reply from http://aqy:42235/ time=1.120090ms
• xmlrpc reply from http://aqy:42235/ time=1.700878ms
• xmlrpc reply from http://aqy:42235/ time=1.127958ms
8、Review回顾
这一节我们讲解了如下一些指令:
roscor = ros+core:master(在ROS中提供名字的服务)+rosout(stdout/stderr)+parameter server(参数服务);
rosnode = ros+node:用于获取节点信息的ROS 工具;
rosrun = ros+run:从指定的功能包中运行一个节点;
英文文档: http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes
注:欢迎你转载本篇文章,时飞提醒你转载时请注明出处!