欢迎光临散文网 会员登陆 & 注册

4.2 launch之Python实现

2023-10-16 10:43 作者:猛狮集训营  | 我要投稿

本节主要介绍launch文件的Python实现语法。

4.2.1 节点设置

launch 中需要执行的节点被封装为了 launch_ros.actions.Node 对象。

需求:launch 文件中配置节点的相关属性。

示例:

在 cpp01_launch/launch/py 目录下新建 py01_node.launch.py 文件,输入如下内容:

代码解释:

1.Node使用语法1

上述代码会创建一个 turtlesim_node 节点,设置了若干节点属性,并且节点关闭后会自动重启。

  • package:功能包;

  • executable:可执行文件;

  • namespace:命名空间;

  • name:节点名称;

  • exe_name:流程标签;

  • respawn:设置为True时,关闭节点后,可以自动重启。

2.Node使用语法2

上述代码会创建一个 turtlesim_node 节点,并导入背景色相关参数。

  • parameters:导入参数。

parameter 用于设置被导入的参数,如果是从 yaml 文件加载参数,那么需要先准备 yaml 文件,在功能包下新建 config 目录,config目录下新建 t2.yaml 文件,并输入如下内容:

注意,还需要在 CMakeLists.txt 中安装 config:

3.Node使用语法3

上述代码会创建一个 turtlesim_node 节点,并将话题名称从 /turtle1/cmd_vel 重映射到 /cmd_vel。

  • remappings:话题重映射。

4.Node使用语法4

上述代码会创建一个 rviz2 节点,并加载了 rviz2 相关的配置文件。

该配置文件可以先启动 rviz2 ,配置完毕后,保存到 config 目录并命名为 my.rviz。

  • arguments:调用指令时的参数列表。

5.Node使用语法5

上述代码会创建一个 turtlesim_node 节点,并在指令调用时传入参数列表。

  • ros_arguments:相当于 arguments 前缀 --ros-args。

4.2.2 执行指令

launch 中需要执行的命令被封装为了 launch.actions.ExecuteProcess 对象。

需求:在 launch 文件中执行 ROS2 命令,以简化部分功能的调用。

示例:

在 cpp01_launch/launch/py 目录下新建 py02_cmd.launch.py 文件,输入如下内容:

代码解释:

上述代码用于执行 cmd 参数中的命令,该命令会在 turtlesim_node 中生成一只新的小乌龟。

  • cmd:被执行的命令;

  • output:设置为 both 时,日志会被输出到日志文件和终端,默认为 log,日志只输出到日志文件。

  • shell:如果为 True,则以 shell 的方式执行命令。

4.2.3 参数设置

参数设置主要涉及到参数的声明与调用两部分,其中声明被封装为 launch.actions.DeclareLaunchArgument,调用则被封装为 launch.substitutions import LaunchConfiguration。

需求:启动turtlesim_node节点时,可以动态设置背景色。

示例:

在 cpp01_launch/launch/py 目录下新建 py03_args.launch.py 文件,输入如下内容:

代码解释:

上述代码会使用DeclareLaunchArgument对象声明三个参数,且每个参数都有参数名称以及默认值。

  • name:参数名称;

  • default_value:默认值。

parameters=[{"background_r": LaunchConfiguration(variable_name="background_r"), "background_g": LaunchConfiguration("background_g"), "background_b": LaunchConfiguration("background_b")}]


上述代码会使用LaunchConfiguration对象获取参数值。

  • variable_name:被解析的参数名称。

launch文件执行时,可以动态传入参数,示例如下:


ros2 launch cpp01_launch py03_args.launch.py background_r:=200 background_g:=80 background_b:=30

如果执行launch文件时不手动传入参数,那么解析到的参数值是声明时设置的默认值。

4.2.4 文件包含

在 launch 文件中可以包含其他launch文件,需要使用的API为:launch.actions.IncludeLaunchDescription 和 launch.launch_description_sources.PythonLaunchDescriptionSource。

需求:新建 launch 文件,包含 4.2.3 中的 launch 文件并为之传入设置背景色相关的参数。

示例:

在 cpp01_launch/launch/py 目录下新建 py04_include.launch.py 文件,输入如下内容:

代码解释:

上述代码将包含一个launch文件并为launch文件传参。

在 IncludeLaunchDescription 对象中:

  • launch_description_source:用于设置被包含的 launch 文件;

  • launch_arguments:元组列表,每个元组中都包含参数的键和值。

在 PythonLaunchDescriptionSource 对象中:

  • launch_file_path:被包含的 launch 文件路径。

4.2.5 分组设置

在 launch 文件中,为了方便管理可以对节点分组,分组相关API为:launch.actions.GroupAction和launch_ros.actions.PushRosNamespace。

需求:对 launch 文件中的多个 Node 进行分组。

示例:

在 cpp01_launch/launch/py 目录下新建 py05_group.launch.py 文件,输入如下内容:

代码解释:

上述代码将创建两个组,两个组使用了不同的命名空间,每个组下包含了不同的节点。

在 GroupAction 对象中,使用的参数为:

  • actions:action列表,比如被包含到组内的命名空间、节点等。

在 PushRosNamespace 对象中,使用的参数为:

  • namespace:当前组使用的命名空间。

4.2.6 添加事件

节点在运行过程中会触发不同的事件,当事件触发时可以为之注册一定的处理逻辑。事件使用相关的 API 为:launch.actions.RegisterEventHandler、launch.event_handlers.OnProcessStart、launch.event_handlers.OnProcessExit。

需求:为 turtlesim_node 节点添加事件,事件1:节点启动时调用spawn服务生成新乌龟;事件2:节点关闭时,输出日志信息。

示例:

在 cpp01_launch/launch/py 目录下新建 py06_event.launch.py 文件,输入如下内容:

代码解释:

上述代码为 turtle 节点注册启动事件和退出事件,当 turtle 节点启动后会执行 spwn 节点,当 turtle 节点退出时,会输出日志文本:“turtlesim_node退出!”。

对象 RegisterEventHandler 负责注册事件,其参数为:

  • event_handler:注册的事件对象。

OnProcessStart 是启动事件对象,其参数为:

  • target_action:被注册事件的目标对象;

  • on_start:事件触发时的执行逻辑。

OnProcessExit 是退出事件对象,其参数为:

  • target_action:被注册事件的目标对象;

  • on_exit:事件触发时的执行逻辑。

LogInfo 是日志输出对象,其参数为:

  • msg:被输出的日志信息。

B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践

更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。

4.2 launch之Python实现的评论 (共 条)

分享到微博请遵守国家法律