机器人编程趣味实践12-启动工具(launch)

Posted zhangrelay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器人编程趣味实践12-启动工具(launch)相关的知识,希望对你有一定的参考价值。

之前大部分案例,每输入一条指令就需要新开一个窗口,如何开启大工程……

  • launch

目标

创建启动文件以运行复杂的 ROS 2 系统。简单的launch,功能强大细节知识点后续介绍。

基础知识

在到目前为止的教程中,一直需要给运行的每个新节点打开新终端。 随着创建具有越来越多同时运行的节点的更复杂的系统,打开终端和重新输入配置细节变得乏味。

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

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

功能包要点

  1. rqt_graph
  2. turtlesim
  3. source

实践

1 配置

新建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 代码注解

这些导入语句会引入一些 Python 启动模块。类似C++的头文件功能。

from launch import LaunchDescription
from launch_ros.actions import Node

接下来,启动描述正式开始:

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription 内是一个由三个节点组成的系统,全部来自turtlesim 包。 该系统的目标是启动两个机器人窗口,让一只机器人模仿另一只机器人的运动。

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

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

请注意,两个节点之间的唯一区别是它们的命名空间值。 唯一的命名空间允许系统启动两个模拟器而不会发生节点名称或主题名称冲突。

该系统中的两只机器人都接收关于同一主题的命令,并在同一主题上发布它们的姿势。 如果没有唯一的命名空间,就无法区分针对一只机器人或另一只机器人的消息。

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

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

此节点以重新映射的形式添加了配置详细信息。模拟的 /input/pose 主题被重新映射到 /turtlesim1/turtle1/pose,它的 /output/cmd_vel 主题被重新映射到 /turtlesim2/turtle1/cmd_vel。 这意味着 mimic 将订阅 /turtlesim1/sim 的姿势主题并重新发布它以供 /turtlesim2/sim 的速度命令主题订阅。 换句话说,turtlesim2 将模仿turtlesim1 的动作。

3 启动launch

如果没有将此文件添加到功能包中,则需要到对应文件夹手动启动:

  1. cd launch
  2. ros2 launch turtlesim_mimic_launch.py

详细细节后续讲解。

可以直接启动启动文件(如上面所做的那样),或由包提供。 当它由包提供时,语法为:ros2 launch <package_name> <launch_file_name>

在后面的教程中了解有关创建包的更多信息。

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

使用速度指令查看效果如下:

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

可以修改速度。

4 查看系统节点信息

使用rqt_graph。

总结

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


-Fin-


 

以上是关于机器人编程趣味实践12-启动工具(launch)的主要内容,如果未能解决你的问题,请参考以下文章

机器人编程趣味实践13-数据保存和播放(bag)

机器人编程趣味实践14-机器人三维仿真(Gazebo+TurtleBot3)

机器人编程趣味实践20-版本课程(教学)

机器人编程趣味实践07-信息交互(主题)

机器人编程趣味实践05-二维图形化仿真(turtlesim)

机器人编程趣味实践03-运算(+ - × ÷)