1 图概念的快速概述
-
节点:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
-
消息:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
-
话题:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
-
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
-
rosout:ROS中相当于stdout/stderr。
-
roscore:主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
2 节点
节点实际上只不过是ROS包中的可执行文件。
ROS节点使用ROS客户端库与其他节点通信。
节点可以发布或订阅主题。
节点还可以提供或使用服务。
3 客户端库
ROS客户端库允许使用不同编程语言编写的节点进行通信:
-
rospy = python客户端库
-
roscpp = c ++客户端库
4 roscore
roscore是使用ROS时应该运行的第一件事。
请运行:
$ roscore
你会看到类似的东西:
如果roscore未初始化,则可能存在网络配置问题。请参见网络设置 - 单机配置
如果 roscore 不能初始化并提示缺少权限,这可能是因为~/.ros文件夹
归属于root用户(只有root用户才能访问),修改该文件夹的用户归属关系:
$ sudo chown -R <your_username>〜/ .ros
5 使用rosnode
打开一个新的终端,让我们用rosnode来看看正在运行的roscore做了什么
注意:打开新终端时,您的环境将被重置,并且您的〜/ .bashrc文件将被配置。(应该是被source)
如果您在运行rosnode等命令时遇到问题,则可能需要在〜/ .bashrc中添加一些环境设置文件或手动重新配置它们。
rosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点:
$ rosnode list
你会看见:
这表示当前只有一个节点在运行: rosout。
因为这个节点用于收集和记录节点调试输出信息,所以它总是在运行的。
rosnode info 命令返回的是关于一个特定节点的信息。
$ rosnode info /rosout
这给了我们一些关于rosout的更多信息,例如它发布/ rosout_agg这一事实。
现在,让我们看看更多的节点。为此,我们将使用rosrun来启动另一个节点。
6 使用rosrun
rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。
用法:
$ rosrun [package_name] [node_name]
所以现在我们可以在turtlesim包中运行turtlesim_node。
然后,在一个新的终端:
$ rosrun turtlesim turtlesim_node
你会看到turtlesim窗口:
注意:您的乌龟窗口中的乌龟可能看起来不同。不要担心 - 有很多类型的龟,你的是一个惊喜!
在一个新的终端:
$ rosnode list
你会看到类似的东西:
ROS的一个强大功能是您可以从命令行重新分配名称。
关闭turtlesim窗口以停止节点(或返回rosrun turtlesim终端并使用ctrl-C)。现在让我们重新运行它,但这次使用Remapping Argument来更改节点的名称:
$ rosrun turtlesim turtlesim_node __name:= my_turtle
现在,如果我们回去使用rosnode列表:
$ rosnode list
你会看到类似的东西:
注意:如果您仍然在列表中看到/ turtlesim,则可能意味着您使用ctrl-C而不是关闭窗口来停止终端中的节点,或者您没有按照网络中的描述定义$ ROS_HOSTNAME环境变量设置 - 单机配置。
您可以尝试使用以下方法清除rosnode列表:$ rosnode cleanup
我们看到了new / my_turtle节点。让我们使用另一个rosnode命令ping来测试它是否正常:
$ rosnode ping my_turtle
可以看到:
7 回顾:
涵盖的内容:
-
roscore = ros + core:master(提供ROS的名称服务)+ rosout(stdout / stderr)+参数服务器(参数服务器将在后面介绍)
-
rosnode = ros + node:ROS工具,用于获取有关节点的信息。
-
rosrun = ros + run:从给定包中运行一个节点。