赞
踩
launch文件用来批量启动文件(想来大家是知道滴)。
首先,ros2功能包下创建文件夹——launch;
接着,launch文件夹下创建xxx.launch.py文件;
最后,在文件中敲代码。
- # 导入库
- # 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文件夹中的,因而要
操作如下:
如果,我们用的是
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、运行即可。
- 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
- 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'),
- ]
- )
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。