ROS2學習筆記之創建啓動文件篇

學習目標:能夠通過啓動文件啓動一個複雜的ROS系統

背景

在前面的教程當中我們每次都要打開兩個終端去啓動節點,今後我們會有越來越多的節點,這種操作將會變得十分無聊。
啓動文件可以同時啓動多個節點,同時對他們進行配置。
通過ros2 launch可以一次啓動所有節點,而且一次對所有節點完成配置

準備條件

需要安裝rqt_graph 和 turtlesim,同時需要一個文本編輯器

學習內容

1. 準備操作

我們創建一個文件夾存儲啓動文件

mkdir launch

我們通過下面的命令創建一個啓動文件,從ros1過來的同學就發現有點東西啊,啓動文件變爲.py了繼續看戲喫瓜

touch launch/turtlesim_mimic_launch.py

2 編寫啓動文件

找一個你最喜歡的文本編輯器打開剛剛創建的文件
我們把下面的內容粘貼到文件中

from launch import LaunchDescription
from launch_ros.actions import Node

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

2.1 啓動文件詳解

這部分不多解釋,學過Python的都知道,首先我們導入點東西和C++include類似

from launch import LaunchDescription
from launch_ros.actions import Node

接下來定義了一個函數

def generate_launch_description():
   return LaunchDescription([

   ])

LaunchDescription描述這個系統結構,一共三個節點,全部來自turtlesim包,我們要實現的功能就是啓動兩個烏龜界面讓其中一個烏龜的動作跟隨另外一個烏龜。
我們接着往下看前面兩部分很簡單就是啓動了兩個烏龜

Node(
    package='turtlesim',
    node_namespace='turtlesim1',
    node_executable='turtlesim_node',
    node_name='sim'
),
Node(
    package='turtlesim',
    node_namespace='turtlesim2',
    node_executable='turtlesim_node',
    node_name='sim'
),

我們可以發現兩個節點只有node_namespace不同,我們可以通過設置命名空間不同的方式同時啓動兩個節點,並且保證話題和節點名字不會發生衝突。
如果沒有命名空間的區分,兩個海龜都接收同一話題的命令,並且在同一個話題上發佈其息,就無法區分兩隻海龜的消息。
最後一個節點也是來自turtlesim包,但是是另外一個可執行文件

Node(
    package='turtlesim',
    node_executable='mimic',
    node_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。這個節點的話題重映射過後訂閱turtlesim1的位置給turtlesim2發送速度,執行效果就會讓海龜二號跟隨海龜一號的動作。

3 ros2 launch

我們通過下面的方式運行這個啓動文件

ros2 launch launch/turtlesim_mimic_launch.py

我們可以通過直接運行一個文件的方式啓動一個launch文件,就像上面那樣,我們還可以啓動一個ros包內的啓動文件語法格式如下 ros2 launch <package_name> <launch_file_name>,在後面的教程當中會慢慢講到這種啓動方式

運行過後我們看到出現了兩個海龜界面,同時終端也有相關消息輸出

[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]

我們給一號海龜發送一個速度指令讓它動起來

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. 用rqt_graph查看節點關係圖

運行命令

rqt_graph

通過這個節點關係圖我們可以很清楚的看到當前ros的節點連接情況
在這裏插入圖片描述

總結

啓動文件是啓動多個節點同時進行節點配置的很方便的形式,我們可以創建一個Python腳本通過ros2 launch來啓動這個腳本進而啓動整個系統。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章