详细介绍ROS中通过shell文件依次启动多个launch文件

   本文主要介绍如何在ROS中通过shell文件依次启动多个launch文件,并介绍如何在同一个窗口的不同选项卡中依次启动多个launch文件。

   一、先来看一个简单的示例:

#!/bin/bash

gnome-terminal -- bash -c "roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

echo “racecar_gazebo_rviz_znc.launch  successfully started”

# 两个roslauch之间需要间隔一段时间,否则会相互抢占roscore,导致其中一个roslaunch失败,报runid错误

sleep 10s  

gnome-terminal -- bash -c "roslaunch bringup move_base_znc.launch; exec bash"

echo “move_base_znc.launch  successfully started”

   二、接下来我们逐行对上述示例进行解释:

   1、

#!/bin/bash

   这是脚本的Shebang行,指定了要使用的Shell。在本示例中,脚本将使用bash作为默认Shell。


   2、

gnome-terminal -- bash -c "roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

   在这行代码中

   (1)使用gnome-terminal命令用于打开一个新的终端窗口,在新的终端窗口中运行命令。

   (2)bash -c表示在新的终端中执行一条命令。在-c后面的双引号内写需要在这个终端窗口依次执行的命令,命令间用分号“;”间隔

   (3)在本终端窗口执行依次命令是roslaunch bringup racecar_gazebo_rviz_znc.launch和exec bash,前者启动了名为racecar_gazebo_rviz_znc.launch的ROS launch文件。后者exec bash用于设定在执行完该命令后,保持终端窗口打开而不退出。

   需要注意的是我在.bashrc文件中已经写入了上述文件的环境变量,在本例中为source /home/gly/catkin_ws/devel/setup.bash(根据自己情况修改)

在这里插入图片描述

   若没有再.bashrc文件中写入环境变量,则需要在执行launch文件前,先使用该语句加载环境变量,此时,本行语句变为

gnome-terminal -- bash -c "source /home/gly/catkin_ws/devel/setup.bash; roslaunch bringup racecar_gazebo_rviz_znc.launch; exec bash"

   3、

echo “racecar_gazebo_rviz_znc.launch  successfully started”

   这行语句使用echo 输出一条消息,后面双引号内的内容是输出的信息,本例中输出的是launch文件成功启动的信息,本行语句是非必要语句,可以不写。


   4、

sleep 10s

   这行代码让脚本暂停执行10秒钟。这是为了在启动两个不同的ROS launch文件之间留出一定的时间间隔,以避免它们相互竞争roscore资源并导致其中一个启动失败。

   在本例中,第一个launch文件,会启动roscore(ROS中未启动roscore时,launch文件会自动启动)、gazebo、rviz等环境耗时较长,所以在执行下一条launch文件前等待了10s,具体等待时间,取决于本launch文件启动需要花费的时间,自行修改即可。


   5和6,跟前面的2和3是同样的语法,不再赘述。


   三、保存文件,并赋予可执行权限

   将上述示例中的代码保存为.sh文件,如取名为znc.sh,然后在终端执行下述指令为该文件赋予可执行权限

chmod +x znc2.sh

   上述语句中

   (1)chmod:是设置文件权限的命令。

   (2)+x:表示要添加可执行权限。

   (3)znc.sh:是要添加权限的文件名。

   当然不想使用指令的小伙伴,也可以通过手动设置的方式,赋予文件的可执行权限,如下面的动态演示所示:

详细介绍ROS中通过shell文件依次启动多个launch文件_第1张图片


   四、执行该.sh文件

   在本例中,可以在终端输入以下指令,执行该.sh文件

./znc.sh

   效果演示如下:


   五、示例程序的改进版本

   在上述示例程序中,每个launch文件都会打开一个新的窗口,当需要执行的launch文件较多时,窗口过多会比较乱,因此,我们对上述程序进行简单的改进,使其在同一个窗口的不同选项卡下依次打开多个launch文件。

   改进后的示例程序如下:

#!/bin/bash

gnome-terminal --tab -- bash -c "\
roslaunch bringup racecar_gazebo_rviz_znc.launch; \
exec bash"

echo “racecar_gazebo_rviz_znc.launch  successfully started”

# 两个roslauch之间需要间隔一段时间,否则会相互抢占roscore,导致其中一个roslaunch失败,报runid错误

sleep 10s  

gnome-terminal --tab -- bash -c "\
roslaunch bringup move_base_znc.launch;\
exec bash"

echo “move_base_znc.launch  successfully started”

   与改进前的示例程序相比,新加入的–tab: 是 gnome-terminal 命令的选项,用于设定在新的选项卡中执行命令。此外,当在一个选项卡中需要执行的语句较多时,写成一行可读性较差,改进后的程序使用了换行符 \ 连接。每行都以一个反斜杠 \ 结尾,表示命令在下一行继续。这样可以使命令更易读。

   接下来,我们来看一下改进后程序的执行效果:


你可能感兴趣的:(Ubuntu和ROS,bash,开发语言)