ROS2- launch的用法-18

1. launch工具

一个机器人系统,往往由很多个不同功能的节点组成,启动一个机器人系统时往往需要启动多个节点,同时根据应用场景和机器人的不同,每个节点还会有不同的配置项。
如果每个节点我们都开一个新终端,敲ros2 run指令并写一堆参数,多么浪费生命.

编写一个类似于脚本的文件来管理节点的启动呢?这个武器就叫launch文件
launch文件允许我们同时启动和配置多个包含 ROS 2 节点的可执行文件

ROS2的launch文件有三种格式,python、xml、yaml。其中ROS2官方推荐的是python方式编写launch文件
Python编写Launch:

mkdir -p chapt5/chapt5_ws/src
cd chapt5/chapt5_ws
ros2 pkg create robot_startup --build-type ament_python --destination-directory src
mkdir -p src/robot_startup/launch
touch src/robot_startup/launch/example_action.launch.py

导入两个库
LaunchDescription,用于对launch文件内容进行描述,
Node,用于声明节点所在的位置。

定一个名字叫做generate_launch_description的函数,ROS2会对该函数名字做识别。

# 导入库
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

用的是ament_cmake类型功能包,所以这里要使用cmake命令进行文件的拷贝

install(DIRECTORY launch
  DESTINATION share/${PROJECT_NAME})

ament_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')),
    ],
    },
)

编译程序
colcon build

source install/setup.bash
ros2 launch robot_startup example_action.launch.py

新终端
ros2 node list #即可看到两个节点

launch 修改与添加参数

vi chapt5/chapt5_ws/src/robot_startup/launch/example_param_rclcpp.launch.py

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

src/robot_startup/launch/example_param_rclcpp.launch.py
编译程序
colcon build

source install/setup.bash
ros2 launch robot_startup example_param_rclcpp.launch.py
新终端
ros2 node list #即可看到两个节点

总结:
launch文件来同时启动多个节点,对节点的一些参数也可以在launch中配置。
launch的更多用法:http://www.robotsfan.com/posts/7a5950c4.html

posted @ 2025-06-12 11:21  jack-chen666  阅读(81)  评论(0)    收藏  举报