【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 窗口右上角的“调用”按钮来调用该服务。
您将看到在您为x和y输入的坐标处生成一只新海龟(同样采用随机设计)。
如果你刷新rqt中的服务列表,你还会看到,现在除了有新海龟相关的服务,/turtle2/…
还有/turtle1/…
5.2 试用set_pen服务
现在让我们使用/set_pen
服务给 turtle1 一个独特的笔:
r、g和b的值在 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接口,里面定义一个成员变量ÿ…...
安卓录屏使用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)技术的基本原理、特性、发展和应用
何谓射频识别 随着高科技的蓬勃发展,智能化管理已经走进了人们的社会生活,一些门禁卡、第二代身份证、公交卡、超市的物品标签等,这些卡片正在改变人们的生活方式。其实秘密就在这些卡片都使用了射频识别技术,可以说射频识别已成…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...