前几篇博客讲述了节点的订阅与发布、消息msg和服务srv的使用。这些示例的使用比较简单,但在实际工程应用中,一个功能包可能包含很多个节点,一个功能的实现往往需要运行多个节点,此时若使用rosrun命令运行节点无疑非常麻烦且不切合实际。在ROS中可以使用launch来解决这个问题,通过launch文件一次性启动多个节点。
以博主的博客ROS节点订阅与发布为例,来演示ROS中的启动文件编辑与运行。
1. 编辑launch启动文件
cd ~/catkin_ws
source devel/setup.bash
roscd ROS_Test1
mkdir launch
cd launch
vim ROS_Test1.launch
编辑内容如下所示:
<?xml version="1.0"?>
<launch>
<node name = "node_a" pkg = "ROS_Test1" type = "Test1_node_a"/>
<node name = "node_b" pkg = "ROS_Test1" type = "Test1_node_b"/>
</launch>
其中node name为cpp文件中ros初始化时的节点名字(节点名字唯一);pkg为功能包名;type为cpp文件编译之后的可执行节点名字,在CMakLists.txt中可查看。例如本例中的cpp文件中init时节点名称为“node_a”,编译时将编译生成的节点命名为“Test1_node_a”,功能包为“ROS_Test1”。
2. 运行启动节点
roslaunch ROS_Test1 ROS_Test1.launch
运行结果如下所示:
执行rosnode list
使用rosluanch运行节点时,ROS_INFO输出的信息不显示,此时运行命令行:
rqt_console
结果如下所示:
可以看出节点运行与消息输出情况。
3. 补充
执行roslaunch命令行时,会自动运行roscore命令,因此使用启动文件运行节点时不需要新开终端运行roscore。