【ROS2入门】介绍 eloquent 版本中 turtlesim 和 rqt 使用

news2025/1/15 6:56:51

        大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们Jeston TX1 核心模块,JetPack_4.6.3刷机后环境中安装了 ROS2 eloquent版本,并完成了初步的验证,这一章,我们依托Turtlesim演示节点来逐步展开。

        Turtlesim是用于学习ROS 2的轻量级模拟器。它说明了ROS 2在最基本的层面上所做的工作,让您了解以后将如何使用真实的机器人或机器人模拟。rqt是ROS2的GUI工具。在rqt中完成的所有操作都可以在命令行上完成,但它提供了一种更简单、更用户友好的方式来操作ROS2元素。本教程涉及核心ROS2概念,如节点、主题和服务的分离。所有这些概念将在以后的教程中详细阐述;本章,你只需设置工具并了解它们。

目录

一、硬件平台和测试环境说明

二、介绍Turtlesim

2.1 Turtlesim 安装 (确认已经安装的可以跳过)

2.2 Turtlesim 启动

2.3 Turtlesim 键盘控制运动

三、介绍rqt(ROS2的图形用户界面)

3.1 rqt安装(确认已经安装,可以跳过)

3.2 rqt 使用

3.3 尝试派生服务(Try the spawn service)

3.4 尝试set_pen服务(Try the set_pen service)

3.5 Remapping

一、硬件平台和测试环境说明

我自己使用的是TX1核心模块,安装ubuntu 18.04 的环境,采用了官方的最小系统安装,并完成了一些换源等基础操作。Jeston TX1 核心模块,JetPack_4.6.3刷机后,安装jtop。

jtop

  

nvidia@nvidia-desktop:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.5 LTS
Release:    18.04
Codename:   bionic

安装完ROS2 eloquen版本后,打印环境变量:

printenv | grep -i ROS
LD_LIBRARY_PATH=/opt/ros/eloquent/opt/yaml_cpp_vendor/lib:/opt/ros/eloquent/opt/rviz_ogre_vendor/lib:/opt/ros/eloquent/lib/aarch64-linux-gnu:/opt/ros/eloquent/lib
AMENT_PREFIX_PATH=/opt/ros/eloquent
ROS_VERSION=2
ROS_LOCALHOST_ONLY=0
ROS_PYTHON_VERSION=3
PYTHONPATH=/opt/ros/eloquent/lib/python3.6/site-packages
PATH=/opt/ros/eloquent/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ROS_DISTRO=eloquent

以上最基本确保了,我们的系统已经正确的安装了ROS2 eloquen版本。

注意:后续的所有指令都只是适用次环境,对于更高版本,有些命令未必适用,请自行匹配好对应的版本。

二、介绍Turtlesim

2.1 Turtlesim 安装 (确认已经安装的可以跳过)

安装

sudo apt update
​
sudo apt install ros-eloquent-turtlesim

确认是否已经安装

ros2 pkg executables turtlesim

有如下打印,就说明已经安装

2.2 Turtlesim 启动

打开终端,输入如下命令:我是使用nomachine 链接了EHub_tx1_tx2_E100系统。

ros2 run turtlesim turtlesim_node

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

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

nvidia@ubuntu:~$ 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]

2.3 Turtlesim 键盘控制运动

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

ros2 run turtlesim turtle_teleop_key

 此时,你应该已经打开三个窗口:运行turtlesim_node的终端、运行turtle_teleop_key的终端和turtlesim窗口。排列这些窗口,以便您可以看到turtlesim窗口。

 同时还可以激活运行turtle_teleop_key的终端,以便您能够控制turtlesim中的乌龟使用键盘上的箭头键控制乌龟。它将在屏幕上移动,使用其附带的“笔”绘制到目前为止所遵循的路径。

 注意:按一下箭头键只会使乌龟移动一小段距离,然后停止。长按,小乌龟会一直运动,直到边界。这么设定是因为,实际上,如果例如操作员失去了与机器人的连接,您不希望机器人继续执行指令。

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

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

你会在接下来的教程中了解有关这些概念的更多信息。由于本章节的目标仅是对turtlesim进行总体概述,因此我们将使用rqt(ROS2的图形用户界面)来进一步了解服务。

三、介绍rqt(ROS2的图形用户界面)

3.1 rqt安装(确认已经安装,可以跳过)

打开新终端以安装rqt及其插件:

sudo apt update
sudo apt install ros-eloquent-rqt*

安装完毕后,运行

rqt

3.2 rqt 使用

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

 注意:rqt查找所有插件本身可能需要一些时间。如果单击插件,但没有看到服务或任何其他选项,则应关闭rqt,在终端中输入命令rqt--force discover。

 使用服务下拉列表左侧的刷新按钮,,以确保您的turtlesim节点的所有服务都可用。单击“服务”下拉列表以查看turtlesim的服务,然后选择/派生服务。

