本文参考这篇博客:点击链接
一、roslaunch是一个至关重要的工具,它能够帮助我们高效地启动ROS节点、参数服务器和其他必要的组件。
二、在ROS中,一个复杂的机器人项目通常由多个节点(Node)组成,每个节点负责不同的任务,例如传感器数据处理、运动控制、用户界面等。在项目启动时,需要同时启动这些节点,并且要确保它们之间的通信和协调工作。
三、ros中启动单个节点命令
rosrun 包名 可执行文件名
当然肯定是一次启动多个节点是更方便的
四、
启动单个节点 vs. 启动多个节点:
rosrun只能启动一个节点,适用于单个节点的快速启动。
roslaunch可以同时启动多个节点,适用于复杂的ROS系统和多节点协同工作的场景。
参数设置和传递:
rosrun通过命令行参数传递参数给节点。
roslaunch可以在启动文件中定义和设置节点的参数,并且支持从参数文件加载参数。
五、
<launch><!-- 启动can_data_publisher节点 --><node name="can_data_publisher" pkg="comm" type="wulingreport" output="screen"></node>
</launch>
元素用于定义一个要启动的ROS节点。它包含以下属性:
1.name:节点的名称can_data_publisher,用于标识节点。
2.pkg:节点所在的包名comm
3.type:节点的类型wulingreport,即节点可执行文件的名称
4.args:可选属性,用于传递给节点的命令行参数。
5.output:可选属性,用于定义节点的输出选项,可以是"screen"(输出到屏幕),“log”(输出到日志文件),或"none"(无输出)。
六、
<arg name="argument_name" default="default_value" />
元素用于定义参数化的参数,可以在启动时传入不同的参数值。它包含以下属性:
name:参数的名称
default:default_value参数的默认值,如果在启动命令中传入参数,则可以使用默认值。
七、
<include file="file" />
允许将其他的roslaunch文件包含在当前文件中,实现模块化配置,包含一个file属性,用于指定的包含的roslaunch文件的路径。
通过使用include元素,我们可以将大的启动配置拆分为多个小文件,是的更加容易管理。
<group></group>
group元素用于将多个节点组织在一个组内
八、
remap:进行话题重映射
允许您在启动文件中对话题进行重映射,从而解决结点之间的通信问题。通常在启动文件中,节点的话题名称已经预先定义,但在某些情况下,您可能希望在启动时动态地更改节点之间的通信话题。
<launch><!-- Node with original topic --><node pkg="package_name" type="node_type" name="node1" /><!-- Node with remapped topic --><node pkg="package_name" type="node_type" name="node2"><remap from="original_topic" to="remapped_topic" /></node>
</launch>
启动了两个节点,在同一个包下,使用一个可执行文件,将node2中的话题original_topic重新映射为remappen_topic。在node2内部,接收来自original_topic的数据,但实际上与node1通信话题是remapped_topic。
使用标签可以方便地解决节点之间话题名称的冲突问题,从而实现灵活的通信。
九、
arg:
<launch><!-- Define an argument with default value --><arg name="my_param" default="default_value" /><!-- Start the node with the specified parameter value --><node pkg="package_name" type="node_type" name="my_node" output="screen"><param name="param_name" value="$(arg my_param)" /></node>
</launch>
需要根据不同的运行环境或需求来调整节点的参数。为了使启动配置更加灵活,可以使用标签定义参数,并在roslaunch文件中引入和使用这些参数。
我们使用标签定义了一个参数my_param,并给它设置了默认值default_value。然后,在启动节点my_node时,我们使用标签将参数param_name设置为$(arg my_param),这里的$(arg my_param)表示使用之前定义的参数my_param的值。
十、
和语句
<launch><!-- Start node1 only if the condition is true --><if><condition value="$(arg condition_variable)" /><node pkg="package_name" type="node_type" name="node1" /></if><!-- Start node2 only if the condition is false --><unless><condition value="$(arg condition_variable)" /><node pkg="package_name" type="node_type" name="node2" /></unless>
</launch>
我们使用和标签分别对node1和node2进行条件判断。标签用于定义条件判断的值,它的值来自之前定义的参数condition_variable。如果condition_variable的值为true,则node1会被启动;如果为false,则node2会被启动。
使用条件语句,我们可以根据不同的情况来启动不同的节点,使得启动配置更加灵活和智能。
假设有一个简单的ROS项目,其中包含两个节点,一个发布者节点(publisher_node)和一个订阅者节点(subscriber_node)。发布者节点发布一个名为/chatter的话题,订阅者节点接收并显示收到的消息。
创建一个roslaunch文件来启动这两个节点,并演示如何使用标签进行话题重映射,引入参数,以及使用调试选项和调试策略。
<launch><!-- Define an argument for message rate --><arg name="message_rate" default="1.0" /><!-- Start the publisher_node with a remapped topic and custom message rate --><node pkg="my_package" type="publisher_node" name="publisher" output="screen"><remap from="chatter" to="custom_chatter_topic" /><param name="message_rate" value="$(arg message_rate)" /></node><!-- Start the subscriber_node --><node pkg="my_package" type="subscriber_node" name="subscriber" output="screen" />
</launch>
我们在roslaunch文件中使用标签定义了一个参数message_rate,并设置了默认值为1.0。这个参数用于控制消息发布的频率。
在publisher_node节点中,我们使用标签将发布的话题/chatter重映射为/custom_chatter_topic。这样,在其他节点中订阅的话题名就是/custom_chatter_topic。
我们使用标签将参数message_rate设置为我们之前定义的message_rate参数的值,这样我们可以在启动时传入不同的频率。
十一、
–nodes
在终端中运行以下命令,可以列出该roslaunch文件中的所有节点
roslaunch --nodes my_launch_file.launch
这样我们可以检查所有将要启动的节点,确保节点名称和类型正确。
–screen
终端中运行一下命令。启动节点,将输出信息打印到终端。
roslaunch --screen my_launch_file.launch
这样可以方便我们实时查看节点的输出信息,以便进行调试。