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

如果給您帶來幫助,希望能給點個關注,以后還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM