當在具有較多節點同時運行的復雜的系統中,打開終端並重新輸入配置細節將變得繁雜。
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/sim
的pose
話題,並將其重新發布為/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

5.總結
launch文件通過許多節點和特定的配置細節簡化了復雜系統的運行,可以使用Python創建launch文件,並使用ros2 launch
命令運行它們。
注意:
與ROS1一樣,同樣可以使用XML和YAML來創建launch文件,可以參考:
Using Python, XML, and YAML for ROS 2 Launch Files — ROS 2 Documentation: Foxy documentation
如果給您帶來幫助,希望能給點個關注,以后還會陸續更新有關機器人的內容,點個關注不迷路~歡迎大家一起交流學習。
都看到這了,點個推薦再走吧~
未經允許,禁止轉載。