【ROS2】初级:CLI工具- 启动节点

目标:使用命令行工具一次启动多个节点。

 教程级别:初学者

 时间:5 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    • 运行启动文件

    • 控制 Turtlesim 节点(可选)

  •  摘要

  •  下一步

 背景

在大多数入门教程中,您每运行一个新节点就会打开一个新终端。随着您创建的系统越来越复杂,同时运行的节点越来越多,不断打开终端并重新输入配置细节变得很繁琐。

启动文件允许您同时启动和配置包含 ROS 2 节点的多个可执行文件

使用 ros2 launch 命令运行单个启动文件将一次性启动您的整个系统——所有节点及其配置。

 先决条件

在开始这些教程之前,请按照 ROS 2 安装页面上的说明安装 ROS 2。

本教程中使用的命令假设您已按照操作系统的二进制包安装指南(Linux 的 Debian 包)进行了安装。如果您是从源代码构建的,仍然可以继续操作,但您的设置文件的路径可能会有所不同。如果您从源代码安装,您也无法使用 sudo apt install ros-<distro>-<package> 命令(在初级教程中经常使用)。

如果您使用的是 Linux 并且还不熟悉 shell,本教程将会有所帮助。

 任务

1. 运行启动文件

打开一个新的终端并运行:

ros2 launch turtlesim multisim.launch.py

这个命令将运行以下启动文件:

f4f02ea6816430e5e667db54c2d4aee5.png

#!/usr/bin/env python3
# 这是一个Python脚本的shebang行,指定使用Python 3解释器执行脚本


# Copyright 2023 Open Source Robotics Foundation, Inc.
# 版权声明,表明该代码的版权归Open Source Robotics Foundation, Inc.所有


#
# Licensed under the Apache License, Version 2.0 (the "License");
# 根据Apache许可证2.0版(“许可证”)授权
# you may not use this file except in compliance with the License.
# 除非符合许可证,否则你不能使用这个文件
# You may obtain a copy of the License at
# 你可以在以下网址获取许可证副本
#
#     http://www.apache.org/licenses/LICENSE-2.0
# 许可证的URL地址
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# 除非适用法律要求或书面同意,依据许可证分发的软件按“原样”提供
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# 不提供任何明示或暗示的担保或条件
# See the License for the specific language governing permissions and
# limitations under the License.
# 详见许可证了解具体的权限和限制


from launch import LaunchDescription
# 从launch模块导入LaunchDescription类
import launch_ros.actions
# 导入launch_ros.actions模块


def generate_launch_description():
# 定义一个名为generate_launch_description的函数
    return LaunchDescription([
    # 返回一个LaunchDescription对象
        launch_ros.actions.Node(
        # 创建一个Node对象
            namespace='turtlesim1', package='turtlesim',
            # 设置命名空间为'turtlesim1',包名为'turtlesim'
            executable='turtlesim_node', output='screen'),
            # 可执行文件为'turtlesim_node',输出到屏幕
        launch_ros.actions.Node(
        # 创建另一个Node对象
            namespace='turtlesim2', package='turtlesim',
            # 设置命名空间为'turtlesim2',包名为'turtlesim'
            executable='turtlesim_node', output='screen'),
            # 可执行文件为'turtlesim_node',输出到屏幕
    ])
    # 结束LaunchDescription对象的定义

 便条

上述启动文件是用 Python 编写的,但您也可以使用 XML 和 YAML 来创建启动文件。您可以在《使用 Python、XML 和 YAML 进行 ROS 2 启动文件》中看到这些不同 ROS 2 启动格式的比较。

这将运行两个 turtlesim 节点:

9c287d172444d38a18cb23948a6d3bb0.png

目前,不用担心这个启动文件的内容。您可以在 ROS 2 启动教程中找到更多关于 ROS 2 启动的信息。https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Launch-Main.html

(可选)控制 Turtlesim 节点

