文章目录
前言
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 系统的启动和管理。