ROS知识篇---ROS的launch文件



前言

ROS 的 launch 文件用于启动多个节点、设置参数、加载配置等操作。它使用 XML 格式编写,能够方便地管理复杂的 ROS 系统。以下详细介绍 launch 文件的编写方法以及常见语句的使用方法。


1. launch 文件的基本结构

一个最简单的 launch 文件结构如下:

<launch>
    <node name="node_name" pkg="package_name" type="executable_name" output="screen"/>
</launch>

: 根标签,所有内容都必须包含在 和 之间

: 用于启动一个 ROS 节点

name: 节点的名称(可以自定义,覆盖节点内部的名称)。

pkg: 节点所属的 ROS 包名

type: 节点的可执行文件名(通常是 .cpp 或 .py 文件编译或脚本生成的可执行文件)。

output

output: 指定节点的输出位置,output=“screen” 表示将日志输出到终端

2. 常见语句和用法

2.1 启动节点 ()

启动一个节点的基本语法如下:

<node name="my_node" pkg="my_package" type="my_node_executable" output="screen"/>

name

name: 节点名称,可以自定义。

pkg

pkg: 节点所属的 ROS 包。

type

type: 节点的可执行文件名。

output

output: 控制节点输出,常用值:

output=“screen”: 将日志输出到终端。
output=“log”: 将日志输出到 ROS 日志文件(默认行为)。

2.2 设置参数 ( 和 )

2.2.1 设置单个参数 ()

<param name="param_name" type="type" value="value"/>
name

name: 参数名称。

type

type: 参数类型(如 str, int, double, bool 等)。

value

value: 参数的值。

示例
<param name="max_speed" type="double" value="1.5"/>

2.2.2 加载参数文件 ()

<rosparam command="load" file="$(find package_name)/path/to/params.yaml"/>
command

command=“load”: 表示加载参数文件

file

file: 参数文件的路径,通常使用 $(find package_name) 来定位包路径

示例
<rosparam command="load" file="$(find my_package)/config/params.yaml"/>

2.3 启动多个节点

可以在一个 launch 文件中启动多个节点

<launch>
    <node name="node1" pkg="my_package" type="node1_executable" output="screen"/>
    <node name="node2" pkg="my_package" type="node2_executable" output="screen"/>
</launch>

2.4 设置命名空间 (ns)

通过 ns 属性可以为节点设置命名空间

<node name="my_node" pkg="my_package" type="my_node_executable" ns="namespace_name"/>

示例

2.5 重映射话题 ()

通过 可以重映射话题名称

<remap from="original_topic" to="new_topic"/>

示例

<node name="my_node" pkg="my_package" type="my_node_executable">
    <remap from="/camera/image_raw" to="/front_camera/image_raw"/>
</node>

2.6 包含其他 launch 文件 ()

通过 可以包含其他 launch 文件

<include file="$(find package_name)/launch/other_launch_file.launch"/>

示例

<include file="$(find my_package)/launch/camera.launch"/>

2.7 条件启动 (if 和 unless)

通过 if 和 unless 可以根据条件决定是否启动节点

<node name="my_node" pkg="my_package" type="my_node_executable" if="$(arg condition)"/>
<node name="my_node" pkg="my_package" type="my_node_executable" unless="$(arg condition)"/>

if: 当条件为 true 时启动节点。
unless: 当条件为 false 时启动节点。

2.8 传递参数 ()

通过 可以定义参数,并在 launch 文件中传递

<arg name="arg_name" default="default_value"/>

示例

<launch>
    <arg name="use_camera" default="true"/>
    <node name="camera" pkg="my_package" type="camera_node" if="$(arg use_camera)"/>
</launch>

在命令行中传递参数

roslaunch my_package my_launch_file.launch use_camera:=false

2.9 设置环境变量 ()

通过 可以设置环境变量

<env name="ENV_VAR_NAME" value="value"/>

示例

<env name="ROS_MASTER_URI" value="http://localhost:11311"/>

2.10 组 ()

通过 可以将多个节点或参数分组,并共享命名空间或条件

<group ns="namespace_name">
    <node name="node1" pkg="my_package" type="node1_executable"/>
    <node name="node2" pkg="my_package" type="node2_executable"/>
</group>

3. 示例 launch 文件

以下是一个完整的 launch 文件示例:

<launch>
    <!-- 定义参数 -->
    <arg name="use_camera" default="true"/>

    <!-- 加载参数文件 -->
    <rosparam command="load" file="$(find my_package)/config/params.yaml"/>

    <!-- 启动节点1 -->
    <node name="node1" pkg="my_package" type="node1_executable" output="screen">
        <remap from="/camera/image_raw" to="/front_camera/image_raw"/>
    </node>

    <!-- 启动节点2(条件启动) -->
    <node name="node2" pkg="my_package" type="node2_executable" if="$(arg use_camera)"/>

    <!-- 包含其他 launch 文件 -->
    <include file="$(find my_package)/launch/camera.launch"/>
</launch>

4. 总结

: 启动节点。

和 : 设置参数或加载参数文件。 ## : 重映射话题。 ## : 包含其他 launch 文件。 ## : 定义和传递参数。 ## : 分组管理节点。 ## : 设置环境变量。

通过灵活使用这些标签,可以编写出功能强大的 launch 文件,简化 ROS 系统的启动和管理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值