ROS学习-理解ROS节点

本文涉及的产品
资源编排,不限时长
简介: ROS学习-理解ROS节点

理解几个概念

  • Nodes: 一个节点是ROS中与其他节点进行联系的可执行文件。

(注意:事实上节点就是package中的一个可执行文件,ROS节点使用ROS的客户端库client library来与其他节点进行通讯。节点可以发布或者接收话题,同时,节点也可以提供或者使用服务)。


客户端库client library包括,rospy = python client library和roscpp = c++ client library。允许我们使用不同的编程语言进行编写。


Messages: 当发布话题时设置的ROS数据类型,例如point, path, image等。


Topics: 节点能够通过topic发布各种message消息,同时后续节点也能够通过topic接收消息。


Master: ROS的名字服务(例如帮助各种节点找到彼此)。


rosout: ROS 中的标准输出stdout/stderr。


roscore: Master + rosout + parameter server 组成了roscore,其中(parameter server在后续过程中介绍)。

启动ros

在启动ROS时首先要执行roscore。

例如,我们通过Ctrl + Alt + T 打开一个新的Terminal,执行roscore如果正常的话可以在命令行中看到类似于下述格式的内容。

roscore
... logging to /home/xiaochen/.ros/log/fc2129c0-4510-11ec-a53f-7085c2dc7a69/roslaunch-xiaochen-32511.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://xiaochen:40923/
ros_comm version 1.14.11
SUMMARY
========
PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.11
NODES
auto-starting new master
process[master]: started with pid [32528]
ROS_MASTER_URI=http://xiaochen:11311/
setting /run_id to fc2129c0-4510-11ec-a53f-7085c2dc7a69
process[rosout-1]: started with pid [32546]
started core service [/rosout]

如果roscore没有初始化并回复提示说缺乏权限的错误,那么可能是因为 ~/.ros文件夹的权限为root,可以使用以下命令递归更改该文件夹的所有权。

$ sudo chown -R <your_username> ~/.ros

使用rosnode

保持上述窗口执行了roscore之后,继续使用Ctrl + Alt + T 再次打开一个新的Terminal(注意保持前一个窗口处于打开状态),使用下述命令来查看当前激活状态的node

$ rosnode list

输出结果为:

/rosout

这代表我们现在只有一个node在运行,即rosout,因为其总是处于运行状态来收集并记录各node的debugging输出。

同时,可以使用下述命令来查看指定node的信息。

$ rosnode info /rosout

输出结果为:

--------------------------------------------------------------------------------
Node [/rosout]
Publications: 
 * /rosout_agg [rosgraph_msgs/Log]
Subscriptions: 
 * /rosout [unknown type]
Services: 
 * /rosout/get_loggers
 * /rosout/set_logger_level
contacting node http://xiaochen:35625/ ...
Pid: 4798

这给我们很多关于/rosout节点的信息,例如其发布和接收的消息,同时提供的服务。

使用rosrun

我们可以通过rosrun命令直接运行一个package中的节点node,命令形式如下。

$ rosrun [package_name] [node_name]

例如,我们现在想要运行turtlesim package中的turtlesim_node节点,则执行下述命令:

$ rosrun turtlesim turtlesim_node

可以看到下述界面:

注意:不同版本的ros所执行命令出现的小乌龟图案并不相同。这里是melodic。

随后,我们再次使用Ctrl + Alt + T 打开一个Terminal,在新的窗口中使用命令:

$ rosnode list

查看当前活动的节点,可以看到:

/rosout
/turtlesim

ros中另外一个有用的功能是我们可以通过命令对节点进行重命名。例如,我们可以通过下述命令把 turtlesim 包中的 turtlesim_node节点名字修改为my_turtle。

$ rosrun turtlesim turtlesim_node __name:=my_turtle

修改之后我们再使用rosnode list查看当前活动的节点就可以看到如下结果:

/my_turtle
/rosout

如果我们还是可以看到/turtlesim节点,这可能是因为我们使用了Ctrl + C结束上一个活动节点而不是直接关闭窗口。

为了避免出现这种情况,我们可以使用:

$ rosnode cleanup

清理所有的节点,然后再重新执行ros run调用对应的节点。

接着,我们使用rosnode中的另一个命令ping来测试我们当前活动的节点。

$ rosnode ping /my_turtle

可以看到返回结果类似于下述形式:

rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://xiaochen:36823/  time=0.252008ms
xmlrpc reply from http://xiaochen:36823/  time=1.084089ms
xmlrpc reply from http://xiaochen:36823/  time=1.111031ms
xmlrpc reply from http://xiaochen:36823/  time=1.095057ms

说明本机能够有效链接到/my_turtle节点。

总结

本博客中主要介绍了使用

$ roscore

启动ROS。

接着使用:

$ rosrun turtlesim turtlesim_node

启动对应包中的相应节点。

或者使用下述命令,修改节点的名字。

$ rosrun turtlesim turtlesim_node __name:=my_turtle

接着使用下述命令查看当前活动的节点列表:

$ rosnode list

并通过下述命令查看指定节点的信息:

$ rosnode info [nodeName]

最后,可以通过下述命令测试活动节点的连通性:

$ rosnode ping [nodeName]
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
Python
ROS节点检测ArUco标签并记录空间坐标
利用Realsense D435i相机检测ArUco标签,使用Python程序订阅相机的ROS话题,记录Time和标签的XYZ值,储存在一个csv文件中;当出现识别不到标签或者反馈坐标为0,0,0的情况时,不进行记录。
295 0
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
294 0
|
8天前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
7天前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
2月前
|
传感器 自然语言处理 机器人
ROS2教程03 ROS2节点
本文是关于ROS2(机器人操作系统2)节点的教程,涵盖了节点的概念、特性、使用方法,以及如何编写、测试和使用ROS2节点相关的命令行工具。文章介绍了节点的独立性、任务执行、跨硬件分布和多语言编写能力。详细解释了如何启动节点、查看节点信息、编写节点代码(包括面向过程和面向对象的方法),以及如何为功能包添加依赖和入口点。此外,还探讨了重映射节点名称和使用节点命令行工具的方法,如 `ros2 node info` 和 `ros2 node list`。适合已安装ROS2 Humble和Ubuntu 22.04操作系统,并具有Shell基础知识的读者学习。
59 1
|
2月前
|
机器人 Python
ROS2教程 03 节点Node
本文是关于ROS2(机器人操作系统2)的教程,介绍了ROS2的节点概念、与ROS1的区别、节点的编写和基本流程、ros2的node相关命令,以及如何对节点名进行重映射,旨在帮助读者理解ROS2中节点的创建和操作。
92 0
ROS2教程 03 节点Node
|
3月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
5月前
|
C++ Python
[ROS2] --- 手动编写一个节点
[ROS2] --- 手动编写一个节点
102 1
|
消息中间件 算法 机器人
【ROS】如何让ROS中节点实现数据交换Ⅰ--ROS话题通信
比较常用的目前就这一些,之后的命令现用现学就好了
247 1
|
算法 中间件 C语言
【ROS】如何让ROS中节点实现数据交换Ⅱ --服务通信
在ros中,一个节点想要获取某种服务(例如:一个节点想要获取此时的相机数据,节点就需要向相机发送一个请求,而相机接收到请求后可以根据消息类型将数据类型返回),这就是基本的服务通信使用场景。
157 0

推荐镜像

更多