概要:这篇内容主要介绍如何使用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.pysetup.cfgpackage.xml

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

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

import os
from glob import glob
from setuptools import setuppackage_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(DIRECTORYlaunchDESTINATION 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.actionsdef 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学习笔记22--使用launch启动/监听多个node节点相关推荐

  1. webpack学习笔记(三):监听文件变化并编译

    在上一篇webpack学习笔记中主要认识了webpack配置文件中相关的基础配置和命令的执行.这次学习如何在文件发生变化时自动打包编译. 首先,我们来看一下配置文件 const path = requ ...

  2. Ext.Net学习笔记22:Ext.Net Tree 用法详解

    上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat="server"><Root> ...

  3. Java学习笔记22:并发(2)

    Java学习笔记22:并发(2) 图源:PHP中文网 终止任务 终止线程有一种非常简单的方式:设置一个多线程共享的标记位,子线程用轮询的方式检查这个标记位,如果该标记位显示取消状态,就让子线程退出执行 ...

  4. [编译原理学习笔记2-2] 程序语言的语法描述

    [编译原理学习笔记2-2] 程序语言的语法描述 文章目录 [编译原理学习笔记2-2] 程序语言的语法描述 [2.3.1] 上下文无关文法 [2.3.2] 语法分析树与二义性 [2.3.3] 形式语言鸟 ...

  5. lsnrctl start启动监听很慢(AIX平台)

    今天登陆了一下公司AIX平台的ORACLE测试服务器,没有配置监听,由于手动配置监听后,启动监听,发现启动的时候很慢,日志如下: 欢迎大家加入ORACLE超级群:17115662 免费解决各种ORAC ...

  6. 在centos上,oracle数据库更改IP后无法启动监听,解决方法

    在centos上,oracle数据库更改IP后无法启动监听,解决方法 参考文章: (1)在centos上,oracle数据库更改IP后无法启动监听,解决方法 (2)https://www.cnblog ...

  7. Oracle单机报监听不支持服务,(转)oracle 启动监听 报“监听程序不支持服务” 解决...

    转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下: 启动tnslsnr: 请稍候... TNS ...

  8. Oracle 启动监听命令

    启动监听:lsnrctl start 查看监听:lsnrctl status 停止监听:lsnrctl stop 1.oracle 数据服务器包括:实例进程和数据库:    实例进程包括:memory ...

  9. win7 oracle启动监听,win7系统oracle监听服务无法打开的解决方法

    无论谁在使用电脑的时候都可能会发现oracle监听服务无法打开的问题,oracle监听服务无法打开让用户们很苦恼,这是怎么回事呢,oracle监听服务无法打开有什么简便的处理方式呢,其实只要依照1.如 ...

最新文章

  1. Julie Desk:这个帮你安排会议的AI助手刚刚融了250万欧元
  2. 荒野乱斗角色设计浅谈
  3. 项目奖金一般有多少_全年一次性奖金如何进行纳税筹划?
  4. Python定义点击右上角关闭按钮事件
  5. [leetcode]94.二叉树的中序遍历
  6. 算法提高 解二元一次方程组(java)
  7. matlab LSB算法的三种改进
  8. 代码复现:Copy-Paste 数据增强for 语义分割
  9. MentoHUST的使用教程
  10. iphone 升级后闪退
  11. 西米支付:支付宝/微信支付/银联支付通道的接入介绍
  12. VS2017操做sql server数据库
  13. Typecho Joe 主题 添加访目录
  14. 三步破解IntelliJ IDEA2017
  15. MobPush 创建推送
  16. 研华运动控制卡接线图_运动控制卡说明书
  17. 俄勒冈大学计算机科学专业,2020年俄勒冈大学排名TFE Times美国最佳计算机科学硕士专业排名第68...
  18. 7-2 凑零钱 (30 分)
  19. 思维导图simplemind添加样式预设的方法
  20. GT/s和Gbps的关系

热门文章

  1. python 网页生成pdf_3个步骤教你如何用Python实现网页转PDF
  2. 【JSON】谷歌浏览器JSON可视化插件:JSON-Handle
  3. 在photoshop中,从1寸到24寸照片的大小是多少?
  4. 解决Cadence 17.4软件无法启动,capture cis启动缓慢,打开项目缓慢,allegro 打开程序未响应(即使微软拼音切换兼容模式也无法解决的情况)
  5. 矩阵Kronecker(克罗内克)积
  6. [交易日记]2016-11-24交易笔记
  7. 笛色青青(2010-11 -07)
  8. Geany的所有主题文件
  9. 真无线蓝牙耳机哪个牌子好?最适合打游戏的无线耳机
  10. 关于Windows Server 2012 网络发现启动不了