ROS2学习笔记3--认识ros2节点node

Posted 鸿_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS2学习笔记3--认识ros2节点node相关的知识,希望对你有一定的参考价值。

概要:这篇主要认识ros2节点node

环境:ubuntu20.04,ros2-foxy,vscode

2.1.3认识ros2节点node(原文:https://docs.ros.org/en/foxy/Tutorials/Understanding-ROS2-Nodes.html

>>教程>>认识ros2节点node

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

理解ros2节点node

目标:学习ros2的节点功能,以及相关的工具

课程等级:初级

时长:10min

目录
1.背景
1.1 ros2的曲线图
1.2 ros2的节点
2.先决条件
3.步骤
3.1 ros2 run
3.2 ros2 node list
3.3 ros2 node info
4.总结
5.下一步
6.相关内容

1.背景

1.1 ros2的曲线图

接下来的几节课,所介绍的一系列ros2核心概念,可以使用一个ros2曲线图来表示

ros曲线图表示的是ros2基元(节点,话题,服务等)同一时间处理数据信息的关系网络.如果你想将它们映射出来并可视化,该图应包含所有的执行文件以及基元间相关关系.

1.2 ros2的节点

每个ros节点作用是负责单一模块,例如一个节点控制轮子电机,一个节点控制激光范围探测等等.每个节点可通过话题,服务,动作,参数来传输或接受数据信息到其他节点.
在这里插入图片描述
(这是一个动态图,建议查看原文链接)

一个完整的机器人系统包含许多协调工作的节点.在ros2中,一个单一的执行文件,如c++或python项目等等,可包含一个或多个节点.

2.预备知识

前面课程展示了turtulesim包的安装,这里会用到.

老规矩,别忘记在新打开终端source一下配置文件(环境变量)(个人,如果ros2的环境变量写到启动脚本.bashrc里面,没必要再source一次了).

3.步骤

3.1 ros2 run

指令ros2 run从包中启动一个可执行文件

ros2 run <package_name> <executable_name>

(例如)新开一个终端窗口,输入如下指令,启动小乌龟仿真:

ros2 run turtlesim turtlesim_node

小乌龟仿真窗口启动,正如前面课程所示

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

我们还不知节点的名字,然而,你可以使用指令ros2 node list来找节点名字

3.2 ros2 node list

ros2 node list指令可以告诉你所有运行中的节点名字.当你想使用一个节点时或者当你系统跑着一些节点并且需要跟踪时,这指令是非常有用的.

turtlesim在终端运行中,新开一个终端输入如下指令:

ros2 node list

终端会返回一个节点名字:

/turtlesim

新开另一个终端,启动键盘控制节点:

ros2 run turtlesim turtle_teleop_key

这里,我们可以发现包名字是turtlesim,可执行名字是turtle_teleop_key

回到运行ros2 node list的终端,再次运行,你这时可以看到两个正在运行的节点名字

/turtlesim
/teleop_turtle

3.2.1 再映射

再映射(https://design.ros2.org/articles/ros_command_line_arguments.html#name-remapping-rules)可以使你重新分配默认节点属性,例如节点名字,话题名字,服务名字等等,重新指定参数.前面课程(第二节),使用再映射指令turtle_teleop_key更改所控制的默认小乌龟.

现在,我们重新分配/turtlesim包节点名字.在新终端输入如下指令:

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

由于你使用ros2 run重新运行一个turtlesim,另一个小乌龟仿真窗口会打开.但回到运行ros2 node list指令窗口,然后再次运行该指令,你会发现有三个节点名字(前面启动一个小乌龟仿真节点和键盘控制节点).

/turtlesim
/teleop_turtle
/my_turtle

3.3 ros2 node info

现在你知道节点名字了,也可以通过下面指令来了解节点更多信息:

ros2 node info <node_name>

为了了解最新开启的my_turtle节点,运行下面治指令:

ros2 node info /my_turtle

ros2 node info 指令返回的是与节点交互所涉及的订阅者,发布器,服务,动作(ros关系图)的列表.输入例如:

/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概念关系图.

4.总结

节点是功能ros2基元,在机器人系统里面负责单一模块功能作用.

在本课程,通过运行中执行文件turtlesim_nodeturtle_teleop_key,启动turtlesim包中的节点.

你学会了使用ros2 node list来获取活动节点的名字,使用ros2 node info指令去深入了解某个节点.对于一个复杂真实的机器人系统,这些工具用在了解数据流显得至关重要.

5.下一步

既然你了解了ros2节点,可以开始话题课程学习.话题是一种节点交流的方式.

6.相关内容

这个概念(https://docs.ros.org/en/foxy/Concepts.html#conceptshome)页面可提供关于节点更多细节信息.

个人认为重点:

node节点可理解为一个负责某一功能,可以进行交流的个体.

ros2 run <package_name> <executable_name> #启动一个执行文件

ros2 node list #罗列所有节点

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle #映射节点

ros2 node info <node_name> #查看节点详细信息

其他

这个教程实操是没有碰到复现失败情况.

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

以上是关于ROS2学习笔记3--认识ros2节点node的主要内容,如果未能解决你的问题,请参考以下文章

ROS2学习笔记23--将多个node节点组合到单一进程中

ROS2学习笔记6--认识ros2参数parameters

ROS2学习笔记5--认识ros2服务services

ROS2学习笔记7--认识ros2动作actions

ROS2学习笔记4--认识ros2话题topic

ROS学习笔记-ROS1和ROS2