ROS2从入门到精通2-1:launch多节点启动与脚本配置

news2024/11/16 1:42:14

目录

  • 0 专栏介绍
  • 1 ROS2的启动脚本优化
  • 2 ROS2多节点启动案例
    • 2.1 C++架构
    • 2.2 Python架构
  • 3 其他格式的启动文件
    • 3.1 `.yaml`启动
    • 3.2 `.xml`启动

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 ROS2的启动脚本优化

在ROS从入门到精通1-3:ROS运行管理与常用配置文件中我们介绍到ROS1的.launch文件是待启动节点的管理容器,优化了多个节点的启动流程,其本质上是一个.xml文件。

在ROS2中,launch文件依然用于启动多个ROS节点以及它们之间的通信,不同在于:

  • 组织架构:在ROS1中,.launch文件使用.xml格式编写,定义了节点、参数、命名空间等信息,具有较为静态的结构;在ROS2中,launch文件使用Python编写,通过Python脚本的方式来启动节点和设置参数,因此可以编写复杂的逻辑,支持条件语句、循环等,提供了更高的扩展性和可定制性;
    组织结构:

  • 启动速度:ROS1的.launch文件在启动时可能会有一定的延迟,特别是在启动大型系统时;ROS2的launch文件相对更快速,启动时间更短,这得益于ROS2架构的一些优化。

总的来说,经过ROS2的启动脚本优化,使得系统的启动和管理更加便捷和高效,也更适合复杂系统的部署和管理。

2 ROS2多节点启动案例

实验目标:一次性启动以下节点:

  • turtlesim仿真器
  • turtlesim生成节点

2.1 C++架构

文件结构如下所示

<pkg>
├── build
├── install
├── log
└── src
    └── pkg_name
        ├── CMakeLists.txt
        ├── launch
        ├── package.xml
        └── src

按以下步骤设置启动脚本

  • 添加package依赖关系:在package.xml清单文件中,添加对依赖项的声明

    <exec_depend>ros2launch</exec_depend>
    
  • 添加CMakeLists编译信息:在CMakeLists.txt文件的ament_package()之前添加

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

    目的是把launch目录添加到运行时的share文件夹

  • launch目录编写launch.py文件,本例为

    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():        
        return LaunchDescription([              
            Node(                                 
                package='launch_lab',         
                executable='launch_lab_client', 
            ),
            Node(
                package='turtlesim',
                executable='turtlesim_node',
                name='turtle_sim',
            ),
        ])
    

    其中最关键的Node对象用于在启动文件中定义一个节点。它的参数包括:

    • package<str>,表示节点所在的ROS2功能包的名称;
    • executable<str>,表示在给定包中的可执行文件的名称,在CMakeLists.txt中由install定义,在setup.py中由entry_points定义,详情请复习ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法);
    • name[str],用于指定节点的名称。如果未指定将使用可执行文件的名称;
    • namespace[str],用于指定节点的命名空间。命名空间是一种组织节点的方式,可以帮助避免节点名称的冲突;
    • output[str],用于指定节点的输出应该如何处理。例如,可以将其设置为screen,以便将节点的输出打印到屏幕上;
    • parameters[list],用于指定节点的ROS2参数。每个参数都是一个字典,其中包含参数的名称和值;
    • remappings[list],用于指定话题的重映射。每个重映射都是一个元组,其中包含原始主题的名称和新主题的名称;
    • arguments[list],用于指定传递给可执行文件的命令行参数。
  • 运行launch.py文件

    ros2 launch <pkg_name> <launch.py>
    

在这里插入图片描述

2.2 Python架构

文件结构如下所示

<pkg>
├── build
├── install
├── log
└── src
    └── launch_lab_py
        ├── launch
        ├── launch_lab_py
        ├── package.xml
        ├── resource
        ├── setup.cfg
        └── setup.py

