ROS2——通过launch文件启动一个节点

launch文件用来批量启动文件(想来大家是知道滴)。

前言

首先,ros2功能包下创建文件夹——launch;

接着,launch文件夹下创建xxx.launch.py文件;

最后,在文件中敲代码。

1、先来个简单例程

# 导入库
# LaunchDescription,用于对launch文件内容进行描述
from launch import LaunchDescription
# Node,用于声明节点所在的位置,就是交代想运行的节点在哪个位置
from launch_ros.actions import Node

def generate_launch_description():
    """launch内容描述函数,由ros2 launch 扫描调用"""
    # 这部分就是告诉系统啊,我要运行的节点在yolo_detect_2d文件中,而yolo_detect_2d这个文件
    # 在yolov5_ros2这个包中
    camera_driver = Node(
        # 替换yolov5_ros2,为你想运行的节点所在包的名字
        package="yolov5_ros2", 
        # 替换yolo_detect_2d为你运行的节点所在执行文件的名字
        executable="yolo_detect_2d" 
    )
    # 创建LaunchDescription对象ld,用于描述launch文件
    # 低(通)俗点说,就是系统知道了我们想要运行的节点的位置,然后通过LaunchDescription函数运行
    ld = LaunchDescription()
    ld.add_action(camera_driver) 
    # 返回让ROS2根据launch描述执行节点
    return ld

具体解释在代码中了。

然后呢,由于系统运行的是install目录下的launch文件,而不是我们编写的src文件夹中的,因而要

2、拷贝launch文件到install

操作如下:

如果,我们用的是

2.1 ament_cmake类型功能包,

要使用cmake命令进行文件的拷贝,即在CMakeLists.txt文件中加入以下代码

install(
  DIRECTORY launch  config param maps
  DESTINATION share/${PROJECT_NAME}
)
# 以上的四行
ament_package()

如果是

2.2 ament_python类型功能包,

setup.py文件中加入以下代码:

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

最后,编译、source、运行即可。

3、我要运行多个节点

from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
    # 第一个节点
    node1 = Node(
        package='package1-name',
        executable='executable1-name',
    )
    # 第二个节点
    node2 = Node(
        package='package2-name',
        executable='executable2-name',
    )
    # 第三个节点
    node3 = Node(
        package='package3-name',
        executable='executable3-name',
    )
    ld = LaunchDescription()
    ld.add_action(node1)
    ld.add_action(node2)
    ld.add_action(node3)
    return ld

4、豪华套餐——节点相关所有配置

example-node = Node(
    package='package-name', #节点所在的功能包
    namespace='package-namespace', #命名空间。如果存在同名节点,这一选项会有用
    executable='execute-name/script-name.py', #表示要运行的可执行文件名或脚本名字.py
    parameters=[{'parameter-name': parameter-value}], #参数
    arguments=['-xxx', xxx,  '-xxx', xxx ], #启动参数
    output='screen', #用于将节点信息打印到屏幕
    name='node-name' #表示启动后的节点名,可以没有
    remappings=[ #重映射
        ('/xxx/xxx-new', '/xxx/xxx-old'),
	]
)

详细,参考ROS2——教你写新版Launch文件 | 范子琦的博客

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值