ros2里面的launch.py的语法

在ROS 2(Robot Operating System version 2)中,launch.py 文件用于定义启动配置,它允许用户同时启动多个节点和/或ROS服务。launch.py 使用 Python 的 launch 库来编写,这个库提供了一系列API来定义启动行为。

以下是 launch.py 中一些基本的语法和元素:

1. 导入语句

在文件顶部,你需要导入 launchlaunch_ros 库中的必要组件:

from launch import LaunchDescription
from launch_ros.actions import Node

2. 定义 LaunchDescription

LaunchDescription 是一个列表,其中包含了所有要启动的节点和其他配置。

def generate_launch_description():
    return LaunchDescription([
        # 这里添加节点和其他配置
    ])

3. 添加节点

使用 Node 类来添加节点到启动配置中。你需要指定节点所属的包、节点的可执行文件名称,以及任何需要的参数。

Node(
    package='demo_nodes_cpp',
    executable='talker',
    name='talker_node',
    output='screen',
    arguments=['--ros-args', '-p', 'param:=value']
),

4. 使用 IncludeLaunchDescription

如果你想要包含另一个 launch.py 文件中的启动配置,可以使用 IncludeLaunchDescription

from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource

IncludeLaunchDescription(
    PythonLaunchDescriptionSource([另一个Python文件的路径]),
    launch_arguments={'arg1': 'value1', 'arg2': 'value2'}.items(),
),

5. 使用条件启动

你可以使用 Condition 来根据某些条件决定是否启动某个节点或配置。

from launch.conditions import IfCondition

Node(
    condition=IfCondition(launch_configuration['condition']),
    package='demo_nodes_cpp',
    executable='listener',
    name='listener_node',
),

6. 环境变量

设置环境变量可以使用 SetEnvironmentVariable 动作。

from launch.actions import SetEnvironmentVariable

SetEnvironmentVariable('ENV_VAR_NAME', 'value'),

7. 使用透明传输参数

有时,你可能需要将命令行参数传递给节点,这可以通过 OpaqueFunction 实现。

from launch.actions import OpaqueFunction

OpaqueFunction(function='some_function', args=['arg1', 'arg2']),

8. 使用实例

以下是一个 launch.py 文件的实例,它演示了如何在ROS 2中使用Python编写启动文件来同时启动多个节点。在这个例子中,我们将使用 turtlesim 包中的节点来展示如何配置和启动它们。

# 导入必要的库
from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    """生成launch描述"""
    return LaunchDescription([
        # 启动第一个turtlesim节点,命名空间为turtlesim1
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        
        # 启动第二个turtlesim节点,命名空间为turtlesim2
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        
        # 启动mimic节点,用于让第二个turtlesim模仿第一个turtlesim的动作
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            output='screen',  # 在屏幕上显示输出
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),  # 输入位姿话题重映射
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel')  # 输出速度指令话题重映射
            ]
        )
    ])

# 这个脚本可以直接通过ros2 launch命令运行,前提是它位于ROS 2的工作空间中的某个包的launch目录下
# 例如,如果你的包名为my_turtlesim_launch,并且launch.py位于my_turtlesim_launch/launch目录下
# 那么你可以通过以下命令运行它:
# ros2 launch my_turtlesim_launch launch.py

在这个实例中,我们定义了三个节点:

  1. 第一个和第二个节点都是 turtlesim_node,但是它们被放置在不同的命名空间中(turtlesim1turtlesim2)。这样做是为了避免节点名称和话题名称的冲突,允许同时运行两个 turtlesim 模拟器。

  2. 第三个节点是 mimic,它订阅第一个 turtlesim 的位姿话题,并将相应的速度指令发布到第二个 turtlesim 的速度指令话题上,从而实现模仿功能。

要运行这个 launch.py 文件,你需要确保它位于ROS 2工作空间中的一个包的 launch 目录下,并且该包已经被编译。然后,你可以使用 ros2 launch 命令加上包名和 launch.py 文件名来启动它。

结论

launch.py 文件是ROS 2中用于定义复杂启动配置的强大工具。通过组合使用上述元素,你可以创建灵活的启动脚本,以适应不同的开发和测试需求。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值