按以下步骤设置启动脚本:

  • 添加setup.py安装信息:在setup.py文件的data_files入口添加
    data_files=[
        ('share/ament_index/resource_index/packages',
            ['resource/' + package_name]),
        ('share/' + package_name, ['package.xml']),
        (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*.launch.py'))),
    ],
    
    目的是把launch目录添加到运行时的share文件夹
  • launch目录编写launch.py文件,与2.1节相同
  • 运行launch.py文件
    ros2 launch <pkg_name> <launch.py>
    

在这里插入图片描述

3 其他格式的启动文件

ROS2也支持其他文件格式的启动方式,如下所示,对这些格式语法不熟悉的请看ROS2从入门到精通0-5:CMakeLists与setup.py编写(附常用配置文件语法)

3.1 .yaml启动

编写以下启动文件

launch:
  - node: 
      pkg: launch_lab_py
      exec: node_launch_client
      name: launch_client_py
  - node:
      pkg: turtlesim
      exec: turtlesim_node
      name: turtle_sim

运行启动脚本

ros2 launch launch_lab_py launch_lab.launch.yaml

3.2 .xml启动

编写以下启动文件

<launch>
    <node pkg="launch_lab_py" exec="node_launch_client" name="launch_client_py" />
    <node pkg="turtlesim" exec="turtlesim_node" name="turtle_sim" />
</launch>

运行启动脚本

ros2 launch launch_lab_py launch_lab.launch.xml

在这里插入图片描述

完整代码通过下方博主名片联系获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1717085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 中的 Zset 数据结构详解

目录 用法 1. 增 2. 删 3. 查 4. 交&#xff0c;并 编码方式 应用场景 Redis 中的 Zset&#xff08;有序集合&#xff09;是一种将元素按照分数进行排序的数据结构。与上篇写的SetRedis 中的 Set 数据结构详解不同&#xff0c;Zset 中的每个元素都关联一个浮点数类型的…

QT C++ 基于word模板 在书签位置写入文字和图片

如果你有按模版批量自动化操作word文件的需求&#xff0c;那么本文能给你一定的帮助。 它能满足你程序自动化生成报表的需求。常常用于上位机、测试仪器的软件中。 需要你你自己做个word模版文档&#xff0c;添加2个书签。点按钮&#xff0c;会按照你的模板文档生成一个同样的…

如何使用 Midjourney 进行 UI/UX 设计

图片由Midjourney创建 UI/UX 设计中的 AI 艺术彻底改变了游戏规则&#xff0c;开辟了惊人的可能性。Midjourney 可以在几秒钟内启动大量设计选项&#xff0c;让您的工作变得更轻松、更快捷。 在本文中&#xff0c;我将向您展示一些为 UI/UX 设计创建 AI 艺术的技巧。 要事第…

TH方程学习(3)

一、编程实现 根据论文给出的案例&#xff0c;使用TH方程进行数值仿真 1.初始化条件 %% 参考文献<New State Transition Matrix for Relative Motion on an Aribitrary Elliptical Orbit> %% 作者 Yamanaka Koji clc;clear global miu Re miu 3.986e5; Re 6378.137;…

数据挖掘与机器学习——关联规则与协同过滤

目录 推荐算法的目的 如何进行推荐&#xff1a; 关联规则 关联规则挖掘&#xff1a; 应用&#xff1a; 案例&#xff1a;啤酒与尿布 定义&#xff1a; 关联规则的度量&#xff1a; 支持度 置信区间 度量 关联规则挖掘 定义 步骤 apriori算法 定律&#xff1a; …

「手把手prompt1」相关介绍

「手把手prompt1」相关介绍 在人工智能领域迅速发展的当下&#xff0c;“prompt” 这个术语正逐渐成为焦点。本文将带您深入了解prompt的本质&#xff0c;以及它如何影响我们与AI系统的互动。您将学习到&#xff0c;通过精确的指令设计&#xff0c;可以引导AI系统产出精确和有…

GEYA格亚GRT8-M多种功能时间继电器交流AC220V DC24V延时断开小巧

品牌 GEYA 型号 GRT8-M1 AC/DC12-240 产地 中国大陆 颜色分类 GRT8-M1 A220,GRT8-M1 AC/DC12-240,GRT8-M2 A220,GRT8-M2 AC/DC12-240 GRT8-M&#xff0c;多功能型&#xff0c;时间继电器&#xff1a;LED指示灯&#xff0c;触头容量大&#xff0c;电压超宽&#xff0c;阻…

Ollama本地运行 Codestral-22B-v0.1

Ollama本地运行 Codestral-22B-v0.1 0. 引言1. 运行 codestral:22b-v0.1-q8_02. 简单测试下它的代码能力 0. 引言 Mixtral 5月30日发布了 Codestral-22B-v0.1。 Codestrall-22B-v0.1 在 80 多种编程语言的多样化数据集上进行训练&#xff0c;包括最流行的语言&#xff0c;例如…

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 DESCRIBE/DESC 以表格的形式展示表2.2 SHOW CREATE TABLE 以SQL语句的形式展示表 【 3. MySQL 修改数据表 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头添加字段在中间添加字段 3.3 修改/删除…

【多线程开发 3】从源码到实践CompletableFuture

【多线程开发 3】从源码到实践CompletableFuture 2024年5月22日 本文将从以下几个点讲解CompletableFuture&#xff1a; 前身 是什么&#xff1f; 可以用来做什么&#xff1f; 源码原理 实战 其他包装类 前身 CompletableFuture的依赖如图所示&#xff1a; 所以我打…

二叉树的顺序结构及实现(堆的实现)

一.二叉树的顺序结构&#xff1a; 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆 ( 一种二叉树 ) 使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统 虚拟进程地址…

C++入门3——类与对象2(类的6个默认成员函数)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数的概念 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 析构函数的特性 4.拷贝构造函数 4.1 拷贝构造函数的概念 4.2 拷贝构造函数的特性 5.赋值运算符重载函数 5.1运算符重载函数 5.2 赋值运算符重…

探索文档解析技术,推动大模型训练与应用

探索文档解析技术&#xff0c;推动大模型训练与应用 0. 前言1. CCIG 20241.1 会议简介1.2 大模型技术及其前沿应用论坛1.3 走进合合信息 2. 大模型时代2.1 大模型的发展与应用2.2 大模型面临的挑战 3. 文档解析技术3.1 文档解析技术难点3.2 TextIn 文档解析算法流程 4. 大模型时…

UE5 Http Server

前言 最近要用UE 作为一个服务器去接收来自外部的请求&#xff0c;从而在UE中处理一些内容&#xff0c;但是之前只做过请求&#xff0c;哪整过这玩意&#xff0c;短期内还得出结果&#xff0c;那怎么搞嘞&#xff0c;本着省事的原则就找找呗&#xff0c;有没有现成的&#xff0…

【基础算法总结】位运算

位运算 1.基础位运算2.常见用法总结3.面试题 01.01. 判定字符是否唯一4.丢失的数字5.两整数之和6.只出现一次的数字 II7.面试题 17.19. 消失的两个数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励…

CCIG 2024:合合信息文档解析技术突破与应用前景

目录 背景当前大模型训练和应用面临的问题训练Token耗尽训练语料质量要求高LLM文档问答应用中文档解析不精准 合合信息的文档解析技术1. 具备多文档元素识别能力2. 具备版面分析能力3. 高性能的文档解析4. 高精准、高效率的文档解析文档多板式部分示例 文档解析典型技术难点元素…

Go Modules 使用

文章参考https://blog.csdn.net/wohu1104/article/details/110505489 不使用Go Modules&#xff0c;所有的依赖包都是存放在 GOPATH /pkg下&#xff0c;没有版本控制。如果 package 没有做到完全的向前兼容&#xff0c;会导致多个项目无法运行(包版本需求不同)。 于是推出了g…

JVM学习-类加载过程(一)

概述 在Java中数据类型分为基本数据类型和引用数据类型&#xff0c;基本数据类型由虚拟机预先定义&#xff0c;引用数据类型则需要进行类的加载按Java虚拟机规范&#xff0c;从class文件加载到内存中的类&#xff0c;到类卸载出内存为止&#xff0c;它的整个生命周期包含以下7…

Java 异常处理中try-catch块、finally子句以及自定义异常的使用

Java 异常处理是 Java 语言中非常重要的一部分&#xff0c;用来处理程序运行过程中可能发生的各种异常情况&#xff0c;确保程序的稳定性和可靠性。 一、Java 异常处理概述 异常是程序运行过程中出现的非正常情况。Java 使用异常类&#xff08;Exception 类及其子类&#xff…

建WordPress主题官网模板

蓝色的中文WordPress企业模板 https://www.zhanyes.com/qiye/6305.html 暗红色WordPress律师事务所网站模板 https://www.zhanyes.com/qiye/23.html 红色大banner图WordPress外贸网站模板 https://www.zhanyes.com/waimao/27.html