ROS2学习之旅(10)——创建一个launch文件

当在具有较多节点同时运行的复杂的系统中,打开终端并重新输入配置细节将变得繁杂。

Launch文件允许同时启动和配置多个包含ROS2节点的可执行文件。

使用ros launch命令运行单个启动文件将立即启动整个系统——所有节点及其配置。

1.准备

创建一个新文件家以存放launch文件:

mkdir launch

创建一个名为turtlesim_mimic_launch.py的文件,可以通过以下命令实现:

touch launch/turtlesim_mimic_launch.py

还可以使用GUI进入系统的文件目录,并以这种方式创建一个新文件。

在文本编辑器中打开新文件。

2.写launch文件

通过launch文件启动turtlesim包中的可执行程序,将下列代码粘贴到turtlesim_mimic_launch.py中:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

2.1分析launch文件

这些import语句会引入一些Pythonlaunch模块:

from launch import LaunchDescription
from launch_ros.actions import Node

接下来,开始launch本身的描述:

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription中有一个由三个节点组成的系统,它们都来自turtlesim包。这个系统的目标是启动两个海龟窗口,让一只海龟模仿另一只海龟的动作。

launch描述中的前两个动作将启动两个turtlesim窗口:

Node(
    package='turtlesim',
    namespace='turtlesim1',
    executable='turtlesim_node',
    name='sim'
),
Node(
    package='turtlesim',
    namespace='turtlesim2',
    executable='turtlesim_node',
    name='sim'
),

注意:这两个节点之间的唯一区别是它们的名称空间值(namespace values)。唯一的名称空间允许系统启动两个模拟器,而不存在节点名或主题名冲突。

最后一个节点也来自turturlesim包,但是是一个不同的可执行文件:mimic

Node(
    package='turtlesim',
    executable='mimic',
    name='mimic',
    remappings=[
      ('/input/pose', '/turtlesim1/turtle1/pose'),
      ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
    ]
)

该节点以重映射的形式添加了配置细节。

mimic/input/pose话题被重映射到/turtlesim1/turtle1/pose,而它的/output/cmd_vel话题被映射到/turtlesim2/turtle1/cmd_vel。这意味着mimic将订阅/turtlesim1/simpose话题,并将其重新发布为/turtlesim2/sim的速度控制话题。换句话说,tuertlesim2会模仿turtlesim1的动作。

3.ros2 launch

为了启动turtlesim_mimic_launch.py,进入刚才建立的文件夹并运行以下命令:

cd launch
ros2 launch turtlesim_mimic_launch.py

注意:可以直接启动launch文件(如上所示),或者由包提供。当launch文件由包提供时,语法是:

ros2 launch <package_name> <launch_file_name>

两个turtlesim窗口将打开,将看到以下[INFO]消息,告知启动文件已经启动:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [turtlesim_node-1]: process started with pid [11714]
[INFO] [turtlesim_node-2]: process started with pid [11715]
[INFO] [mimic-3]: process started with pid [11716]

查看系统的运行情况,打开新终端,并在/turtlesim1/turtle1/cmd_vel话题上运行ros2 topic pub命令,让第一个海龟移动:

ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

将会看到两只海龟沿着同一条路线运动:

4.使用rat_graph查看系统

当系统仍在运行时,打开一个新的终端并运行rqt_graph以更好地了解launch文件中节点之间的关系。

执行命令:

rqt_graph
`n__rso2cli_12142`(执行的`ros2 topic pub`)正在将数据发布到左侧的`/turtlesim1/turtle1/cmd_vel`话题,`/turtlesim1/sim`节点订阅了该话题。图的其余部分显示了前面描述的内容:`mimic`订阅`/turtlesim1/sim`的`pose`话题,发布到`/turtlesim2/sim`的`cmd_vel`主题。

5.总结

launch文件通过许多节点和特定的配置细节简化了复杂系统的运行,可以使用Python创建launch文件,并使用ros2 launch命令运行它们。

注意:

与ROS1一样,同样可以使用XMLYAML来创建launch文件,可以参考:

Using Python, XML, and YAML for ROS 2 Launch Files — ROS 2 Documentation: Foxy documentation

如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。

posted @ 2021-07-14 23:16  Love&Robot  阅读(1172)  评论(0编辑  收藏  举报