现在这些节点正在运行,您可以像控制任何其他 ROS 2 节点一样来控制它们。例如,您可以通过打开两个额外的终端并运行以下命令,使乌龟朝相反方向行驶:

在第二个终端:

ros2 topic pub  /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

在第三个终端:

ros2 topic pub  /turtlesim2/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"

执行这些命令后,您应该会看到类似以下内容:

5742203361638d1fbcd0bbe825c84f7d.png

摘要

您到目前为止所做的重要意义在于您已经用一个命令运行了两个 turtlesim 节点。一旦您学会编写自己的启动文件,您将能够以类似的方式运行多个节点 - 并设置它们的配置 - 使用 ros2 launch 命令。

有关 ROS 2 启动文件的更多教程,请参见主启动文件教程页面https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Launch/Launch-Main.html。

 下一步

在下一个教程中,记录和回放数据https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Recording-And-Playing-Back-Data/Recording-And-Playing-Back-Data.html,您将了解另一个有用的工具, ros2 bag 。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity配置数据文件】ScriptableObject核心应用

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 专栏交流&#x1f9e7;&…

NASA——quarius(水瓶座) L3 网格化 1 度年土壤湿度,第 5 版

Aquarius L3 Gridded 1-Degree Annual Soil Moisture V005 水瓶座 L3 网格化 1 度年土壤湿度&#xff0c;第 5 版 简介 该数据集包含美国国家航空航天局&#xff08;NASA&#xff09;科学应用卫星&#xff08;SAC-D&#xff09;上的宝瓶座被动微波辐射计得出的第 3 级网格化…

前端面试题5(前端常见的加密方式)

前端常见的加密方式 在前端进行数据加密主要是为了保护用户的隐私和提升数据传输的安全性。前端数据加密可以采用多种方法&#xff0c;以下是一些常见的加密技术和方法&#xff1a; 1. HTTPS 虽然不是直接的前端加密技术&#xff0c;但HTTPS是保障前端与后端数据传输安全的基…

【BUUCTF-PWN】12-get_started_3dsctf_2016

32位&#xff0c;开启了NX保护 执行效果&#xff1a; main函数&#xff1a; 其中gets()函数存在栈溢出&#xff0c;溢出距离为0x38&#xff0c;这里是使用的esp寻址&#xff0c;属于外平栈&#xff0c;不需要覆盖ebp的四个字节。而之前做的题一般都是ebp寻址&#xff0c;…

Golang | Leetcode Golang题解之第216题组合总和III

题目&#xff1a; 题解&#xff1a; func combinationSum3(k int, n int) (ans [][]int) {var temp []intvar dfs func(cur, rest int)dfs func(cur, rest int) {// 找到一个答案if len(temp) k && rest 0 {ans append(ans, append([]int(nil), temp...))return}/…

【Python机器学习】模型评估与改进——二分类指标

目录 1、错误类型 2、不平衡数据集 3、混淆矩阵 与精度的关系。 准确率、召回率与f-分数 分类报告 4、考虑不确定性 5、准确率-召回率曲线 6、受试者工作特征&#xff08;ROC&#xff09;与AUC 二分类可能是实践中最常见的机器学习应用&#xff0c;也是概念最简单的应…

3.Charles抓包工具学习

目录 1.使用Charles抓取https2.将抓包导入到postman3.抓包导入到JMeter4.抓小程序的包-只能电脑4.断点设置-前置断点-修改请求数据5.断点设置-后置断点-修改服务器响应6.Mock设置7.模拟弱网8.如何抓取移动端APP9.简单的压力测试 1.使用Charles抓取https 2.将抓包导入到postman …

开始尝试从0写一个项目--后端(一)

创建文件的目录结构 利用这个界面创建 序号 名称 说明 1 SEMS maven父工程&#xff0c;统一管理依赖版本&#xff0c;聚合其他子模块 2 sems-common 子模块&#xff0c;存放公共类&#xff0c;例如&#xff1a;工具类、常量类、异常类等 3 sems-pojo 子模块&#x…

