跳转至

Launch

【0】python里Launch启动节点

在功能包新建文件夹launch,在launch文件夹下新建launch文件,例如:test.launch.py,在launch文件中编写python代码,代码模板如下:

import launch
import launch_ros 

def generate_launch_description(): #严格执行的命名规范
    '''
    generate_launch_description 的 Docstring
    '''
    action_node_turlesim_node = launch_ros.actions.Node(
        package='turtlesim',    #功能包名称
        executable='turtlesim_node',# 可执行文件名称
        output='screen'
    )
    action_node_target_manager_node= launch_ros.actions.Node(
        package='pid_control_py',
        executable='target_manager_node',
        output='log'
    )
    action_node_tturtle_control_node = launch_ros.actions.Node(
        package='pid_control_py',
        executable='turtle_control_node',
        output='both'
    )

    return launch.launch_description([ #严格执行的命名规范
        action_node_turlesim_node,
        action_node_target_manager_node,
        action_node_tturtle_control_node,
    ])

在setup.py中添加:

from glob import glob #声明
package_name = 'pid_control_py'

#setup(
    # name=package_name,
    # version='0.0.0',
    # packages=[package_name],
    # data_files=[
    #     ('share/ament_index/resource_index/packages',
    #         ['resource/' + package_name]),
    #     ('share/' + package_name, ['package.xml']),
        ('share/' + package_name+"/launch",glob('launch/*.launch.py')), #添加这一行 ,全局匹配launch文件夹下的所有launch文件
#    ],
    # install_requires=['setuptools'],
    # zip_safe=True,
    # maintainer='root',
    # maintainer_email='root@todo.todo',
    # description='TODO: Package description',

【1】python里Launch传递参数

在launch文件中,可以通过launch_ros.actions.Node的arguments参数传递参数,例如:

   action_declare_arg_xxx = launch.actions.DeclareLaunchArgument("名字", default_value="默认值",description="描述")
    action_node_turlesim_node = launch_ros.actions.Node(
        package='turtlesim',    #功能包名称
        executable='turtlesim_node',# 可执行文件名称
        output='screen',
        parameters=[{'参数名字':launch.substitutions.LaunchConfiguration('名字',default_value='默认值')}] #传递参数
    )
    return launch.LaunchDescription([action_declare_arg_xxx, #严格执行的命名规范记得添加
    action_node_turlesim_node])

调用launch文件时,可以通过--参数名:=参数值的方式传递参数,例如:

ros2 launch pid_control_py test.launch.py 参数名:=参数值

【2】Launch三大组件:动作,替换,条件

动作

动作1:包含其他Launch文件,例如:

from ament_index_python import get_package_share_directory
def generate_launch_description():
    action_include_launch_file = launch.actions.IncludeLaunchDescription(
        launch.launch_description_source.PythonLaunchDescriptionSouce(get_package_share_directory('pid_control_py'),'launch','test.launch.py')
    )

动作2:打印信息,例如:

action_print = launch.actions.LogInfo(
    "打印信息"
)

动作3:执行命令行,例如:ros2 node list

action_execute_command = launch.actions.ExecuteProcess(
    cmd=['ros2','node','list']
)

动作4:定时器,例如:

action_timer = launch.actions.TimerAction(
    period=1.0,
    actions=[action_print]
)

替换

替换1:LaunchConfiguration,例如:

action_declare_arg_xxx = launch.actions.DeclareLaunchArgument("名字", default_value="默认值",description="描述") #声明
 rqt = launch.substitutions.LaunchConfiguration('名字',default_value='默认值') #替换

条件

condition = launch.conditions.IfCondition(rqt),