1. 为什么需要Launch启动系统
记得我第一次做ROS小车项目时,每次测试都要开三个终端:一个启动roscore,一个运行键盘控制节点,还有一个启动电机驱动节点。那时候我就想,要是能一键启动所有节点该多好啊!后来发现了ROS Launch系统,真的是解放双手的神器。
Launch文件就像是机器人的"一键启动"按钮。想象一下,你的小车有十几个节点:传感器采集、运动控制、导航规划、状态监控……如果每个都要手动启动,不仅麻烦还容易出错。而Launch文件可以把所有这些节点组织起来,通过一个命令就能全部启动,还能统一管理参数和配置。
在实际项目中,我遇到过这样的情况:调试时节点启动顺序不对,导致电机控制节点找不到传感器数据。用了Launch系统后,我可以精确控制节点的启动顺序和依赖关系,再也没出现过这种问题。特别当你需要在不同机器上部署节点时(比如主控在工控机,电机驱动在树莓派),Launch文件能帮你轻松管理分布式系统。
2. Launch文件基础语法详解
2.1 基本结构
每个Launch文件都以<launch>标签开始,以</launch>结束,就像HTML文档一样。在这个容器里,我们可以定义各种元素:节点、参数、包含其他文件等。
先来看一个最简单的Launch文件:
<launch>
<node pkg="my_robot_control" type="keyboard_control_node.py" name="keyboard_control" output="screen"/>
</launch>
这个文件只启动一个节点,但已经包含了最基本的元素。让我解释一下每个属性的含义:
pkg:节点所在的功能包名称,就是你在catkin_create_pkg时指定的名字type:节点的可执行文件名称,注意这里要写文件全名(包括.py或.cpp编译后的可执行文件)name:运行时给节点起的名字,这个名字会覆盖代码中rospy.init_node()设置的名字output:指定节点的输出位置,screen表示输出到当前终端
2.2 常用标签和参数
在实际项目中,我经常用到这些标签:
节点重映射:有时候需要改变节点使用的话题名称。比如你的键盘控制节点发布到/cmd_vel,但电机节点订阅的是/motor_cmd,这时候就需要重映射:
<node pkg="my_robot_control" type="keyboard_control_node.py" name="keyboard_control" output="screen">
<remap from="/cmd_vel" to="/motor_cmd"/>
</node>
参数设置:可以在Launch文件中设置ROS参数服务器中的参数:
<param name="max_speed" type="double" value="1.0"/>
分组命名空间:为一组节点创建独立的命名空间,避免命名冲突:
<group ns="motor_control">
<node pkg="my_robot_control" type="motor_controller_node.py" name="motor_driver" output="screen"/>
</group>
这样,电机节点的话题都会变成/motor_control/motor_driver/...的形式。
3. 构建小车多节点协同启动系统
3.1 创建Launch文件
基于我们之前创建的小车控制功能包,现在来构建完整的启动系统。首先创建Launch文件目录:
mkdir -p ~/catkin_ws/src/my_robot_control/launch
然后创建主要的Launch文件:
<launch>
<!-- 参数配置 -->
<param name="max_linear_speed" type="double" value="0.5"/>
<param name="max_angular_speed" type="double" value="1.0"/>
<!-- 启动键盘控制节点 --&

3633

被折叠的 条评论
为什么被折叠?



