ROS2官网教程学习笔记理解ROS2节点篇


学习目标:了解ROS2中节点的功能以及进行交互的相关工具。

背景

以下内容主要对官网教程进行翻译

1.ROS2网络(ROS2 graph)

在ROS2中单独提出了graph概念,在接下来的教程中,将学习构成ROS2网络的一系列关于ROS2核心概念。
ROS网络一个由ROS2中的元素在同一时刻进行数据处理组成的网络。换个可视化的方式来说它包含所有可执行文件以及他们之间的连接情况。

2.ROS2中的节点

ROS中的每个节点应该是一个完成特定功能的模块(例如,一个节点用于控制电机,一个节点用于控制激光雷达等等)。每个节点都可以通过话题(topics)、服务(services)、动作库(actions)、参数服务器(parameters)完成数据的发送和接收。一个完整的机器人系统由许多协同工作的节点组成。在ROS2中,单个可执行文件(C ++程序,Python程序等)可以包含一个或多个节点。这和ros1的一个可执行文件一个节点好像不太一样。

提前准备

需要安装上一个教程turtlesim

学习任务

1.ros2 run

ROS2中通过ros2 run命令从一个包中运行一个可执行文件

ros2 run <package_name> <executable_name>

例如,我们通过下面命令就是运行turtlesim包中的turtlesim_node可执行文件

ros2 run turtlesim turtlesim_node

2. ros2 node list

我们虽然运行了节点,但是并不知道运行节点的名字,我们通过下面的命令可以查看当前运行的所有节点

ros2 node list

这个命令和ros1中的类似,如果当前系统有很多节点在运行我们想进行相关操作查看时还是比较有用。

运行上面命令之后输出如下,表示当前只有一个名叫的/turtlesim节点

/turtlesim

我们再打开一个新的终端运行一个新的节点

ros2 run turtlesim turtle_teleop_key

我们再次用ros2 node list查看节点,输出如下

/turtlesim
/teleop_turtle

可以看到现在有两个节点在运行

2.1 重映射Remapping

这个和ros1的操作类似可以对节点、话题、服务等等的名字进行自定义
操作很简单,我们通过下面命令再打开一个乌龟的界面

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

ros2 node list查看节点,发现多了一个新的节点

/my_turtle
/turtlesim
/teleop_turtle

3 ros2 node info

这个操作和ros1类似,知道了节点的名称过后可以查看节点信息。

ros2 node info <node_name>

我们查看刚刚运行的节点信息

ros2 node info /my_turtle

命令返回了一大堆的消息,包含了节点订阅( subscribers)、发布(publishers)、服务(services)、动作(actions)以及ROS网络(the ROS graph connections) 中和节点有关的信息

/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:

这个比ros1中要完善不是,特别是对ros进行调试的时候还是很有帮助的

总结

节点(node)作为ros中一个比较基础元素,提供模块化功能。

发布了63 篇原创文章 · 获赞 50 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38649880/article/details/104393113