当前位置:   article > 正文

ROS2入门教程—理解节点(Node)_ros2 remappings

ros2 remappings


  和ROS1一样,ROS2中的各项资源也是通过计算图(“ ROS (2) graph”)联系到一起的。计算图是一个由各种ROS2元素组成的网络,共同完成数据的传输,其中每一个完成具体功能的模块称之为“节点”(Node)。ROS中的每个节点应负责一个单一的模块用途(例如,一个节点用于控制车轮电机,一个节点用于控制激光测距仪等)。节点之间通过话题(Topic)、服务(Service)、动作(Actions)或者参数(Parameter)实现数据的收发。

在这里插入图片描述

  一个完整的机器人系统就是由多个节点组成的,每个节点各司其职,完成自己的工作。在ROS2中,每一个可执行程序(C++、Python)可以包含1个或者多个节点,这是与ROS1中不同的。 接下来还是在小海龟例程中继续熟悉下节点相关的命令。

1 ros2 run

  ros2 run相当于ROS1中的rosrun,主要作用是运行某个功能包中的可执行程序,使用语法如下:

ros2 run <package_name> <executable_name>
  • 1

  比如小海龟仿真界面就是节点的执行程序,位于turtlesim功能包中,启动它的命令是:

ros2 run turtlesim turtlesim_node
  • 1

运行上述命令之后,小海龟就会出现在界面上了:
在这里插入图片描述

  但是大家需要注意,这里的turtlesim是功能包名字,而turtlesim_node只是可执行文件的名字,并不是节点名,想要知道节点叫什么,我们需要运行如下命令。

2 ros2 node list

  ros2 node list将显示所有正在运行的节点的名称,相当于ROS1中的rosnode list。当您想要与一个节点交互,或者当您的系统运行许多节点并且需要跟踪它们时,这一点特别有用。 启动海龟仿真器之后,打开一个终端输入如下指令:

ros2 node list
  • 1

终端将返回节点名称:

/turtlesim
  • 1

  重新打开一个终端,输入以下命令来启动键盘控制乌龟仿真器:

ros2 run turtlesim turtle_teleop_key
  • 1

重新运行ros2 node list之后,可以发现多了一个正在运行的节点:

/turtlesim
/teleop_turtle
  • 1
  • 2

3 重映射(Remapping)

  ROS中的重映射机制可以帮助我们重定义节点的属性,比如节点名称、话题名称、服务名称等。比如我们想修改看到的节点名turtlesim,那就可以这样:

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

  既然你又在turtlesim上调用ros2 run,另一个小海龟的仿真界面将打开。但是,现在如果您返回到运行ros2 node list的终端,然后再次运行它,您将看到三个节点名称:

/my_turtle
/turtlesim
/teleop_turtle
  • 1
  • 2
  • 3

在这里之所以没有冲突,是因为新启动的仿真节点叫做“my_turtle”,并不是默认的“turtlesim”。

4 ros2 node info

  现在已经知道了节点的名称,可以通过以下方式访问有关节点的更多信息:

ros2 node info <node_name>
  • 1

  要检查您的最新节点my_turtle,请运行以下命令:

ros2 node info /my_turtle
  • 1

可以看到节点的很多信息,包括订阅者、发布者、服务、动作等等。

/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
  Service Servers:
    /clear: std_srvs/srv/Empty
    /kill: turtlesim/srv/Kill
    /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
    /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
  Service Clients:

  Action Servers:
    /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
  Action Clients:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/727287
推荐阅读
相关标签
  

闽ICP备14008679号