3.3 尝试派生服务(Try the spawn service)

让我们使用rqt来调用/派生服务。你可以从它的名字中猜到/spring将在turtlesim窗口中创建另一只海龟。

通过双击“表达式”列中的空单引号,为新海龟起一个独特的名字,如“turtle2”。您可以看到该表达式对应于name值,并且是string类型。

输入海龟的新坐标,如x=1.0和y=1.0。

 注意:如果您尝试生成一只与现有海龟同名的新海龟,如默认的“turtle1”,则在运行turtlesim_node的终端中会收到一条错误消息:

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

编译完参数,你就可以调用了。要生成turtle2,您必须通过单击rqt窗口右上方的call按钮来调用服务。

         您将看到一只新海龟(同样是随机设计的)在您输入的x和y坐标处出现。如果您刷新rqt中的服务列表,您还将看到现在除了/turtle1/…之外,还有与新乌龟/turtle2/…相关的服务…。

3.4 尝试set_pen服务(Try the set_pen service)

尝试set_pen服务现在让我们使用/set_pen服务为turtle1提供一支独特的笔:

 r、g和b的值介于0和255之间,将设置画笔绘制的颜色,宽度设置线条的粗细。要让画笔1绘制一条清晰的红线,请将r值更改为255,将宽度值更改为5。更新值后不要忘记调用服务。

如果返回到运行turtle_teleop_node的终端并按下箭头键,您将看到turtle1的笔已更改。

 你可能已经注意到,没有办法移动turtle2。您可以通过将turtle1的cmd_vel主题重新映射( remapping)到turtle2来实现这一点。下面我将实现这点。

3.5 Remapping

打开一个新的终端,执行如下命令:

ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel

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

 要停止模拟,只需关闭运行turtlesim_node和turtle_teleop_key的终端窗口。如果要保持这些终端打开,但结束模拟,可以在turtlesim_node终端中输入Ctrl+C,在遥操作终端中输入q。

以上就是我今天要分享的内容。纠错,疑问,交流: 911946883@qq.com

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

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

相关文章

C语言-动态内存分配(12.1)

目录 思维导图: 1.为什么存在动态内存分配 2.动态内存函数的介绍 2.1 malloc 2.2 free 2.3 calloc 2.4 realloc 3.常见的动态内存错误 写在最后: 思维导图: 1.为什么存在动态内存分配 我们现在学习了一些内存开辟的方式&#xff1a…

IDEA如何把自己改动的代码一次性发给别人

