ros2学习笔记22--使用launch启动/监听多个node节点(代码片段)

鸿_H 鸿_H     2022-12-15     676

关键词:

概要:这篇内容主要介绍如何使用launch启动/监听多个node节点

环境:ubuntu20.04,ros2-foxy,vscode

最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现

3.4使用launch启动/监听多个node节点(原文:https://docs.ros.org/en/foxy/Tutorials/Launch-system.html

>>教程>>使用launch启动/监听多个node节点

你正阅读的是ros2较老版本(Foxy),但仍然支持的说明文档.想查看最新版本的信息,请看galactic版本链接( https://docs.ros.org/en/galactic/Tutorials.html

使用launch启动/监听多个node节点

目录

1.ros2的launch系统
2.编写ros2的launch文件
2.1python包
2.2c++包
2.3编写launch文件
2.4用法
3.ros2的launch概念的案例
4.文档

1.ros2的launch系统

ros2launch系统负责帮助使用者描述他们系统配置,然后保证系统如同描述运行.系统配置包括,运行哪些项目,在哪里运行,传什么参数给项目;并且,ros特点使得复用整个系统模块变得容易,只要给(launch系统)不同的配置(参数)即可实现.该系统也负责已启动进程的监听,对这些进程的状态进行报道或者对其变化作出反应.

python写的launch文件,可以启动或者终止不同的节点,也可以作为触发器来处理各种事情.提供这个构架的包是launch_ros,其底层使用非ros特有的launch架构.

这个设计文档(https://design.ros2.org/articles/roslaunch.html ,个人打开失败)详细说明了ros2launch系统的(被设计的)目标(当前并不是所有的功能都能用).

2.编写ros2的launch文件

如果你还没有准备,你一定要快速过一遍如何创建ros2包课程.在ros2中,创建launch文件一种方式是使用python,该文件可以被ros2命令行界面工具ros2 launch执行.在工作空间里面,我们先使用ros2 pkg create <pkg-name> --dependencies [deps]创建一个ros2包,并且创建一个名为launch的新目录.

2.1 python包

对应python包,你的目录应该长这样子:

src/
    my_package/
        launch/
        setup.py
        setup.cfg
        package.xml

为了保证colcon可以找得到launch文件,我们需要借助setup的参数data_files来告诉它,这些launch文件的python设置工具.

在我们setup.py文件里面(可以大概这么写):

import os
from glob import glob
from setuptools import setup

package_name = 'my_package'

setup(
    # Other parameters ...
    data_files=[
        # ... Other data files
        # Include all launch files. This is the most important line here!
        (os.path.join('share', package_name), glob('launch/*.launch.py'))
    ]
)

2.2 c++包

如果你是用c++包,我们只要调整一下CMakeLists.txt文件,添加:

# Install launch files.
install(DIRECTORY
  launch
  DESTINATION share/$PROJECT_NAME/
)

这部分内容到文件的末尾(但这部分内容要在ament_package()之前).

2.3编写launch文件

在你的launch目录里面,创建一个.launch.py后缀文件,例如my_script.launch.py.这个.launch.py并不是launch文件后缀的专有要求.另一个常用的操作是_launch.py,这在初级水平launch文件课程有使用到.如果你非得修改这个后缀,一定要相应调整你的setup.pyglob()参数.

你的launch文件一定要定义generate_launch_description(),其会返回launch.LaunchDescription()以供ros2 launch指令使用的(也就是说,没定义的话,ros2 launch指令启动launch文件会失败).

import launch
import launch.actions
import launch.substitutions
import launch_ros.actions


def generate_launch_description():
    return launch.LaunchDescription([
        launch.actions.DeclareLaunchArgument(
            'node_prefix',
            default_value=[launch.substitutions.EnvironmentVariable('USER'), '_'],
            description='Prefix for node names'),
        launch_ros.actions.Node(
            package='demo_nodes_cpp', executable='talker', output='screen',
            name=[launch.substitutions.LaunchConfiguration('node_prefix'), 'talker']),
    ])

2.4用法

虽然launch文件可以写成单独运行的脚本,但在ros里面,典型用法是让launch文件被ros2工具所引用.

运行colcon buildsource了环境变量之后,你应该应该能够启动一个launch文件,如下:

ros2 launch my_package script.launch.py

3.ros2的launch概念的案例

这个案例(https://github.com/ros2/launch_ros/blob/foxy/launch_ros/examples/lifecycle_pub_sub_launch.py)的launch文件启动了两个节点,其中一个管理声明周期(生命周期节点).当他们处于过渡状态时,通过launch_ros 启动的生命周期节点,自动地发射事件.通过launch架构,这些事件随后可以被执行.例如,发送一些其他事件(如,请求其他状态转换,生命周期节点通过launch_ros自动启动事件处理程序)或者触发其他操作(例如启动另一个节点)

在上述例子中,生命周期节点talker会发出不同种类的转换请求,并且当生命周期节点处于合适状态时,它的转换事件是会被,例如启动的listener节点,作出反应.

4.文档

这个launch文档(https://github.com/ros2/launch/blob/foxy/launch/doc/source/architecture.rst)提供更多launch_ros所使用的概念细节.

额外的文档/功能例子即将推出.在此期间看看这些源码(https://github.com/ros2/launch).

其他

个人认为重点:

launch文件使用python编写,注意其中编写样式;对于python包和c++包,launch文件对包配置文件要求.

这课程是在等毕业证那十几天搞的,室友问,现在在线翻译这么强大,为啥还在这里瞎折腾呢?我说,我的目地是好好认真看一下,了解一下,自己折腾,目前是我想到最好的办法来获得最佳效果,即使这翻译有点别扭,哈哈哈.

#####################
不积硅步,无以至千里
好记性不如烂笔头
感觉有点收获的话,麻烦大大们点赞收藏哈

ros2学习笔记9--创建一个launch文件(代码片段)

概要:这篇主要介绍launch文件环境:ubuntu20.04,ros2-foxy,vscode最后没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.1.9创建一个launch文件(原文:https://docs.ros.org/en/foxy/Tutorials/Launch-Files... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ros2中的launch文件入门的6个疑问(代码片段)

本文记录了ROS2中launch文件学习过程中我个人觉得重要的6个基本问题,和大家分享,希望可以帮到初学者。疑问1:launch文件有什么用?通过launch文件,ROS2可以同时启动许多节点,这样简化了用命令行去多次启动... 查看详情

ROS2:如何将参数从一个启动文件传递到子启动文件

...传递到子启动文件【英文标题】:ROS2:Howtopassargumentsfromonelaunchfiletoachildlaunchfile【发布时间】:2019-08-2816:22:43【问题描述】:我有一个主要的bringup.launch.py启动文件,其启动描述符包括child.launch.py作为子启动文件,如下所示:fromam... 查看详情

如何在 ROS2 中启动带参数的节点?

...2420:32:43【问题描述】:将ros1包迁移到ros2,但不知道如何使用ros2中的参数启动。对于ros1,我有一个启动文件,它引用了一个配置文件,并且从cpp代码中我使用node.getParam启动文件:<launch><argname="node_name 查看详情

ros2学习笔记10--使用ros2bag进行录制和回放数据(代码片段)

概要:这篇主要介绍使用ros2bag进行录制和回放数据环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.1.10录制和回放数据(原文:https://docs.ros.or... 查看详情

ros2学习笔记17--在类中使用参数(c++)(代码片段)

概要:这篇主要介绍在类中使用参数(C++)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.9在类中使用参数(C++)(... 查看详情

ros2学习笔记26--使用快速dds查找服务作为查找协议(社区贡献)(代码片段)

概要:这篇内容主要介绍使用快速DDS查找服务作为查找协议(社区贡献)环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.2使用快速DDS查找服务作为... 查看详情

ros2学习笔记12--创建ros2包(代码片段)

概要:这篇主要介绍如何创建ros2包环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.2创建自己第一个ros2包(原文:https://docs.ros.org/en/foxy/Tutor... 查看详情

ros2学习笔记16--详述ros2接口(代码片段)

概要:这篇主要进一步介绍ros2接口.环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.8拓展ros2接口(原文:https://docs.ros.org/en/foxy/Tutorials... 查看详情

“ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py​​”导致找不到包

...tfound【发布时间】:2021-02-2816:30:12【问题描述】:这些是使用的命令:$source/opt/ros/fox 查看详情

ros2学习笔记25--ros2话题统计编写教程(c++)(代码片段)

概要:这篇内容主要介绍用c++编写能够统计话题的侦听器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.1ros2话题统计教程(C++)(... 查看详情

ros2学习笔记19--探索ros2doctor工具(代码片段)

概要:这篇主要介绍ros2doctor工具环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.11探索ros2doctor工具(原文:https://docs.ros.org/en/foxy/Tutorials/Get... 查看详情

监听器-启动会初始化表学习笔记:(代码片段)

遇到问题:数据库连接问题;后面采用固定写法:解决问题/**c3p0取得数据源*/publicstaticDataSourcegetDataSource()throwsExceptionComboPooledDataSourcecpds=newComboPooledDataSource();cpds.setDriverClass("com.mysql.jdbc.Driver");cpds.setJ 查看详情

ros2学习笔记15--创建自定义ros2接口文件msg和srv(代码片段)

概要:这篇主要介绍如何创建定制型ros2接口文件msg和srv环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.7创建自定义ros2消息msg和srv文件(原文&#x... 查看详情

ros2学习笔记20--创建一个action(代码片段)

概要:这篇内容主要介绍如何创建一个action环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.3.1创建一个动作(原文:https://docs.ros.org/en/foxy/Tutori... 查看详情

ros2学习笔记11--工作空间的创建(代码片段)

概要:这篇主要介绍工作空间的创建环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.1创建工作空间(原文:https://docs.ros.org/en/foxy/Tutorials/Wor... 查看详情