4.1 啟動(dòng)文件 launch 簡介
4.1 啟動(dòng)文件 launch 簡介
場景
如前所述,在機(jī)器人操作系統(tǒng)中,節(jié)點(diǎn)是程序的基本構(gòu)成單元,一個(gè)完整的、系統(tǒng)性的功能模塊是由若干節(jié)點(diǎn)組成的,啟動(dòng)某個(gè)功能模塊時(shí)可能需要依次啟動(dòng)這些節(jié)點(diǎn),比如:
以機(jī)器人的導(dǎo)航功能為例,涉及的節(jié)點(diǎn)主要有:
底盤驅(qū)動(dòng);
雷達(dá)驅(qū)動(dòng);
攝像頭驅(qū)動(dòng);
imu驅(qū)動(dòng);
地圖服務(wù);
路徑規(guī)劃;
運(yùn)動(dòng)控制;
環(huán)境感知;
定位;
......
并且不同節(jié)點(diǎn)啟動(dòng)時(shí),可以還會涉及到各種參數(shù)的導(dǎo)入、節(jié)點(diǎn)間執(zhí)行邏輯的處理等。
如果使用?ros2 run
指令逐一執(zhí)行節(jié)點(diǎn)的話,顯然效率低下,基于此,ROS2中提供了launch模塊用于實(shí)現(xiàn)節(jié)點(diǎn)的批量啟動(dòng)。
概念
launch 字面意為“啟動(dòng)”、“發(fā)射”,在ROS2中主要用于啟動(dòng)程序。launch模塊由launch文件與?ros2 launch
命令組成,前者用于打包并配置節(jié)點(diǎn),后者用于執(zhí)行l(wèi)aunch文件。
作用
簡化節(jié)點(diǎn)的配置與啟動(dòng),提高程序的啟動(dòng)效率。
準(zhǔn)備工作
1.新建工作空間ws02_tools
,本章后續(xù)編碼實(shí)現(xiàn)都基于此工作空間;
2.終端下進(jìn)入工作空間的src目錄,調(diào)用如下兩條命令分別創(chuàng)建C++功能包和Python功能包。
ros2 pkg create cpp01_launch --build-type ament_cmake --dependencies rclcpp
ros2 pkg create py01_launch --build-type ament_python --dependencies rclpy
3.在使用Python版的launch文件時(shí),涉及的API眾多,為了提高編碼效率,可以在VScode中設(shè)置launch文件的代碼模板,將VScode的配置文件python.json修改為為如下內(nèi)容:

4.1.1 launch 基本使用流程
在 ROS2 中,launch 文件可以使用Python、XML或YAML編寫,不同格式的 launch 文件基本使用流程一致。接下來我們通過一個(gè)案例演示 launch 文件的基本編寫編譯流程,案例需求:編寫并執(zhí)行 launch 文件,可以啟動(dòng)兩個(gè)turtlesim_node
節(jié)點(diǎn)。
實(shí)現(xiàn)步驟如下:
編寫launch文件;
編輯配置文件;
編譯;
執(zhí)行。
1.C++實(shí)現(xiàn)
1.編寫launch文件
功能包c(diǎn)pp01_launch下,創(chuàng)建launch目錄。launch文件可以是python文件、xml文件或yaml文件,不同類型的launch文件可以直接存儲在launch目錄下,或者為了方便管理,我們也可以在launch目錄下新建py、xml和yaml三個(gè)文件夾分別存儲對應(yīng)類型的launch文件,并且建議不同格式的launch文件命名時(shí)分別使用_launch.py
、_launch.xml
、_launch.yaml
或.launch.py
、.launch.xml
、.launch.yaml
作為后綴名。
不同類型的 launch 文件示例如下:
Python文件:py00_base.launch.py

XML文件:xml00_base.launch.xml

YAML文件:yaml00_base.launch.yaml

launch 文件編寫完畢后,其實(shí)已經(jīng)可以直接使用?ros2 launch 文件路徑
?的方式執(zhí)行了,終端中進(jìn)入當(dāng)前工作空間,輸入如下指令:
ros2 launch src/cpp01_launch/launch/py/py00_base.launch.py
但是這種執(zhí)行方式不建議。
2.編輯配置文件
CMakeLists.txt 中添加語句:
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})
無論該功能包的launch目錄下有多少個(gè)launch文件,launch相關(guān)配置只需設(shè)置一次即可。
3.編譯
終端中進(jìn)入當(dāng)前工作空間,編譯功能包:
colcon build --packages-select cpp01_launch
4.執(zhí)行
當(dāng)前工作空間下,啟動(dòng)終端,輸入如下指令:
. install/setup.bash
ros2 run cpp01_launch py00_base.launch.py
該指令運(yùn)行的是 python 格式的 launch 文件,其他兩個(gè)launch文件與之同理。最終,會啟動(dòng)兩個(gè) turtlesim_node 節(jié)點(diǎn)。
2.Python實(shí)現(xiàn)
1.編寫launch文件
功能包py01_launch下,創(chuàng)建launch目錄,launch目錄下新建py、xml和yaml三個(gè)文件夾分別存儲對應(yīng)類型的launch文件,launch 文件實(shí)現(xiàn)與 rclcpp 完全一致。并且也可以使用ros2 launch 文件路徑
的方式執(zhí)行。
2.編輯配置文件
編輯 setup.py 文件,需要在 data_files 屬性中,添加相關(guān) launch 文件的路徑,修改后的內(nèi)容如下:

無論該功能包的launch目錄下有多少個(gè)launch文件,launch相關(guān)配置只需設(shè)置一次即可。
3.編譯
終端中進(jìn)入當(dāng)前工作空間,編譯功能包:
colcon build --packages-select py01_launch
4.執(zhí)行
當(dāng)前工作空間下,啟動(dòng)終端,輸入如下指令:
. install/setup.bash?
ros2 run py01_launch py00_base.launch.py
該指令運(yùn)行的是 python 格式的 launch 文件,其他兩個(gè)launch文件與之同理。最終,會啟動(dòng)兩個(gè) turtlesim_node 節(jié)點(diǎn)。
建議:對于帶有啟動(dòng)文件的功能包,最好在功能包的package.xml
中添加對包ros2launch
的執(zhí)行時(shí)依賴:
<exec_depend>ros2launch</exec_depend>
這有助于確保在構(gòu)建功能包后ros2 launch
命令可用。它還確??梢宰R別不同格式的 launch 文件。

B站有完整的ros系列教程視頻,可以觀看完整內(nèi)容ros課程ROS2理論與實(shí)踐
更多內(nèi)容將在猛獅知識星球社區(qū)更新最新課程,后續(xù)將推出更多優(yōu)質(zhì)內(nèi)容——詳情可關(guān)注猛獅集訓(xùn)營公眾號和猛獅集訓(xùn)營官方網(wǎng)站。