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

目录

  • 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(DIRECTORYlaunchDESTINATION share/${PROJECT_NAME}/
    )
    

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

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

    from launch import LaunchDescription
    from launch_ros.actions import Nodedef 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_pyexec: node_launch_clientname: launch_client_py- node:pkg: turtlesimexec: turtlesim_nodename: 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.mzph.cn/diannao/19625.shtml

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

相关文章

采用java18+vue语言+springboot开发的家政上门服务平台源码,(平台管理端+用户端+服务端全套源码)

采用java18vue语言springboot开发的家政上门服务平台源码&#xff0c;&#xff08;平台管理端用户端服务端全套源码&#xff09; 家政管理平台系统是运用现代计算机和网络技术&#xff0c;集信息网、服务网为一体&#xff0c;对社区家政需求信息汇集整理、综合处理&#xff0c;…

重生之 SpringBoot3 入门保姆级学习(11、日志的进阶使用)

重生之 SpringBoot3 入门保姆级学习&#xff08;11、日志的进阶使用&#xff09; 3.2.4 文件输出3.2.5 日志文档的归档与切割 3.2.4 文件输出 配置 application.properties # 日志文件名 如果不写路径默认就是在项目根路径建立 demo.log 文件 推荐写法 D:\\demo.log 路径 文…

OSError: [Errno 117] Structure needs cleaning

一 问题描述 OSError: [Errno 117] Structure needs cleaning: /tmp/pymp-wafeatri 我重新使用SSH登录也会提示这个类似问题 二 解决方法 2.1 尝试删除报错的文件 &#xff08;想直接看最终解决方法的可忽略此处&#xff09; sudo rm -rf /tmp/pymp-wafeatri 此种方法只能保证…

CISCN 2023 初赛 被加密的生产流量

题目附件给了 modbus.pcap 存在多个协议 但是这道题多半是 考 modbus 会发现 每次的 Query 末尾的两个字符 存在规律 猜测是base家族 可以尝试提取流量中的数据 其中Word Count字段中的22871 是10进制转16进制在转ascii字符串 先提取 过滤器判断字段 tshark -r modbus.pcap …

jenkins插件之plot

plot是一个生成图表的插件&#xff0c;这里我用于可视化phploc统计的数据 插件安装 进入 Dashboard --> 系统管理 --> 插件管理 --> Available plugins 搜索plot安装生成phploc分析数据 Dashboard --> 您的项目 --> Configuration点击 Build Steps点击 增加构…

振弦采集仪在岩土工程固结沉降监测中的应用研究

振弦采集仪在岩土工程固结沉降监测中的应用研究 岩土工程固结沉降是指土体在受到外力作用下&#xff0c;由于土体颗粒之间的重排结构&#xff0c;导致土体体积缩小和沉降的过程。固结沉降的监测对于岩土工程的设计和施工具有重要的意义&#xff0c;而振弦采集仪作为一种先进的…

物联网——TIM定时器、PWM驱动呼吸灯、舵机和直流电机

定时器概念&#xff08;常用于输出PWM波形&#xff0c;驱动电机&#xff09; 时间脉冲数时钟周期&#xff1b; 这里的脉冲数6553665536&#xff0c;支持定时器级联&#xff0c;从而延长定时 定时器类型 基本定时器原理图&#xff08;UI:更新中断&#xff0c; U:更新事件&#…

入门flask:Python后端开发的首选框架

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;从零开始学习弗拉斯克 二、弗拉斯克的微框架哲学 三、弗拉斯克的核心…

知识维权维权不是低价治理的唯一方法

控价对于品牌来说确实是一个重要的环节&#xff0c;它旨在维护品牌形象和市场秩序&#xff0c;防止渠道出现低价、窜货等不正当竞争行为。整个控价过程确实需要包括前期的数据监测、治理动作以及后期的数据分析&#xff0c;以确保控价的全面性和有效性。 在治理低价链接方面&a…

kali自带--DNS路由--信息搜集

目录 DNS信息搜集 whois fierce dnsenum 路由信息搜集 DNS信息搜集 whois whois 域名 --域名注册的时候填的基本信息. fierce 域名的多级域名? 搜索引擎-谷歌搜索 whois 枚举/递归查询 dnsenum dnsenum 域名 -f 文件名 路由信息搜集 icmp经常ping不通--所以kali出了个tcp的…

【稳定检索/投稿优惠】2024年语言、文化与艺术发展国际会议(LCAD 2024)

2024 International Conference on Language, Culture, and Art Development 2024年语言、文化与艺术发展国际会议 【会议信息】 会议简称&#xff1a;LCAD 2024大会时间&#xff1a;2024-08-10截稿时间&#xff1a;2024-07-27(以官网为准&#xff09;大会地点&#xff1a;中国…

Rainbond 携手 TOPIAM 打造企业级云原生身份管控新体验

TOPIAM 企业数字身份管控平台&#xff0c; 是一个开源的IDaas/IAM平台、用于管理账号、权限、身份认证、应用访问&#xff0c;帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS 系统的所有身份&#xff0c;实现一个账号打通所有应用的服务。 传统企业 IT 采用烟囱…

源码编译安装LNMP

1、LNMP 包含&#xff1a;linux、Nginx、Mysql、php LNMP的工作原理 由客户端发送页面请求给Nginx&#xff0c;Nginx会根据location匹配用户访问请求的URL路径判断是静态还是动态&#xff0c;静态的一般是以 .html .htm .css .shtml结尾&#xff0c;动态的一般是以 .php .jsp…

水位监测站的工作原理

TH-SW2在雨季&#xff0c;河道和湖泊的水文信息监测对于防洪减灾、水资源管理和环境保护等方面具有至关重要的意义。水文监测站作为实现这一目标的基础设施&#xff0c;发挥着关键作用。水文监测站是观测及搜集河流、湖泊、水库等水体的水文、气象资料的基层水文机构。在雨季&a…

harbor -- docker私有仓库安装配置

1 安装docker-compose $ curl -L "https://get.daocloud.io/docker/compose/releases/download/v1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ chmod x /usr/local/bin/docker-compose 2 安装配置harbor $ wget https://g…

Java基础语法——字符串(String/StringBuilder/Stringjoiner)

String Java的String类是不可变的&#xff0c;意味着一旦创建&#xff0c;其值就不能被改变。String类提供了丰富的API来操作字符串。 以下是一些常用的方法&#xff1a; 构造方法&#xff1a; 有以下几种常见的&#xff1a; public class stringlearn {public static void…

AI 赋能前端 -- 文本内容概要生成

幸福不在于你获得了什么,而在于你比他人多获得了什么 是比较出来的 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 OpenAILangChainRust/WebAssemblyWeb Workerreact+ts+vite配置环境变量(env)因为,行文字数所限,有些概…

渗透课程第二阶段--Part1--信息收集

目录 一. 为什么要做信息收集&#xff1f; 渗透测试的流程 信息收集包括的内容 学习框架&#xff1a; 二. 分类 1. 域名相关信息 域名&#xff08;Domain Name&#xff09;是什么 域名的分类 域名联系人信息 子域名信息 域名DNS信息 2. IP相关信息 ping/nslookup …

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一)

整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;一&#xff09; 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff08;二&#xff09; 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试&#xff0…

使用element的提示框并修改css

使用el-tooltip来做提示框&#xff1a; <el-tooltip popper-class"popper" content"敬请期待" placement"right"><div><i class"iconfont icon-lianjie-01"></i><span>输入链接</span></div&…