背景介绍: 想把自己改动的代码同步给同事 方式1:通过git,把自己本地代码 push 到代码托管平台,同事从代码托管平台 pull 最新代码; 方式2:通过IDEA的Patch包的方式来快速发送修改的代码(步骤如下…

pr值高的域名对网站有什么价值?怎么在线查询搜狗PR权重

众所周知一个全新的搜狗域名在建立网站后搜索引擎会对其进行一个类似资格评价的阶段,我们将这个阶段称为沙盒,在沙盒里面的这段时间,我们将其称为沙盒期,沙盒期一般都是1-3个月。在沙盒期这段时间内。我们仍需要经常更新文章。所以…

联合证券|海南自贸港快速发展,概念股出炉!

海南自由贸易港货物进出口 初次打破2000亿元关口 1月13日,国新办就2022年全年进出口状况举行发布会。会上介绍道,近两年海南自由贸易港货物进出口快速开展,继2021年头次打破1000亿元后,2022年再上新台阶,初次打破2000…

Pytorch深度学习【十二】

填充和步幅 卷积核带来的问题—输入形状不断减小更大的卷积核可以更快的减小输出大小 形状从nh∗nwn_h * n_wnh​∗nw​减少到 (nh−kh1)∗(nw−kw1)(n_h-k_h1)*(n_w-k_w1)(nh​−kh​1)∗(nw​−kw​1) 解决方案 填充—在输入周围添加额外的行/列—一般用0填充理论依据 填充p…

Odoo 16 企业版手册 - 库存管理之报告

报告 正确监控库存操作将帮助您轻松分析和理解库存管理的工作流程。Odoo可以为您提供一个专用平台,特别是用于为您的组织中完成的库存操作生成报告,并在图形和表格视图中准确表示数据。您可以实时自定义报告,以根据您的要求获得细致的报告。在…

Nvm,Nrm使用教程

NVM介绍 NVM全称node.js version management ,专门针对node版本进行管理的工具,通过它可以安装和切换不同版本的node.js 使用场景 我目前的公司有很多项目,其中有一些老项目用的是vue2.5左右了webpack版本也比较低,只能使用10.16.…

[前端笔记——WEB基础] 1.WEB基本概念

[前端笔记——WEB基础] 1.WEB基本概念基本概念1.资源 resourse2.链接3.HTTP 协议4.网页的真实样子:HTML静态网页与动态网页1.静态网页2.动态网页现代网站架构1.网站架构当我们访问一个网站时,后台都会发生什么事情捏?www——万维网 www:Worl…

Android系统启动(三) — SystemServer处理过程

system_server 进程主要是用于创建系统服务,AMS、WMS、PMS 都是由它创建的。 具体来说,SystemServer 进程被创建后,主要做了以下工作: 启动 Binder 线程池,这样就可以与其他进程进行通信;创建 SystemServi…

JDK9下载、安装和配置环境变量图解

下载 1.输入:https://www.oracle.com/ 2.选择“java download” 3.点击“java archive” 下拉找到 java9 4.点击进入,选择windows版本 5.勾选,下载。需要账号下载 安装 1.双击安装包,下一步 2.选择安装路径,…

旅游景区官网(网站、小程序)小开发可以实现哪些功能?

伴随着我们生活水平的提升和手上的余钱愈来愈多,绝大多数人一定会选取去不同地方开展旅游,旅游也成為了经济发展的一大支撑。将来便捷用户和旅游业的发展趋势,打造出旅游景区官网(网站、H5、小程序等)开发设计是十分关…

【UE4 第一人称射击游戏】50-用另一种方法实现僵尸随机漫游 僵尸攻击玩家时造成伤害

上一篇:【UE4 第一人称射击游戏】49-僵尸攻击动画本篇效果:使用另一种逻辑实现了僵尸的随机漫游僵尸攻击玩家时会对玩家造成实质上的伤害步骤:打开“SimpleAI”,当僵尸看见玩家时,设置变量“CanSeePlayer”为False我们…

深入了解 LinkedBlockingQueue阻塞队列,分析扩容机制以及小顶堆原理

1. 前言 今天的目的是为了深入了解下优先队列的机制。不过优先队列是基于大小顶堆实现的,但是其本质就是一个二叉树,所以今天会讲一些铺垫知识,好了,废话不多说了,让我们开始吧 2. 前置知识 2.1 大顶堆 完全二叉树&am…

1.2、操作系统的特征

1、并发 并发\color{red}并发并发:指两个或多个事件在同一时间间隔内发生。 这些事件宏观上是同时发生\color{red}宏观上是同时发生宏观上是同时发生的,但微观上是交替发生\color{red}微观上是交替发生微观上是交替发生的。 并行\color{red}并行并行&am…

STM32F103学习笔记(10)——I2C多路复用器TCA9548A使用

一、简介 TCA9548A 器件配有八个可通过 I2C 总线控制的双向转换开关。串行时钟/串行数据 (SCL/SDA) 上行对可扩展为 8 个下行对或通道。根据可编程控制寄存器的内容,可选择任一单独 SCn/SDn 通道或者通道组合。这些下游通道可用于解决 I2C 从器件地址冲突。例如&…

高精度加法【c++实现】超详细讲解

高精度存在的意义 大家一定都知道int和long long是有极限的(如下表),如果超了就无法计算正确结果了,那该用什么方法来计算呢?这就是我们今天要说的算法———高精度算法。(本文只讲加法) 类型…

超级浏览器的防关联效果怎么样?

很多从事跨境电商业务的朋友,都尝试用各种手段来防止账号关联,现在有很多不要钱的超级浏览器可以下载使用,但是很多人却不敢把高价值的账号放在超级浏览器上面,今天我们就来详细聊聊这个问题。说超级浏览器之前,我们先…

抖音世界杯直播的低延迟是怎么做到的?

动手点关注干货不迷路世界杯已经结束了,梅西带领阿根廷时隔三十六年之后终于如愿捧杯。抖音直播提供的 4K 超高清超低延迟看播能力给亿万观众留下了深刻的印象,决赛的 PCU 达到 3700w,在这样大规模并发下,如何能稳定流畅地做到更低…

GO语言配置和基础语法应用(一)

一、golang的下载和安装 这一步比较简单,直接打开go的官网,点击download即可,个别人打开慢可以用中国的镜像网站,之后访问的速度和下载第三方库的速度会快很多,之后傻瓜式安装一路到底即可。 配置环境变量 注意&#…

经典文献阅读之--Multi-modal Semantic SLAM(多模态语义SLAM)

0. 简介 在复杂动态环境下,如何去建立一个稳定的SLAM地图是至关重要的。但是现在当前的SLAM系统主要是面向静态场景。目前相较于点云的分类与分割而言。视觉的识别与分割会更加容易。这就可以根据语义信息提高对环境的理解。文章《Multi-modal Semantic SLAM for C…