• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS2入门教程——11. 创建一个launch文件

人工智能 古月 1214次浏览 0个评论

到现在为止,每次启动一个ROS2中的节点,我们都需要开启一个新的终端运行ros2 run指令,如果机器人系统中的节点很多,这样岂不是很麻烦。   ROS2针对这个问题,专门设计了launch启动文件,可以通过一个类似脚本的文件,一起启动多个节点并允许在文件中对节点进行配置。   接下来我们就看看如何才能创建并使用一个launch文件。  

1.配置

首先创建一个launch文件夹,作为后续放置launch文件的目录:

mkdir launch

  接下来就可以创建launch文件啦:   Linux:

touch launch/turtlesim_mimic_launch.py

  macOs:

touch launch/turtlesim_mimic_launch.py

  Winows:

type nul > launch/turtlesim_mimic_launch.py

  (如果不熟悉命令行操作,其实也可以用鼠标右键新建文件)   没错,ROS2中的launch文件其实是一个python的脚本。  

2.创建launch文件内容

接下来我们尝试使用launch文件来启动小海龟仿真器中的几个节点,可以将以下内容拷贝到 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'),
            ]
        )
    ])

  我们来具体看下以上launch文件的内容。

from launch import LaunchDescription
from launch_ros.actions import Node

  类似python程序一样,一上来就得引用需要的模块。

def generate_launch_description():
   return LaunchDescription([


   ])

  接下来是launch文件起始的描述,在 LaunchDescription 中描述了三个节点的启动,都是turtlesim包中的节点。  

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

  这是前两个节点的描述,可以看到除了命名空间之外,其他的内容都是一样的,这里是启动了两个海龟仿真器,通过命名空间区分开,不然会有同名节点的问题。package表示节点所在的功能包,executable表示要运行的可执行文件名,name表示启动后的节点名。  

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

  最后一个节点启动的是turtlesim功能包中的mimic节点,其中主要是在配置mimc的remapping重映射参数。mimic的输入话题从/input/pose重映射为/turtlesim1/turtle1/pose,输出话题从/output/cmd_vel重映射为/turtlesim2/turtle1/cmd_vel。   我们基本可以猜到,mimic节点通过订阅turtle1的位置,转换成对turtle2的速度指令发布出去,最后应该可以达到让turtle2模仿turtle1完成同样的运动。

3.启动launch文件

为了验证我们的猜想,可以试下启动launch文件看看效果啦。

cd launch
ros2 launch turtlesim_mimic_launch.py

  注意: 这里我们可以直接启动launch文件,如果launch文件在功能包中的话,也可以用如下语法启动:

ros2 launch <package_name> <launch_file_name>

  很快可以看到两个小海龟仿真窗口启动啦,终端中也有如下提示:   ROS2入门教程——11. 创建一个launch文件   为了看到turtle2是否会模仿turtle1,我们需要在让turtle1动起来:

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}}"

  ROS2入门教程——11. 创建一个launch文件   没错,turtle2和turtle1的动作完全一致。  

4.使用rqt_graph观测系统

为了看到更明确的节点关系,我们可以使用之前介绍的rqt_graph工具来观测下系统:

rqt_graph

  ROS2入门教程——11. 创建一个launch文件   这样是不是很清晰,和我们前边的猜想一样,mimic节点订阅turtle1的位姿,然后转换成速度指令发布给turtle2.   好啦,这就是launch文件,可以实现多个节点的配置和启动,我们可以使用python完成launch文件,使用ros2 launch命令启动launch文件。  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS2入门教程——11. 创建一个launch文件
喜欢 (0)

您必须 登录 才能发表评论!

加载中……