4.2 launch之Python實(shí)現(xiàn)
本節(jié)主要介紹launch文件的Python實(shí)現(xiàn)語法。
4.2.1 節(jié)點(diǎn)設(shè)置
launch 中需要執(zhí)行的節(jié)點(diǎn)被封裝為了 launch_ros.actions.Node 對象。
需求:launch 文件中配置節(jié)點(diǎn)的相關(guān)屬性。
示例:
在 cpp01_launch/launch/py 目錄下新建 py01_node.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:
1.Node使用語法1

上述代碼會創(chuàng)建一個 turtlesim_node 節(jié)點(diǎn),設(shè)置了若干節(jié)點(diǎn)屬性,并且節(jié)點(diǎn)關(guān)閉后會自動重啟。
package:功能包;
executable:可執(zhí)行文件;
namespace:命名空間;
name:節(jié)點(diǎn)名稱;
exe_name:流程標(biāo)簽;
respawn:設(shè)置為True時,關(guān)閉節(jié)點(diǎn)后,可以自動重啟。
2.Node使用語法2

上述代碼會創(chuàng)建一個 turtlesim_node 節(jié)點(diǎn),并導(dǎo)入背景色相關(guān)參數(shù)。
parameters:導(dǎo)入?yún)?shù)。
parameter 用于設(shè)置被導(dǎo)入的參數(shù),如果是從 yaml 文件加載參數(shù),那么需要先準(zhǔn)備 yaml 文件,在功能包下新建 config 目錄,config目錄下新建 t2.yaml 文件,并輸入如下內(nèi)容:

注意,還需要在 CMakeLists.txt 中安裝 config:

3.Node使用語法3

上述代碼會創(chuàng)建一個 turtlesim_node 節(jié)點(diǎn),并將話題名稱從 /turtle1/cmd_vel 重映射到 /cmd_vel。
remappings:話題重映射。
4.Node使用語法4

上述代碼會創(chuàng)建一個 rviz2 節(jié)點(diǎn),并加載了 rviz2 相關(guān)的配置文件。
該配置文件可以先啟動 rviz2 ,配置完畢后,保存到 config 目錄并命名為 my.rviz。
arguments:調(diào)用指令時的參數(shù)列表。
5.Node使用語法5

上述代碼會創(chuàng)建一個 turtlesim_node 節(jié)點(diǎn),并在指令調(diào)用時傳入?yún)?shù)列表。
ros_arguments:相當(dāng)于 arguments 前綴 --ros-args。
4.2.2 執(zhí)行指令
launch 中需要執(zhí)行的命令被封裝為了 launch.actions.ExecuteProcess 對象。
需求:在 launch 文件中執(zhí)行 ROS2 命令,以簡化部分功能的調(diào)用。
示例:
在 cpp01_launch/launch/py 目錄下新建 py02_cmd.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:

上述代碼用于執(zhí)行 cmd 參數(shù)中的命令,該命令會在 turtlesim_node 中生成一只新的小烏龜。
cmd:被執(zhí)行的命令;
output:設(shè)置為 both 時,日志會被輸出到日志文件和終端,默認(rèn)為 log,日志只輸出到日志文件。
shell:如果為 True,則以 shell 的方式執(zhí)行命令。
4.2.3 參數(shù)設(shè)置
參數(shù)設(shè)置主要涉及到參數(shù)的聲明與調(diào)用兩部分,其中聲明被封裝為 launch.actions.DeclareLaunchArgument,調(diào)用則被封裝為 launch.substitutions import LaunchConfiguration。
需求:啟動turtlesim_node節(jié)點(diǎn)時,可以動態(tài)設(shè)置背景色。
示例:
在 cpp01_launch/launch/py 目錄下新建 py03_args.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:

