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

news/2025/2/21 7:23:47/

目标:安装并使用 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 概念。


http://www.ppmy.cn/news/42686.html

相关文章

第一次习题总结

目录 求第K个数 求逆序对的数量 数的三次方根 一维前缀和 二维前缀和&#xff08;子矩阵的和&#xff09; 求第K个数 思路&#xff1a;用快速选择&#xff0c;时间复杂度为O(N) sl和sr是左边和右边数的个数&#xff0c;当k<sl&#xff0c;即倒数第K个数在左边范围内&#x…

96年阿里P7晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

Debian 10配置apt源常见问题

目录 一&#xff1a;配置本地apt源没有发现文件 解决方案 二&#xff1a;apt下载bind9报错E: Package bind9 has no installation candidate 方法一&#xff1a; 方法二&#xff1a;更新不报错但是安装依旧报错E: Package bind9 has no installation candidate 一&#xff…

( “树” 之 DFS) 101. 对称二叉树 ——【Leetcode每日一题】

101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示&#xff1a…

Leetcode.858 镜面反射

题目链接 Leetcode.858 镜面反射 Rating &#xff1a; 1881 题目描述 有一个特殊的正方形房间&#xff0c;每面墙上都有一面镜子。除西南角以外&#xff0c;每个角落都放有一个接受器&#xff0c;编号为 0&#xff0c; 1&#xff0c;以及 2。 正方形房间的墙壁长度为 p&#…

IO流基础

目录 1.FileOutPutStream字节输入流 1.1FileOutPutStream使用 1.1.1创建对象 FileOutPutStream fos new FileOutPutStream("路径或者File对象")&#xff1b; 1.1.2.写数据 调用write方法&#xff0c;参数是int类型&#xff0c;但传入文件中是asci…

C++ 23 实用工具(二)绑定工具

C 23 实用工具&#xff08;二&#xff09;绑定工具 Adaptors for Functions std::bind、std::bind_front、std::bind_back和std::function这四个函数非常适合一起使用。 其中&#xff0c;std::bind、std::bind_front和std::bind_back可以让您即时创建新的函数对象&#xff0c…

计及调度经济性的光热电站储热容量配置方法

目录 1 主要内容 目标函数 光热电站能量传递过程 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序复现《计及调度经济性的光热电站储热容量配置方法》模型&#xff0c;综合考虑火电机组发电成本、光热发电并网消纳的环境效益和运行维护成本、系统旋转备用成本等调度…