硅纪元视角 | AI纳米机器人突破癌症治疗,精准打击肿瘤细胞

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天&#xff0c;这几道题我都看懂了&#xff0c;自己也能写出来了&#xff0c;实现思路很重要&#xff0c;万事开头难&#xff0c;希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号&#xff1a;977 不止是在卡尔这里…

深入探讨JavaScript中的队列,结合leetcode全面解读

前言 队列作为一种基本的数据结构&#xff0c;为解决许多实际问题提供了有效的组织和处理方式&#xff0c;对于提高系统的稳定性、可靠性和效率具有重要作用&#xff0c;所以理解队列是很重要的。 本文深入探讨JavaScript中的队列这种数据结构,结合leetcode题目讲解 题目直达…

接口测试工具Postman

Postman Postman介绍 开发API后&#xff0c;用于API测试的工具。在我们平时开发中&#xff0c;特别是需要与接口打交道时&#xff0c;无论是写接口还是用接口&#xff0c;拿到接口后肯定都得提前测试一下。在开发APP接口的过程中&#xff0c;一般接口写完之后&#xff0c;后端…

78110A雷达信号模拟软件

78110A雷达信号模拟软件 78110A雷达信号模拟软件(简称雷达信号模拟软件)主要用于模拟产生雷达发射信号和目标回波信号&#xff0c;软件将编译生成的雷达信号任意波数据下载到信号发生器中&#xff0c;主要是1466-V矢量信号发生器&#xff0c;可实现雷达信号模拟产生。软件可模…

TensorRT-Int8量化详解

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有&#xff1a;y kx b&#xff0c;此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有&#xff1a;y tofp32(toint8(k) * toint8(x)) b&#xff0c;其中int8 * int8结果为in…

SpringBoot的热部署和日志体系

SpringBoot的热部署 每次修改完代码&#xff0c;想看效果的话&#xff0c;不用每次都重新启动代码&#xff0c;等待项目重启 这样就可以了 JDK官方提出的日志框架&#xff1a;Jul log4j的使用方式&#xff1a; &#xff08;1&#xff09;引入maven依赖 &#xff08;2&#x…

头歌资源库(20)最大最小数

一、 问题描述 二、算法思想 使用分治法&#xff0c;可以将数组递归地分割成两部分&#xff0c;直到数组长度为1或2。然后比较这两部分的最大、次大、次小、最小数&#xff0c;最终得到整个数组中的最大两个数和最小两个数。 算法步骤如下&#xff1a; 定义一个函数 findMinM…

uniapp/Android App上架三星市场需要下载所需要的SDK

只需添加以下一个权限在AndroidManifest.xml <uses-permission android:name"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>uniapp开发的&#xff0c;需要在App权限配置中加入以上的额外权限&#xff1a;

Generative Modeling by Estimating Gradients of the Data Distribution

Generative Modeling by Estimating Gradients of the Data Distribution 本文介绍宋飏提出的带噪声扰动的基于得分的生成模型。首先介绍基本的基于得分的生成模型的训练方法&#xff08;得分匹配&#xff09;和采样方法&#xff08;朗之万动力学&#xff09;。然后基于流形假…

2024 年 亚太赛 APMCM (B题)中文赛道国际大学生数学建模挑战赛 |洪水灾害数据分析 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; 完整内容可以在文章末尾领取&#xff01; 该段文字…

HTML内容爬取:使用Objective-C进行网页数据提取

网页爬取简介 网页爬取&#xff0c;通常被称为网络爬虫或爬虫&#xff0c;是一种自动浏览网页并提取所需数据的技术。这些数据可以是文本、图片、链接或任何网页上的元素。爬虫通常遵循一定的规则&#xff0c;访问网页&#xff0c;解析页面内容&#xff0c;并存储所需信息。 …