上述代碼會使用DeclareLaunchArgument對象聲明三個參數(shù),且每個參數(shù)都有參數(shù)名稱以及默認(rèn)值。
name:參數(shù)名稱;
default_value:默認(rèn)值。
parameters=[{"background_r": LaunchConfiguration(variable_name="background_r"), "background_g": LaunchConfiguration("background_g"), "background_b": LaunchConfiguration("background_b")}]
上述代碼會使用LaunchConfiguration對象獲取參數(shù)值。
variable_name:被解析的參數(shù)名稱。
launch文件執(zhí)行時,可以動態(tài)傳入?yún)?shù),示例如下:
ros2 launch cpp01_launch py03_args.launch.py background_r:=200 background_g:=80 background_b:=30
如果執(zhí)行l(wèi)aunch文件時不手動傳入?yún)?shù),那么解析到的參數(shù)值是聲明時設(shè)置的默認(rèn)值。
4.2.4 文件包含
在 launch 文件中可以包含其他launch文件,需要使用的API為:launch.actions.IncludeLaunchDescription 和 launch.launch_description_sources.PythonLaunchDescriptionSource。
需求:新建 launch 文件,包含 4.2.3 中的 launch 文件并為之傳入設(shè)置背景色相關(guān)的參數(shù)。
示例:
在 cpp01_launch/launch/py 目錄下新建 py04_include.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:

上述代碼將包含一個launch文件并為launch文件傳參。
在 IncludeLaunchDescription 對象中:
launch_description_source:用于設(shè)置被包含的 launch 文件;
launch_arguments:元組列表,每個元組中都包含參數(shù)的鍵和值。
在 PythonLaunchDescriptionSource 對象中:
launch_file_path:被包含的 launch 文件路徑。
4.2.5 分組設(shè)置
在 launch 文件中,為了方便管理可以對節(jié)點(diǎn)分組,分組相關(guān)API為:launch.actions.GroupAction和launch_ros.actions.PushRosNamespace。
需求:對 launch 文件中的多個 Node 進(jìn)行分組。
示例:
在 cpp01_launch/launch/py 目錄下新建 py05_group.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:

上述代碼將創(chuàng)建兩個組,兩個組使用了不同的命名空間,每個組下包含了不同的節(jié)點(diǎn)。
在 GroupAction 對象中,使用的參數(shù)為:
actions:action列表,比如被包含到組內(nèi)的命名空間、節(jié)點(diǎn)等。
在 PushRosNamespace 對象中,使用的參數(shù)為:
namespace:當(dāng)前組使用的命名空間。
4.2.6 添加事件
節(jié)點(diǎn)在運(yùn)行過程中會觸發(fā)不同的事件,當(dāng)事件觸發(fā)時可以為之注冊一定的處理邏輯。事件使用相關(guān)的 API 為:launch.actions.RegisterEventHandler、launch.event_handlers.OnProcessStart、launch.event_handlers.OnProcessExit。
需求:為 turtlesim_node 節(jié)點(diǎn)添加事件,事件1:節(jié)點(diǎn)啟動時調(diào)用spawn服務(wù)生成新烏龜;事件2:節(jié)點(diǎn)關(guān)閉時,輸出日志信息。
示例:
在 cpp01_launch/launch/py 目錄下新建 py06_event.launch.py 文件,輸入如下內(nèi)容:

代碼解釋:

上述代碼為 turtle 節(jié)點(diǎn)注冊啟動事件和退出事件,當(dāng) turtle 節(jié)點(diǎn)啟動后會執(zhí)行 spwn 節(jié)點(diǎn),當(dāng) turtle 節(jié)點(diǎn)退出時,會輸出日志文本:“turtlesim_node退出!”。
對象 RegisterEventHandler 負(fù)責(zé)注冊事件,其參數(shù)為:
event_handler:注冊的事件對象。
OnProcessStart 是啟動事件對象,其參數(shù)為:
target_action:被注冊事件的目標(biāo)對象;
on_start:事件觸發(fā)時的執(zhí)行邏輯。
OnProcessExit 是退出事件對象,其參數(shù)為:
target_action:被注冊事件的目標(biāo)對象;
on_exit:事件觸發(fā)時的執(zhí)行邏輯。
LogInfo 是日志輸出對象,其參數(shù)為:
msg:被輸出的日志信息。

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