ROS: 理解 ROS节点


写一个个人的学习笔记, 方便以后用到的时候回查


先决条件

在本教程中我们将使用到一个轻量级的模拟器,请使用以下命令来安装:

sudo apt-get install ros-<distro>-ros-tutorials

图概念概述

  • Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。

  • Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。

  • Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。

  • Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。

  • rosout: ROS中相当于stdout/stderr。

  • roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。

节点

一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。

(节点是ros中非常重要的一个概念,为了帮助初学者理解这个概念,这里举一个通俗的例子:

例如,咱们有一个机器人,和一个遥控器,那么这个机器人和遥控器开始工作后,就是两个节点。遥控器起到了下达指 令的作用;机器人负责监听遥控器下达的指令,完成相应动作。从这里我们可以看出,节点是一个能执行特定工作任 务的工作单元,并且能够相互通信,从而实现一个机器人系统整体的功能。在这里我们把遥控器和机器人简单定义为两个节点,实际上在机器人中根据控制器、传感器、执行机构等不同组成模块,还可以将其进一步细分为更多的节点,这个是根据用户编写的程序来定义的。)

客户端库

ROS客户端库允许使用不同编程语言编写的节点之间互相通信:

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

roscore

roscore 是你在运行所有ROS程序前首先要运行的命令。
请运行:

roscore

如图:

在这里插入图片描述
如果 roscore 运行后无法正常初始化,很有可能是存在网络配置问题 参见
网络设置——单机设置

如果 roscore 不能初始化并提示缺少权限,这可能是因为~/.ros文件夹

归属于root用户(只有root用户才能访问),修改该文件夹的用户归属关系:

sudo chown -R <your_username> ~/.ros

这里的chown 命令代表change owner 意思是 把 对应目录下(含)所有子目录的拥有者进行变更.

Linux/Unix 是多用户多任务操作系统,所有bai的文件皆有其拥有者(Owner)。利用chown命令可以将文件的拥有者加以改变。

一般来说,这个命令只能由系统管理者(root)使用,一般用户没有权限来改变别人的文件的拥有者,也没有权限可以将自己的文件的拥有者改设为别人。只有系统管理者(root)才有这样的权限。

使用rosnode

打开一个新的终端, 可以使用 rosnode 像运行 roscore 一样看看在

运行什么…

注意: 当打开一个新的终端时,你的运行环境会复位,同时你的 ~/.bashrc 文件会复原。如果你在运行类似于rosnode的指令时出现一些问题,也许你需要添加一些环境设置文件到你的~/.bashrc或者手动重新配置他们。

rosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点:

rosnode list

出现
在这里插入图片描述
这表示当前只有一个节点在运行: rosout。因为这个节点用于收集和记录节点调试输出信息,所以它总是在运行的。

rosnode info 命令返回的是关于一个特定节点的信息。

rosnode info /rosout

在这里插入图片描述
这给了我们更多的一些有关于rosout的信息, 例如,事实上由它发布/rosout_agg.

使用rosrun

rosrun 允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)。

rosrun [package_name] [node_name]

现在我们可以运行turtlesim包中的 turtlesim_node
然后, 在一个 新的终端:

rosrun turtlesim turtlesim_node

你会看到 turtlesim 窗口:
在这里插入图片描述
在这里插入图片描述
注意: 这里的 turtle 可能和你的 turtlesim 窗口不同。别担心,这里有许多版本的turtle ,而你的是一个惊喜!(一个可爱的小彩蛋~)

在一个 新的终端, 写命令:

rosnode list

会看到现在有两个节点在运行了
在这里插入图片描述

ROS的一个强大特性就是你可以通过命令行重新配置名称。
关闭 turtlesim 窗口停止运行节点 (或者回到rosrun turtlesim终端并使用`ctrl

-C`)。现在让我们重新运行它,但是这一次使用Remapping Argument改变节点名称:

rosrun turtlesim turtlesim_node __name:=my_turtle

在这里插入图片描述
现在,我们退回使用

 rosnode list

你会看见类似于:
在这里插入图片描述

注意: 如果你仍看到 /turtlesim在列表中,这可能意味着你在终端中使用ctrl-C停止节点而不是关闭窗口,或者你没有$ROS_HOSTNAME环境变量,这在Network Setup - Single Machine Configuration中有定义。你可以尝试清除rosnode

列表,通过:

 rosnode cleanup

在这里插入图片描述
再次运行

rosrun turtlesim turtlesim_node __name:=my_turtle

在这里插入图片描述
我们可以看到新的/my_turtle 节点。使用另外一个 rosnode 指令, ping, 来

测试:

rosnode ping my_turtle

会显示:

rosnode: node is [/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在这里插入代码片

如图:
在这里插入图片描述

小结

roscore = ros+core : master (provides name service for ROS) + rosout(stdout/stderr) + parameter server (parameter server will be introduced later)

简单来说roscore 负责管理ROS服务, 启动rosout节点用于收集和记录节点调试输出信息, 并且启动参数服务

rosnode = ros+node : ROS tool to get information about a node.

指定节点 + 相应命令 来获取指定节点的信息或者操作

rosrun = ros+run : runs a node from a given package.
运行指定的节点

参考文章

ros官方教程

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值