- 使用Python编写Launch
- 创建功能包和 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
- 编写
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
- 修改
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')),
],
},
)
- 编译运行
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 # 即可看到两个节点
- 用 launch 运行参数节点
- 通过 launch 传递参数
- 给节点以不同的命名空间(
rclcpp 和 rclpy)
# 导入库
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
- 编译运行
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 #即可看到两个节点