ROS2教程(入门级):理解ROS 2的节点

19 篇文章 79 订阅
这篇教程介绍了ROS 2中的节点概念,包括ROS 2图、节点功能和节点间的交互。通过`ros2 run`、`ros2 node list`命令实践操作,学习如何启动节点、查看运行中的节点以及利用remapping更改节点属性。此外,还讲解了如何使用`ros2 node info`获取节点详细信息。
摘要由CSDN通过智能技术生成

目标: 学习ROS 2关于关于节点的功能,并且通过工具跟它交互。

知识讲解

ROS 2 图 (ROS 2 graph)

经过前面的几个博客,我们通过rqt这个图形界面工具,以及turtlesim大致的了解到ROS 2 的一下核心的概念。这个核心的概念组成了ROS 2 graph(图)。如果你还没有浏览过之前的博客,可以到我的ROS 2专栏中翻一下。

在接下来的几个教程,我们将会详细地学习到一系列关于ROS 2的核心概念。

ROS 图(graph)是一个能够同时地共同进行数据处理的ROS 2的组件。它包含了全部的可执行文件以及它们之间的连接,如果你选择将这些全部可视化出来的话。

ROS 2 的节点

每个节点都应该负责一个单独的模块化的功能,比如一个节点负责控制车轮的电机,一个节点负责控制激光雷达,等等。没一个节点应该可以通过话题、服务、动作或者参数向其它节点发送消息和接收其它节点发送过来的消息。

节点说明

一个完整的机器人系统是包含了许多个共同工作的节点的。在ROS 2中,一个单独的可执行文件,比如c++程序、Python程序等,可以包含一个到多个节点。

前提条件

前面的turtlesim和rqt的教程已经展示了如何安装turtlesim并使用它,如果还没安装或者不确定是否已经安装,可以戳这个教程:Foxy的turtlesim和rqt。还有,不要忘记在每一个新开启的终端source设置脚本,如果不太记得了,可以看这个教程:如何设置ROS 2的环境

任务

1. ros2 run

ros2 run这个命令会从一个包中启动一个可执行文件。

ros2 run <package_name> <executable_name>

为了运行turtlesim,打开一个新的终端,并且输入下面的命令:

ros2 run turtlesim turtlesim_node

turtlesim的窗口会打开,正如你前面的教程所看到的一样。

这里,包的名字是turtlesim,可执行名字是turtlesim_node

可是,我们依然不知道节点的名字是什么,你可以通过ros2 node list来查找。

2. ros2 node list

ros2 node list 会向你展示所有正在运行的节点的名字。这个在你希望和一个节点进行交互的时候会非常有用,或者当你的系统运行了许多节点,你需要对他们进行追踪的时候。

当turtlesim还在运行的时候,打开一个新的终端,然后输入下面的指令:

ros2 node list

终端会返回节点的名字:

/turtlesim

打开另一个新的终端,通过下面的指令启动teleop节点:

ros2 run turtlesim turtle_teleop_key

这里,我们可以再次搜索turtlesim这个包,这次的可执行名字是turtle_teleop_key.

返回你运行 ros2 node list 的终端,并再一次运行它。你会看到两个活跃的节点:

/turtlesim
/teleop_turtle

2.1 Remapping

Remapping让你更改节点的默认属性,比如节点名字、话题名字、服务名字等等。在上一个教程(ROS 2 中的小海龟以及rqt的使用(2))中,我们在turtle_teleop_key中使用remapping来改变默认被控制的小海龟。

现在,让我们更改/turtlesim 这个节点的名字。在一个新的终端里面,运行下面的命令:

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

因为你使用 ros2 run 又调用了 turtlesim,应外一个turtlesim的窗口会打开。但是,现在如果你返回你运行 ros2 node list的终端,并且运行它,你会看到下面三个节点的名字:

/turtlesim
/teleop_turtle
/my_turtle

3. ROS2 节点信息

现在你已经知道节点的名字了,你可以通过下面的命令访问更多关于他们的信息:

ros2 node info <node_name>

为了检验你最新打开的节点,my_turtle,你可以运行下面的命令:

ros2 node info /my_turtle

ros2 node info 会返回跟这个节点有互动的订阅器、发布器、服务以及动作的列表,输出类似下面的样子:

/my_turtle
  Subscribers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /turtle1/cmd_vel: geometry_msgs/msg/Twist
  Publishers:
    /parameter_events: rcl_interfaces/msg/ParameterEvent
    /rosout: rcl_interfaces/msg/Log
    /turtle1/color_sensor: turtlesim/msg/Color
    /turtle1/pose: turtlesim/msg/Pose
  Services:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /reset: std_srvs/srv/Empty
    /spawn: turtlesim/srv/Spawn
    /turtle1/set_pen: turtlesim/srv/SetPen
    /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
    /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
    /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
    /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
    /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
    /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
    /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
    /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:

现在你可以在/teleop_turtle节点上执行相同的命令,会看到它的连接会跟my_turtle不一样。

你可以在接下来的教程里面,学习到更多关于ROS图的连接相关的内容。可以关注我或者订阅我的专栏:ROS 2专栏

总结

节点是ROS 2中最基础的组成部分,它在一个机器人系统中为单一的模块功能服务。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值