【ROS 快速解决】launch 文件编写

  • 通过launch文件以及roslaunch命令可以一次性启动多个节点,并且可以设置丰富的参数
    • 通常存放路径:工作空间目录 / launch / xxx.launch
    • launch 文件本质是一个 xml 类型的文件,基本格式如下
      <launch>
      <node .../>  ## 最重要的标签
      <param .../>
      <rosparam .../>
      <include .../>
      <remap .../>
      <arg .../>
      <group>  </group>
      </launch>
      

  • _________________ <node> 标签:指定一个准备运行的ROS节点
    <node pkg="package_name" type="executable_node" name="node_name" args="$()" respawn="true" output="sceen">
    
    • pkg:节点所在功能包名称
    • type:可执行文件的名称
    • name:节点运行时的名称
    • args:传递命令行设置的参数
    • respawn:异常关闭后是否自动重启
    • output:是否将节点信息输出到屏幕

  • _________________ <param> 标签:实现传递参数的功能,运行时的参数,参数会存储在参数服务器中
    <param name="param_name" type="param_type" value="param_value" />
    <!-- param 标签可以嵌入到 node 标签中,以此来作为该 node 的私有参数 -->
    <node>
    	<param name="param_name" type="param_type" value="param_value" />
    </node>
    
    • name:参数名称
    • type:参数类型 double,str,int,bool,yaml
    • value:需要设置的参数值

  • _________________ <rosparam> 标签:从参数服务器上加载(load)、导出(dump)和删除(delete)YAML文件
    <!-- 加载package_name功能包下的example.yaml文件 -->
    <rosparam command="load" file="$(find package_name)/example.yaml">
    <!-- 导出example_out.yaml文件到package_name功能包下 -->
    <rosparam command="dump" file="$(find package_name)/example_out.yaml" />
    <!-- 删除参数 -->
    <rosparam command="delete" param="xxx/param">
    
    • command:功能类型(load、dump、delete)
    • file:参数文件路径
    • param:参数名称

  • _________________ <include> 标签:和编程语言中的include预处理类似,导入其他launch文件
    <include file="$(find package_name)/launch_file_name">
    
    • file:文件路径

  • _________________ <remap> 标签:实现节点名称的重映射
    <remap from="turtle1/cmd_vel" to="/cmd_vel" />
    <!-- remap 标签同样可以嵌入到 node 标签中,以此来作为该 node 的私有重映射 -->
    <node>
    	<remap from="turtle1/cmd_vel" to="/cmd_vel" />
    </node>
    

  • _________________ <arg> 标签:局部参数,启动时的参数,只在launch文件中有意义
    <arg name="arg_name" default="arg_default" />
    <arg name="arg_name" value="arg_value" />
    <!-- 命令行传递的 arg 参数可以覆盖 default,但不能覆盖 value。 -->
    

  • _________________ <group> 标签:可以将不同的节点放入不同的 namespace
    <!-- 用法1 -->
    <group ns="namespace_1">
        <node pkg="pkg_name1" .../>
        <node pkg="pkg_name2" .../>
        ...
    </group>
    
    <group ns="namespace_2">
        <node pkg="pkg_name3" .../>
        <node pkg="pkg_name4" .../>
        ...
    </group>
    <!-- 用法2 -->
    <!-- if = value:value 为 true 则包含内部信息 -->
    <group if="$(arg foo1)">
        <node pkg="pkg_name1" .../>
    </group>
    
    <!-- unless = value:value 为 false 则包含内部信息 -->
    <group unless="$(arg foo2)">
        <node pkg="pkg_name2" .../>
    </group>
    <!--
    	当 foo1 == true 时包含其标签内部
    	当 foo2 == false 时包含其标签内部
    -->
    

博客参考链接

### 编写 ROS 2 的 Launch 文件ROS 2 中,Launch 文件用于定义一组要启动的节点以及它们的相关配置。这使得开发者能够更方便地管理复杂的机器人系统[^1]。 以下是创建一个简单的 ROS 2 Launch 文件的过程: #### 创建一个新的 Python 脚本作为 Launch 文件 ROS 2 支持多种类型的 Launch 文件,其中最常用的是基于 Python 的 `.py` 文件。下面是一个基本的例子,展示如何启动两个节点并设置参数。 ```python from launch import LaunchDescription from launch_ros.actions import Node def generate_launch_description(): # 定义第一个节点及其参数 node_talker = Node( package='demo_nodes_cpp', # 包名 executable='talker', # 可执行文件名 name='my_talker', # 自定义节点名称 output='screen', parameters=[{'frequency': 2.0}] # 设置频率参数 ) # 定义第二个节点 node_listener = Node( package='demo_nodes_cpp', executable='listener', name='my_listener', output='screen' ) # 返回描述符对象 return LaunchDescription([ node_talker, node_listener ]) ``` 上述脚本中,`Node` 对象被用来声明需要运行的节点,并可以通过 `parameters` 参数来传递配置选项给这些节点。 #### 运行 Launch 文件 保存该文件为 `example.launch.py` 并将其放置在一个已安装的包中的适当位置(通常是在 `install/<package_name>/share/<package_name>/launch/` 或者源码树下的对应路径)。然后可以在终端中通过以下命令运行它: ```bash ros2 launch <package_name> example.launch.py ``` 这里 `<package_name>` 是包含此 Launch 文件ROS 2 包的名字。 #### 高级功能 除了简单地启动节点外,还可以利用条件语句、环境变量替换以及其他高级特性来自定义行为。例如,可以根据某个标志决定是否加载特定的节点或调整其参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值