3-替换launch文件

背景

    launch文件用于启动节点、服务和执行进程,使用launch文件时可以添加相应的参数,并且可以替换参数,提供更多的灵活性,可用于获取特定信息,如launch配置、环境变量等。

替换launch文件

1 创建包

   首先,创建一个名为launch_tutorial的新包:

ros2 pkg create --build-type ament_cmake --license Apache-2.0 launch_tutorial

    在这个包里面,创建一个名为launch的文件夹:

mkdir launch_tutorial/launch

    最后,确保安装launch文件:

    在ament_package()之前将以下代码添加到CMakeLists.txt:

install(DIRECTORY
        launch
        DESTINATION share/${PROJECT_NAME}/
)

2 父launch文件

    创建一个launch文件,它将调用并传递参数给另一个launch文件。这个launch文件可以是Python的,也可以是YAML的。
    为此,在launch_tutorial包的launch文件夹中创建以下文件:

    新建launch/example_main.launch.yaml文件,添加以下内容:

launch:
  - let:
      name: 'background_r'
      value: '200'
  - include:
      file: '$(find-pkg-share launch_tutorial)/launch/example_substitutions.launch.yaml'
      arg:
        - name: 'turtlesim_ns'
          value: 'turtlesim2'
        - name: 'use_provided_red'
          value: 'True'
        - name: 'new_background_r'
          value: '$(var background_r)'

    $(find-pkg-share launch_tutorial)替换用于查找launch_tutorial包的路径。然后将路径替换与example_substitutions.launch.yaml链接起来。

file: '$(find-pkg-share launch_tutorial)/launch/example_substitutions.launch.yaml'

    带有turtlesim_ns和use_provided_red参数的background_r变量被传递给include操作。$(var background_r)替换用于用background_r变量的值定义new_background_r参数。

arg:
  - name: 'turtlesim_ns'
    value: 'turtlesim2'
  - name: 'use_provided_red'
    value: 'True'
  - name: 'new_background_r'
    value: '$(var background_r)'

3 替换launch文件示例

    现在在同一文件夹中创建替换launch文件:

    创建文件launch/example_substitutions.launch文件,并插入以下代码:

launch:
  - arg:
      name: 'turtlesim_ns'
      default: 'turtlesim1'
  - arg:
      name: 'use_provided_red'
      default: 'False'
  - arg:
      name: 'new_background_r'
      default: '200'

  - node:
      pkg: 'turtlesim'
      namespace: '$(var turtlesim_ns)'
      exec: 'turtlesim_node'
      name: 'sim'
  - executable:
      cmd: 'ros2 service call $(var turtlesim_ns)/spawn turtlesim/srv/Spawn "{x: 5, y: 2, theta: 0.2}"'
  - executable:
      cmd: 'ros2 param set $(var turtlesim_ns)/sim background_r 120'
  - timer:
      period: 2.0
      children:
        - executable:
            cmd: 'ros2 param set $(var turtlesim_ns)/sim background_r $(var new_background_r)'
            if: '$(eval "$(var new_background_r) == 200 and $(var use_provided_red)")'

    定义了turtlesim_ns、use_provided_red和new_background_r启动配置,它们用于在上述变量中存储launch参数的值,并将它们传递给所需的操作。launch配置参数稍后可以与$(var <name>)一起使用,以获取launch文件中任何部分参数的值。
    arg标签用于定义launch参数,该参数可以从上面的启动文件或控制台进行传递。

- arg:
    name: 'turtlesim_ns'
    default: 'turtlesim1'
- arg:
    name: 'use_provided_red'
    default: 'False'
- arg:
    name: 'new_background_r'
    default: '200'

    以下的turtlesim_node节点使用$(var <name>)替换将命名空间设置为turtlesim_ns。

- node:
    pkg: 'turtlesim'
    namespace: '$(var turtlesim_ns)'
    exec: 'turtlesim_node'
    name: 'sim'

    然后,使用相应的cmd tag定义可执行操作。该命令调用turtlesim节点的spawn服务。
    此外,$(var <name>)替换用于获取turtlesim_ns launch参数的值,以构造命令字符串。

- executable:
    cmd: 'ros2 service call $(var turtlesim_ns)/spawn turtlesim/srv/Spawn "{x: 5, y: 2, theta: 0.2}"'

    同样的方法也用于ros2参数可执行动作,这些操作改变了乌龟背景的红色参数。不同之处在于,只有当提供的new_background_r参数等于200并且use_provided_red launch参数设置为True时,计时器内的第二个动作才会执行。

4 编译包

    转到工作区的根目录,编译包:

colcon build

    记得在编译之后对工作空间进行source。

ros2 launch launch_tutorial example_main.launch.yaml

    这将做以下事情:
    1.启动一个具有蓝色背景的turtlesim节点
    2.Spawn第二只乌龟
    3.将颜色改为紫色
    4.如果提供的background_r参数为200并且use_provided_red参数为True,则在两秒后将颜色更改为粉红色。

修改launch参数

    如果希望更改提供的launch参数,可以更新example_main.launch中的background_r变量。或启动example_substitution .launch,然后传递参数。要查看可能提供给launch文件的参数,运行以下命令:

ros2 launch launch_tutorial example_substitutions.launch.yaml --show-args

    这将显示可能提供给launch文件的参数及其默认值。

Arguments (pass arguments as '<name>:=<value>'):

    'turtlesim_ns':
        no description given
        (default: 'turtlesim1')

    'use_provided_red':
        no description given
        (default: 'False')

    'new_background_r':
        no description given
        (default: '200')

现在,可以将所需的参数传递给launch文件,如下所示:

ros2 launch launch_tutorial example_substitutions.launch.yaml turtlesim_ns:='turtlesim3' use_provided_red:='True' new_background_r:=200

参考资料:https://github.com/ros2/launch/blob/humble/launch/doc/source/architecture.rst

总结

    在本教程中,学习了如何在launch文件中使用参数替换,增加灵活性。

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值