当前位置: 首页 > news >正文

【ROS2指南-2】入门 turtlesim 和 rqt

目标:安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。

教程级别:初学者

时间: 15分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 安装turtlesim

    • 2 启动turtlesim

    • 3 使用turtlesim

    • 4 安装rqt

    • 5 使用 rqt

    • 6 重新映射

    • 7 关闭turtlesim

  • 概括

  • 下一步

  • 相关内容

背景

Turtlesim 是一个用于学习 ROS 2 的轻量级模拟器。它说明了 ROS 2 在最基本的层面上做了什么,让你了解你以后将用真实的机器人或机器人模拟做什么。

rqt 是 ROS 2 的 GUI 工具。在 rqt 中所做的一切都可以在命令行上完成,但它提供了一种更简单、更用户友好的方式来操作 ROS 2 元素。

本教程涉及核心 ROS 2 概念,例如节点、主题和服务的分离。所有这些概念将在后面的教程中详细说明;现在,您只需设置工具并感受一下。

先决条件

之前的教程,配置您的 ROS 2 环境,将向您展示如何设置您的环境。

任务

1 安装turtlesim

与往常一样,首先在新终端中获取设置文件,如上一教程中所述。

为您的 ROS 2 发行版安装 turtlesim 包:

sudo apt updatesudo apt install ros-dashing-turtlesim

检查包是否安装:

ros2 pkg executables turtlesim

上面的命令应该返回 turtlesim 的可执行文件列表:

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

2 启动turtlesim

要启动 turtlesim,请在终端中输入以下命令:

ros2 run turtlesim turtlesim_node

模拟器窗口应该会出现,中间有一只随机的乌龟。

在命令下的终端中,您将看到来自节点的消息:

[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

在这里您可以看到您的默认海龟名称是turtle1,以及它生成的默认坐标。

3 使用turtlesim

打开一个新终端,现在您将运行一个新节点来控制第一个节点中的海龟:

ros2 run turtlesim turtle_teleop_key

此时您应该打开三个窗口:一个正在运行的终端turtlesim_node、一个正在运行的终端turtle_teleop_key和 turtlesim 窗口。排列这些窗口,以便您可以看到 turtlesim 窗口,但也可以激活终端运行,turtle_teleop_key以便您可以在 turtlesim 中控制海龟。

使用键盘上的箭头键来控制乌龟。它会在屏幕上移动,使用它附带的“笔”画出它到目前为止所走的路径。

PS:按箭头键只会使乌龟移动一小段距离然后停止。这是因为,实际上,如果操作员与机器人失去连接,您不希望机器人继续执行指令。

您可以使用以下命令查看节点及其关联的服务、主题和操作list

ros2 node list
ros2 topic list
ros2 service list
ros2 action list

您将在接下来的教程中了解有关这些概念的更多信息。由于本教程的目标只是获得 turtlesim 的一般概述,我们将使用 rqt(ROS 2 的图形用户界面)更仔细地查看服务。

4 安装rqt

打开一个新的终端来安装rqt及其插件:

sudo apt updatesudo apt install ros-dashing-rqt*

运行 rqt:

rqt

5 使用 rqt

第一次运行 rqt 后,窗口将是空白的。不用担心,只需从顶部的菜单栏中选择Plugins > Services > Service Caller 。

PS:rqt 可能需要一些时间才能找到所有插件本身。如果您点击Plugins,但没有看到Services或任何其他选项,您应该关闭 rqt,在您的终端中输入命令:rqt --force-discover

使用服务下拉列表左侧的刷新按钮确保您的 turtlesim 节点的所有服务都可用。

单击“服务”下拉列表以查看 turtlesim 的服务,然后选择 /spawn 服务。

5.1 尝试spawn服务

让我们使用 rqt 来调用该/spawn服务。你可以从它的名字猜到它/spawn会在 turtlesim 窗口中创建另一个海龟。

给新海龟起一个唯一的名字,比如双击Expression列中的空单引号。可以看到这个表达式对应的是name值,类型是string

输入海龟产卵的新坐标,例如:x = 1.0 y = 1.0

PS:如果你尝试生成一个与现有海龟同名的新海龟,就像你的默认海龟一样turtle1,你将在运行的终端中收到一条错误消息turtlesim_node

[ERROR] [turtlesim]: A turtle named [turtle1] already exists

要生成 turtle2,您必须通过单击rqt 窗口右上角的“调用”按钮来调用该服务。

您将看到在您为xy输入的坐标处生成一只新海龟(同样采用随机设计)。

如果你刷新rqt中的服务列表,你还会看到,现在除了有新海龟相关的服务,/turtle2/…

还有/turtle1/…

5.2 试用set_pen服务

现在让我们使用/set_pen服务给 turtle1 一个独特的笔:

rgb的值在 0 到 255 之间,将设置 turtle1 绘制时使用的笔的颜色,而width设置线条的粗细。

要让 turtle1 绘制一条明显的红线,请将r的值更改为 255,并将width的值更改为 5。不要忘记在更新值后调用服务。

如果你回到正在运行的终端turtle_teleop_node并按下箭头键,你会看到 turtle1 的笔已经改变了。

您可能已经注意到无法移动 turtle2。您可以通过将 turtle1 的cmd_vel主题重新映射到 turtle2 来完成此操作。

6 重新映射

在新终端中运行:

ros2 run turtlesim turtle_teleop_key turtle1/cmd_vel:=turtle2/cmd_vel

现在您可以在该终端处于活动状态时移动 turtle2,在运行 的另一个终端turtle_teleop_key处于活动状态时移动 turtle1。

7 关闭turtlesim

要停止模拟,您可以在终端和teleop 终端中输入:

Ctrl + C

概括

使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。

下一步

现在您已经启动并运行了 turtlesim 和 rqt,并且了解了它们的工作原理,让我们在下一个教程“了解 ROS 2节点”中深入了解第一个核心 ROS 2 概念。

相关文章:

【ROS2指南-2】入门 turtlesim 和 rqt

目标:安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。 教程级别:初学者 时间: 15分钟 内容 背景 先决条件 任务 1 安装turtlesim 2 启动turtlesim 3 使用turtlesim 4 安装rqt 5 使用 rqt 6 重新映射 7 关闭turtlesim …...

Python 进阶指南(编程轻松进阶):四、起个好名字

原文:http://inventwithpython.com/beyond/chapter4.html 计算机科学中最困难的两个问题是命名事物、缓存失效引起错误."这个经典的笑话,出自利昂班布里克之手,并基于菲尔卡尔顿的一句话,包含了一个真理的核心:很…...

STL容器适配器之<priority_queue>

文章目录测试环境priority_queue介绍头文件模块类定义对象构造元素访问元素插入和删除容器大小迭代器其他函数测试环境 系统:ubuntu 22.04.2 LTS 64位 gcc版本:11.3.0 编辑器:vsCode 1.76.2 priority_queue介绍 容器适配器。支持在末端插入…...

线程——线程同步

案例:卖票 需求:某电影院目前正在上映国产大片,共有100张票,而它有三个窗口卖票,请设计一个程序模拟该电影院卖票 思路: 定义一个类SellTicket实现Runnable接口,里面定义一个成员变量&#xff…...

安卓录屏使用VirtualDisplay虚拟屏幕;MediaRecorder,媒体录影机;

1.跟截屏一样,判断权限,然后在onActivityResult里面给mediaProjection赋能; 2.初始化录像机: //初始化Recorder录像机 fun initRecorderStart() { //新建Recorder val displayMetrics DisplayMetrics() val width displayMetri…...

Java FileChannel文件的读写实例

一、概述: 文件通道FileChannel是用于读取,写入,文件的通道。FileChannel只能被InputStream、OutputStream、RandomAccessFile创建。使用fileChannel.transferTo()可以极大的提高文件的复制效率,他们读和写直接建立了通道&#x…...

2023 年男生还推荐报计算机专业吗?

计算机专业确实是一个非常热门的专业,就业前景也很广阔。 但是,近些年随着各个大学对计算机专业及其相关专业疯狂扩招,而且每年的毕业人口都在增多,行业是根本容纳不下的,就业竞争力度也急剧上升。因此,选…...

【华为OD机试真题】积木最远距离(相同数字的积木游戏1)(javapython)

相同数字的积木游戏1 知识点数组循环map 时间限制:1s 空间限制:256MB 限制语言:不限 题目描述: 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数…...

STM32F103RCT6驱动SG90舵机-完成正反转角度控制

一、SG90舵机介绍 SG90是一种微型舵机,也被称为伺服电机。它是一种小型、低成本的直流电机,通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点,因此在各种小型机械…...

【4.13(补)】二叉搜索树的遍历、插入、删除

文章目录二叉搜索树的最近公共祖先二叉搜索树中的插入操作删除二叉搜索树中的节点二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 因为二叉搜索树是有序的,第一次找到p和q中间的值,就是最近的公共祖先…...

Web 攻防之业务安全:Callback自定义测试(触发XSS漏洞)

Web 攻防之业务安全:Callback自定义测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所提…...

Java访问底层操作系统

native方法定义: 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机…...

Python 进阶指南(编程轻松进阶):十六、面向对象编程和继承

原文:http://inventwithpython.com/beyond/chapter16.html 定义一个函数,并从几个地方调用它,可以省去复制和粘贴源代码的麻烦。不复制代码是一个很好的实践,因为如果你需要修改它(无论是为了修复一个错误还是添加新特…...

【计算机系统结构】第一章 计算机系统结构基本概念

文章目录第一章 计算机系统结构基本概念1.1 计算机系统结构的概念1.2 计算机体系结构的发展1.3 系统结构中并行性的发展1.4 系统结构的设计1.5 定量分析技术基础第一章 计算机系统结构基本概念 课程内容 A I P S N 工业革命 1.1 计算机系统结构的概念 引言 第一台通用计算机 …...

e2fsprogs logsave Ubuntu 安装失败 unable to make backup link of ‘./usr/bin/chattr‘

最近给服务器从 Ubuntu 18.04 LTS 升级到 20.04 LTS,过程中崩溃,重新尝试执行,提示依赖错误。这时候 apt install 所有的东西都会报错,提示依赖不满足。(这里的报错忘了复制了)执行 apt upgrade 也是一样。…...

在排序数组中查找元素的第一个和最后一个位置(二分查找进阶)

在写这个题目之前需要大家自行看一下我之前写的博客有关二分查找思想,如何判断什么时候使用二分查找以及边界值的确定:二分查找思想力扣实例_徐憨憨!的博客-CSDN博客 题目:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定…...

1 Nginx跨域配置

跨域问题在之前的单体架构开发中,其实是比较少见的问题,除非是需要接入第三方SDK时,才需要处理此问题。但随着现在前后端分离、分布式架构的流行,跨域问题也成为了每个Java开发必须要懂得解决的一个问题。 跨域问题产生的原因 产…...

ChatGTP如此强大,我们普通人如何利用它来赚钱?

我从效率提升的角度,分享了我这段时间看到的、用到的,以及思考的一些内容。 最近这段时间,我算是密集的学习。不得不说,优质的资料在推特和油管上特别多,看科技大佬的分享真是一种享受。 很多大神也会录制各种详细的…...

常见的九种大数据分析模型

常见的9种大数据分析模型分别为: 事件分析、 属性分析、 渠道分析、 Session分析、 留存分析、 归因分析、 漏斗分析、 路径分析、 分布分析 1、【事件分析】 事件分析,是指用户在 APP、网站等应用上发生的行为,即何人,何时&…...

射频识别(RFID)技术的基本原理、特性、发展和应用

何谓射频识别 随着高科技的蓬勃发展,智能化管理已经走进了人们的社会生活,一些门禁卡、第二代身份证、公交卡、超市的物品标签等,这些卡片正在改变人们的生活方式。其实秘密就在这些卡片都使用了射频识别技术,可以说射频识别已成…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...