说明:本文主要是结合 ROS 官网的相关内容以及自己的相应操作心得整理而成,记录在此处仅仅是为了自己查找方便!
ROS 官网相关参考内容网址:http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes
1. 前提
本文将使用轻量级模拟器,运行以下命令来安装它:
sudo apt-get install ros-melodic-ros-tutorials
2. 图形概念快速概览
Nodes:node 是使用 ROS 与其他 node 通信的可执行文件。
Messages:订阅或发布 topic 时使用的 ROS 数据类型。
Topics:node 可以向 topic 发布 message,也可以订阅 topic 以接收 messgae。
Master:ROS 的名称服务(即帮助 nodes 找到彼此)
rosout:ROS 等价于 stdout/stderr
roscore:Master+rosout+参数服务器(后面会介绍参数服务器)
3. nodes
node 实际上只不过是 ROS package 中的一个可执行文件。 ROS node 使用 ROS 客户端库与其他 node 通信。 node 可以向 topic 发布或订阅,也可以提供或使用服务。
4. 客户端库
ROS 客户端库允许使用不同编程语言编写的 node 进行通信:
- rospy = python 客户端库
- roscpp = c++ 客户端
5. roscore
roscore 是在使用 ROS 时应该做的第一件事。运行后会看到类似于下面这样的界面:
6. 使用 rosnode
打开一个新终端,使用 rosnode 来看看运行 roscore 做了什么……请记住,通过打开一个新选项卡或简单地将其最小化来保持前一个终端打开。
当打开一个新终端时,环境将被重置,并且 ~/.bashrc 文件是来源。 如果在运行 rosnode 等命令时遇到问题,那么可能需要将一些环境设置文件添加到 ~/.bashrc 或手动重新获取它们。
rosnode 显示有关当前正在运行的 ROS node 的信息。 rosnode list 命令列出这些活动的 node:
这表明只有一个 node 在运行:rosout。 它在收集和记录 node 的调试输出时始终运行。
rosnode info 命令返回有关特定 node 的信息。
7. rosrun
rosrun 允许使用 package 的名称直接运行 package 内的node(无需知道 package 的路径)。用法:
rosrun [package_name] [node_name]
现在开始运行 turtlesim package 中的 turtlesim_node,在一个新的终端中输入:
rosrun turtlesim turtlesim_node
你会看到海龟的界面(每个人的海龟界面可能会不一样,这是一个小惊喜哦~)
再打开一个新终端,输入:
rosnode list
你会看到:
ROS 的一项强大功能是可以从命令行重新分配名称。关闭海龟窗口以停止 node(或返回 rosrun turtlesim 终端并使用 Ctrl+C)。 然后重新运行这条命令,但这次使用重映射参数来更改 node 的名称:
rosrun turtlesim turtlesim_node __name:=my_turtle
此时如果再运行 rosnode list,会看到:
如果在列表中仍然可以看到 /turtlesim,可能是之前使用 Ctrl+C 停止了终端中的 node 而不是关闭窗口,或者没有按照 网络设置 - 单机配置 中的描述定义 $ROS_HOSTNAME 环境变量。 可以尝试使用以下命令清理 rosnode 列表: $ rosnode cleanup
我们看到了新的 node: /my_turtle。 现在使用另一个 rosnode 命令 ping 来测试它是否已启动:
rosnode ping my_turtle
8. 回顾
- roscore = ros+core : master (为 ROS提供名称服务) + rosout (stdout/stderr) + parameter server (后面会介绍)
- rosnode = ros+node : 用于获取节点信息的 ROS 工具
- rosrun = ros+run : 从给定的 package 运行 node