ros笔记06--从零体验ros2中launch系统

news2025/1/6 17:31:17

ros笔记06--从零体验ros2中launch系统

  • 介绍
  • 创建步骤
    • 最基础的 launch 案例
    • 多节点 launch 案例
  • 注意事项
  • 说明

介绍

ROS2系统通常由许多节点组成,这些节点运行在许多不同的进程(甚至不同的机器)上。虽然可以通过 ros2 run 单独运行这些节点,但当节点数量很多的时候就会显得很麻烦。

ROS2中的launch系统旨在使用单个命令自动运行多个节点。它帮助用户描述其系统的配置,然后按照描述执行配置。系统的配置包括运行什么程序,在哪里运行它们,传递什么参数给它们,以及特定于ros的约定,这些约定通过给每个组件提供不同的配置,使得在整个系统中重用组件变得容易。它还负责监视已启动的进程的状态,并报告和/或对这些过程状态的变化作出反应。

上述提到的所有内容都可以在在启动文件中指定,该文件可以用Python,XML或YAML编写。然后可以使用ros2启动命令运行此启动文件,进一步运行指定的所有节点。本文基于python启动配置案例,来体验单节点、多节点等常见的ros2 启动系统的使用方法。

创建步骤

最基础的 launch 案例

  1. 创建py_launch_example包

    继续前几篇ros2博文,当前工作目录依旧为dev_ws
    $ cd dev_ws/src
    $ ros2 pkg create --build-type ament_python --license Apache-2.0 py_launch_example
    
  2. 在 launch目录下新增 my_script_launch.py 文件
    vim launch/my_script_launch.py

    import launch
    import launch_ros.actions
    
    def generate_launch_description():
        return launch.LaunchDescription([
            launch_ros.actions.Node(
                package='demo_nodes_cpp',
                executable='talker',
                name='talker'),
      ])
    
  3. 在setup.py中新增launch相关配置

    import os
    from glob import glob
    # Other imports ...
    
    package_name = 'py_launch_example'
    
    setup(
        # Other parameters ...
        data_files=[
            # ... Other data files
            # Include all launch files.
            (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*')))
        ]
    )
    
  4. 构建测试

    $ colcon build --packages-select py_launch_example
    $ source install/setup.bash
    $ ros2 launch py_launch_example my_script_launch.py
    

    如下,执行launch后talker正常输出Hello World 在这里插入图片描述

多节点 launch 案例

  1. launch目录下新增 turtlesim_mimic_launch.py 文件
    vim launch/turtlesim_mimic_launch.py
    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(
                package='turtlesim',
                namespace='turtlesim1',
                executable='turtlesim_node',
                name='sim'
            ),
            Node(
                package='turtlesim',
                namespace='turtlesim2',
                executable='turtlesim_node',
                name='sim',
                parameters=[
                    {'background_b': 1}
                ]
            ),
            Node(
                package='turtlesim',
                executable='mimic',
                name='mimic',
                remappings=[
                    ('/input/pose', '/turtlesim1/turtle1/pose'),
                    ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
                ]
            )
        ])
    
    默认是蓝色背景,当我们在启动配置 Node.parameters 中设置 background_b:1 后,将会更改默认背景色。
  2. 运行测试
    启动节点
    $ ros2 launch py_launch_example turtlesim_mimic_launch.py
    
    通过rqt_graph可以观察到节点和topic结构如下:
    在这里插入图片描述
    当我们执行ros2 topic pub让第一个小海龟运动后,第二个小海龟也跟着运动请添加图片描述

注意事项

  1. launch 默认识别哪些启动文件?
    官方文档支持python xml yaml 这3种启动文件,因此我们一般使用这3种格式的启动配置文件即可;
    另外我们一般会在setup.py中添加如下内容:
    setup(
        data_files=[
            (os.path.join('share', package_name, 'launch'), glob(os.path.join('launch', '*launch.[pxy][yma]*')))
        ]
    )
    
    通过 glob(os.path.join('launch', '*launch.[pxy][yma]*'))) 可以知道其匹配 launch目录中以*launch.[pxy][yma]*结尾的文件,包括我们的 launch/my_script_launch.py

说明

软件版本
ubuntu24.04 Desktop
ros2 jazzy
python 3.12.4(conda)
参考文档
ros官方文档 Tutorials/Intermediate/Launch/Launch-Main
ros官方文档 Tutorials/Intermediate/Launch/Creating-Launch-Files
ROS 2 Launch System -

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

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

相关文章

【LLM入门】Let‘s reproduce GPT-2 (124M)【完结,重新回顾一下,伟大!】

文章目录 03:43:05 SECTION 4: results in the morning! GPT-2, GPT-3 repro03:56:21 shoutout to llm.c, equivalent but faster code in raw C/CUDA【太牛了ba】03:59:39 summary, phew, build-nanogpt github repo 03:43:05 SECTION 4: results in the morning! GPT-2, GPT-…

计算机毕业设计选题推荐-springboot 基于springboot的宠物健康顾问系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Windows系统下Go安装与使用

step1: 下载go语言SDK 下载地址:https://go.dev/dl/ 下载后选择合适位置安装即可,我选择D盘 在安装完成后,可以通过go env 命令检测是否安装成功。在“命令提示符”界面输入“go env”命令,如果显示如下类似结果则说明…

C++STL初阶(12):stack和queue的初阶实现

1. stack的选型 对于栈的实现是我们非常熟悉的过程: C语言基础数据结构——栈和队列_栈和队列 插入取出数据-CSDN博客 _top表示下标,_capacity表示空间大小: 那么按照我们原来的思路,利用_top和_capacity T*来给stack构形。 temp…

Grok 2携AI图片生成重生

