1. 使用Python编写Launch
  2. 创建功能包和 launch 文件
mkdir -p chapt5/chapt5_ws/src
cd chapt5/chapt5_ws/src
ros2 pkg create robot_startup --build-type ament_cmake --destination-directory src
mkdir -p src/robot_startup/launch
touch src/robot_startup/launch/example_action.launch.py
  1. 编写 generate_launch_description 函数
# 导入库
from launch import LaunchDescription
from launch_ros.actions import Node
 
def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    action_robot_01 = Node(
        package="example_action_rclcpp",
        executable="action_robot_01"
    )
    action_control_01 = Node(
        package="example_action_rclcpp",
        executable="action_control_01"
    )
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    launch_description = LaunchDescription(
        [action_robot_01, action_control_01])
    # 返回让ROS2根据launch描述执行节点
    return launch_description
  1. 修改 setup.py,将 launch 文件添加到数据文件列表,将会在 build 的时候安装 launch 文件夹中所有 launch 文件
    • 其中,glob 是一个 Python 标准库模块,用于匹配文件路径模式
from setuptools import setup
from glob import glob
import os
 
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']),
        (os.path.join('share', package_name, 'launch'), 
        	glob('launch/*.launch.py')),
    ],
    },
)
  1. 编译运行
colcon build
# source 第五章的工作目录,这样才能找到对应的节点,不信你可以不source试试
source ../../chapt5/chapt5_ws/install/setup.bash
source install/setup.bash 
ros2 launch robot_startup example_action.launch.py 
# 新终端 
ros2 node list # 即可看到两个节点
  1. 用 launch 运行参数节点
    • 通过 launch 传递参数
    • 给节点以不同的命名空间(rclcpprclpy
# 导入库
from launch import LaunchDescription
from launch_ros.actions import Node
 
def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    parameters_basic1 = Node(
        package="example_parameters_rclcpp",
        namespace="rclcpp",
        executable="parameters_basic",
        parameters=[{'rcl_log_level': 40}]
    )
    parameters_basic2 = Node(
        package="example_parameters_rclpy",
        namespace="rclpy",
        executable="parameters_basic",
        parameters=[{'rcl_log_level': 50}]
    )
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    launch_description = LaunchDescription(
        [parameters_basic1, parameters_basic2])
    # 返回让ROS2根据launch描述执行节点
    return launch_description
  1. 编译运行
colcon build
# source 第五章的工作目录,这样才能找到对应的节点,不信你可以不source试试
source ../../chapt5/chapt5_ws/install/setup.bash
source install/setup.bash
ros2 launch robot_startup example_param_rclcpp.launch.py
# 新终端
ros2 node list #即可看到两个节点