ROS总结——ROS节点

理解ROS节点

本博客是对http://wiki.ros.org/上ROS教程的学习总结,欢迎大家交流学习。本节介绍 ROS 图(graph)概念并介绍如何使用roscore、rosnode和 rosrun 命令行工具。
1.图概念概述

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
  • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
  • rosout: ROS中相当于stdout/stderr。

2.节点、客户端
一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。
ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

  • rospy = python 客户端库
  • roscpp = c++ 客户端库

3.使用roscore
roscore 是运行所有ROS程序前首先要运行的命令,运行roscore:

$  roscore
... logging to /home/yongqiang/.ros/log/b976f590-0349-11e7-98a1-dc0ea16e8f33/roslaunch-ubuntu-10371.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://localhost:37071/
ros_comm version 1.11.20


SUMMARY
========

PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.20

NODES

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

setting /run_id to b976f590-0349-11e7-98a1-dc0ea16e8f33
process[rosout-1]: started with pid [10396]
started core service [/rosout]

如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题。参见http://wiki.ros.org/ROS/NetworkSetup#Single_machine_configuration

如果 roscore 不能初始化并提示缺少权限,这可能是因为~/.ros文件夹归属于root用户(只有root用户才能访问),修改该文件夹的用户归属关系:

$  sudo chown -R  ~/.ros

4.使用rosnode
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://localhost:52102/ ...
Pid: 10396

5.使用rosrun
rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径),基本用法:

$  rosrun [package_name] [node_name]

例如运行turtlesim包中的 turtlesim_node:

$  rosrun turtlesim turtlesim_node

ROS总结——ROS节点_第1张图片
在一个新的终端:

$  rosnode list
/rosout
/turtlesim

ROS的一个强大特性就是你可以通过命令行重新配置名称。关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用ctrl-C)。现在重新运行它,但是这一次使用Remapping Argument改变节点名称:

$  rosrun turtlesim turtlesim_node __name:=my_turtle

在一个新的终端,结果与turtlesim_node相似:

$  rosnode list
/rosout
/turtlesim

使用另外一个 rosnode 指令ping来测试:

$  rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://localhost:36220/   time=1.621008ms
xmlrpc reply from http://localhost:36220/   time=1.515865ms
xmlrpc reply from http://localhost:36220/   time=1.546144ms
xmlrpc reply from http://localhost:36220/   time=1.197100ms
xmlrpc reply from http://localhost:36220/   time=1.066208ms
xmlrpc reply from http://localhost:36220/   time=1.305103ms
xmlrpc reply from http://localhost:36220/   time=1.712799ms
xmlrpc reply from http://localhost:36220/   time=1.302958ms
xmlrpc reply from http://localhost:36220/   time=1.363993ms
...........................................................
...........................................................

本节到这里,已经讲解了ROS节点是如何工作的,下一步,将讲解一下ROS话题。如果想关闭turtlesim_node,请按下“Ctrl-C”。

你可能感兴趣的:(ros,ubuntu,ROS)