埃隆马斯克&#xff08;Elon Musk&#xff09;的人工智能初创公司xAI推出其最新的AI助手Grok 2的测试版&#xff0c;添加了类似于OpenAI的DALL-E和Google的Gemini的图像生成工具&#xff0c;但对可以生成的图像类型的限制显然较少。<这是其中的一个“亮点”&#xff0c;一些…

【Hot100】LeetCode—234. 回文链表

目录 1- 思路快慢指针链表拆分反转链表 2- 实现⭐234. 回文链表——题解思路 3- ACM 实现 原题连接&#xff1a;234. 回文链表 1- 思路 快慢指针链表拆分反转链表 思路 ①将链表拆分前后两个部分——>找拆分点、②反转后面部分、③根据反转结果&#xff0c;同时利用两个指…

揭秘住宅IP代理:原理、用途及应用分析

在数字化时代&#xff0c;互联网已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着网络环境日益复杂&#xff0c;隐私保护、网络访问限制等问题愈发凸显。住宅IP代理作为一种新兴的网络技术解决方案&#xff0c;正逐渐成为众多跨境业务和网络活动的重要工具。…

打卡第46天------动态规划(回文串)

想要快点把每一道题给练会,在面试的时候跟面试官对答如流,这家公司实在是让我没有继续待下去的欲望了,天天祈祷上Di,求Shang帝帮助我实现两份工作的无缝衔接。交托仰望。 今天 我们就要结束动态规划章节了,动态规划的题目还是挺难的,贪心和动态规划对我来说都比较困难,对…

Jeecgboot3.6.3的vue3版本的一种flowable动态增加一个用户任务节点的方法(三)后端代码实现

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 这部分主要讲后端实现部分 1、增加一个AddTaskVo 类型,提供新增任务需要的数据结构 import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.D…

10结构型设计模式——桥接模式

一、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是结构型的设计模式之一。桥接模式基于类的最小设计原则&#xff0c;通过使用封装&#xff0c;聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象&#xff08;abstraction&#xff09;与行为实…

PNG的存储方式[计算机原理]

块的基本理论 众所周知&#xff0c;所有的信息在计算机中以位的形式存在&#xff08;0|1&#xff09;8位是一个字节&#xff0c;可以表示成两个16进制数&#xff0c;例如0xFC因为4位对应一个16进制数嘛。PNG这种图片也不例外&#xff0c;它也是由位组成的&#xff0c;不过我们…

利用Redis获取权限的多种方式

更多实战内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10333.html Redis是我们在实战中经常接触到的一款数据库&#xff0c;因其在前期打点中被利用后可直接影响服务器安全所以在攻防过程中也备受红队关注&#xff0c;在本文中会重点分享一…

【java】Java Cryptography Extension (JCE)

在Java中&#xff0c;我们可以使用Java Cryptography Extension (JCE) 来实现加密和解密工具和技术。以下是一些常见的加密和解密技术及其示例代码&#xff1a; 1.使用AES加密和解密 package org.example.Test05;import javax.crypto.Cipher; import javax.crypto.spec.Secre…

高效记录与笔记整理的策略:工具选择、结构设计与复习方法

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【赵渝强老师】基于RBF的HDFS联邦架构

在最新的Hadoop版本中又实现了基于Router的联盟架构&#xff0c;并且在这个架构之上还实现了许多增强集群管理能力的特性。Router将挂载表从客户端中抽离了出来&#xff0c;解决了ViewFS存在的问题。   视频讲解如下&#xff1a; 基于RBF的HDFS联邦架构 【赵渝强老师】基于R…

基于Mediepipe的手势识别系统 | OpenCV | Mediapipe | C++ | QT | Python | C# | Unity

基于Mediapipe的手势识别系统 OpenCV、Mediapipe C (QT)、Python (PyCharm)、C# (Visual Studio) Unity 3D 登录界面 图片手势识别 视频文件手势识别 摄像头实时手势识别 演示视频 基于Mediapipe的手势识别系统

ESP32 分区表介绍

前言 个人邮箱&#xff1a;zhangyixu02gmail.com关于分区表&#xff0c;很多人看了很多资料很可能依旧是一脸懵逼。不知道各位有没有玩过 EEPROM&#xff0c;他可以断电保存数据。这里你也可以理解为分区表将 Flash 中划分出来了一个 EEPROM。虽然这样说从专业的角度是毫无疑问…

Ilya Sutskever 2023年伯克利大学演讲回顾:无监督学习与GPT的数学基础

引言 在2023年&#xff0c;OpenAI联合创始人之一的Ilya Sutskever在伯克利大学进行了一次极具影响力的演讲。这场演讲虽然内容复杂晦涩&#xff0c;但却被认为是人工智能发展历史上的一个重要里程碑。在演讲中&#xff0c;Sutskever深入探讨了无监督学习的数学依据&#xff0c…

即插即用的3D神经元注意算法

在快速发展的人工智能领域&#xff0c;科技的进步往往源于对复杂问题的突破性解决方案。如今&#xff0c;我们正站在一种激动人心的技术创新的前沿——即插即用的3D神经元注意算法。这一前沿技术不仅为计算神经科学提供了全新的视角&#xff0c;也为人工智能的未来打开了新的大…

elementplus 二次封装 select 自定义指令上拉加载更多 完美解决 多次接口调用 重新加载数据多次调用!!!

ps: 我封装的 select 实现了&#xff1a;1、上拉加载更多。2、远程搜索。3、单选多选。4、二次回显之前选择的数据。5、option 里面显示的内容自定义 如果有您想要实现的功能 可以私聊我 本文只讲解上拉触底加载更多 效果&#xff1a;&#xff08;名字都是测试数据 随便乱写…