ROS 的 launch 文件用于启动多个节点、设置参数、加载配置等操作。它使用 XML 格式编写,能够方便地管理复杂的 ROS 系统。以下详细介绍 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=“screen” 表示将日志输出到终端。
启动一个节点的基本语法如下:
<node name="my_node" pkg="my_package" type="my_node_executable" output="screen"/>
name: 节点名称,可以自定义。
pkg: 节点所属的 ROS 包。
type: 节点的可执行文件名。
output: 控制节点输出,常用值:
output=“screen”: 将日志输出到终端。
output=“log”: 将日志输出到 ROS 日志文件(默认行为)。
<param name="param_name" type="type" value="value"/>
name: 参数名称。
type: 参数类型(如 str, int, double, bool 等)。
value: 参数的值。
<param name="max_speed" type="double" value="1.5"/>
<rosparam command="load" file="$(find package_name)/path/to/params.yaml"/>
command=“load”: 表示加载参数文件。
file: 参数文件的路径,通常使用 $(find package_name) 来定位包路径。
<rosparam command="load" file="$(find my_package)/config/params.yaml"/>
可以在一个 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>
<node name="my_node" pkg="my_package" type="my_node_executable" ns="namespace_name"/>
<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>
<include file="$(find package_name)/launch/other_launch_file.launch"/>
<include file="$(find my_package)/launch/camera.launch"/>
<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 时启动节点。
<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
<env name="ENV_VAR_NAME" value="value"/>
<env name="ROS_MASTER_URI" value="http://localhost:11311"/>
<group ns="namespace_name">
<node name="node1" pkg="my_package" type="node1_executable"/>
<node name="node2" pkg="my_package" type="node2_executable"/>
group>
以下是一个完整的 launch 文件示例:
<launch>
<arg name="use_camera" default="true"/>
<rosparam command="load" file="$(find my_package)/config/params.yaml"/>
<node name="node1" pkg="my_package" type="node1_executable" output="screen">
<remap from="/camera/image_raw" to="/front_camera/image_raw"/>
node>
<node name="node2" pkg="my_package" type="node2_executable" if="$(arg use_camera)"/>
<include file="$(find my_package)/launch/camera.launch"/>
launch>
: 启动节点。
通过灵活使用这些标签,可以编写出功能强大的 launch 文件,简化 ROS 系统的启动和管理。