理解roslaunch在大型项目中的作用
roslaunch的作用
在一个大型的机器人项目中,经常涉及到多个node协同工作,并且每个node都有很多可设置的parameter。比如我们的机器人miiboo_nav导航项目,涉及到地图服务节点、定位算法节点、运动控制节点、底盘控制节点、激光雷达数据获取节点等众多节点,和几百个影响着这些node行为模式的parameter。如果全部手动rosrun逐个启动node并传入parameter,工程的复杂程度将难以想象。所以这个时候就需要用roslaunch来解决问题,将需要启动的节点和需要设置的parameter全部写入一个*.launch文件,然后用 roslaunch一次性的启动*.launch文件,这样所有的节点就轻而易举的启动了。
理解:其是一个独立的模块,用于节点的启动
roslaunch的用法
1、roslaunch的应用
mkdir launch // 注意launch是 建 在 包 里面
cd launch
vim union.launch
<launch>
<node pkg="ros_tutorials_topic" type="topic_publisher" name="topic_publisher1"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="topic_subscriber1"/>
<node pkg="ros_tutorials_topic" type="topic_publisher" name="topic_publisher2"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="topic_subscriber2"/>
</launch>
步骤
cd my_c++/VINS_test/ROS_test/ros_publisher_subscriber/catkin_ws // 移动到catkin目录
catkin_make //执行catkin构建
source devel/setup.bash
source devel/setup.bash
roslaunch ros_tutorials_topic union.launch --screen
roslaunch + 包名 + *.launch 文件
$ rosnode list
/rosout
/topic_publisher1
/topic_publisher2
/topic_subscriber1
/topic_subscriber2
$ roscd ros_tutorials_topic/launch
$ gedit union.launch
<launch>
<group ns="ns1">
<node pkg="ros_tutorials_topic" type="topic_publisher" name="topic_publisher"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="topic_subscriber"/>
</group>
<group ns="ns2">
<node pkg="ros_tutorials_topic" type="topic_publisher" name="topic_publisher"/>
<node pkg="ros_tutorials_topic" type="topic_subscriber" name="topic_subscriber"/>
</group>
</launch>
2. Launch标签
<launch>
<arg name="update_period" default="10" />
<param name="timing" value="$(arg update_period)"/>
</launch>
$ roslaunch my_package my_package.launch update_period:=30