当前位置:   article > 正文

ROS2——通过launch文件启动一个节点_launch。py文件中启动节点

launch。py文件中启动节点

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

前言

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

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

最后,在文件中敲代码。

1、先来个简单例程

  1. # 导入库
  2. # LaunchDescription,用于对launch文件内容进行描述
  3. from launch import LaunchDescription
  4. # Node,用于声明节点所在的位置,就是交代想运行的节点在哪个位置
  5. from launch_ros.actions import Node
  6. def generate_launch_description():
  7. """launch内容描述函数,由ros2 launch 扫描调用"""
  8. # 这部分就是告诉系统啊,我要运行的节点在yolo_detect_2d文件中,而yolo_detect_2d这个文件
  9. # 在yolov5_ros2这个包中
  10. camera_driver = Node(
  11. # 替换yolov5_ros2,为你想运行的节点所在包的名字
  12. package="yolov5_ros2",
  13. # 替换yolo_detect_2d为你运行的节点所在执行文件的名字
  14. executable="yolo_detect_2d"
  15. )
  16. # 创建LaunchDescription对象ld,用于描述launch文件
  17. # 低(通)俗点说,就是系统知道了我们想要运行的节点的位置,然后通过LaunchDescription函数运行
  18. ld = LaunchDescription()
  19. ld.add_action(camera_driver)
  20. # 返回让ROS2根据launch描述执行节点
  21. return ld

具体解释在代码中了。

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

2、拷贝launch文件到install

操作如下:

如果,我们用的是

2.1 ament_cmake类型功能包,

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

  1. install(
  2. DIRECTORY launch config param maps
  3. DESTINATION share/${PROJECT_NAME}
  4. )
  5. # 以上的四行
  6. ament_package()

如果是

2.2 ament_python类型功能包,

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

  1. from setuptools import setup
  2. from glob import glob
  3. import os
  4. setup(
  5. name=package_name,
  6. version='0.0.0',
  7. packages=[package_name],
  8. data_files=[
  9. ('share/ament_index/resource_index/packages',
  10. ['resource/' + package_name]),
  11. ('share/' + package_name, ['package.xml']),
  12. # 就是加入这行
  13. (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
  14. ],
  15. },
  16. )

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

3、我要运行多个节点

  1. from launch import LaunchDescription
  2. from launch_ros.actions import Node
  3. def generate_launch_description():
  4. # 第一个节点
  5. node1 = Node(
  6. package='package1-name',
  7. executable='executable1-name',
  8. )
  9. # 第二个节点
  10. node2 = Node(
  11. package='package2-name',
  12. executable='executable2-name',
  13. )
  14. # 第三个节点
  15. node3 = Node(
  16. package='package3-name',
  17. executable='executable3-name',
  18. )
  19. ld = LaunchDescription()
  20. ld.add_action(node1)
  21. ld.add_action(node2)
  22. ld.add_action(node3)
  23. return ld

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/555478
推荐阅读
相关标签
  

闽ICP备14008679号