ROS 2边学边练(2)-- 咱也玩玩Turtlesim

        同ROS 1一样,Turtlesim(小海龟)例程往往是大家首次熟悉ROS世界的唯一不二之选(如同刚接触编程的同学,老师会让大家打出“Hello World”的道理一样),很多教学视频及书籍也同样如此,为何?麻雀虽小五脏俱全呗。其不光包含了ROS核心的节点、主题(topic)、服务(service)、动作(action)等等概念及功能,还涵盖了一些基本工具的使用体验,在普及知识点的目标下大家还能愿意继续玩下去,这种寓教于乐的方式值得鼓掌。呐,ROS也没那么难嘛(这种信心继续保持啊)~~

安装Turtlesim

        如果大家按照我的上一篇文章安装了完整桌面版的话,这步可以免了(已经包含),如果你是安装了精简版,那么可以通过如下命令进行安装(本系列文章所运行的环境都是Linux),

$sudo apt update

$sudo apt install ros-iron-turtlesim

安装完成后,通过如下命令进行检查,

$ros2 pkg executables turtlesim

如果终端打印出如下内容:

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

说明你搞的不丑。

小海龟(Turtlesim)启动

        打开一个终端(别忘了第一件事就是source /opt/ros/iron/setup.bash配置环境变量,如果嫌每次都得弄一遍忒麻烦可以将其加入永久的环境变量中去,方法保密),输入如下命令启动一个节点:

$ros2 run turtlesim turtlesim_node

效果如下图所示,我们的小海龟已经立定在蔚蓝的大海中了,

终端上输出这个节点的名称(/turtlesim)、孵化出的海龟名称(turtle1)以及它的坐标位姿(x/y/theta)。

        到此,结束?那个我们是不是感觉还遗漏了什么,小海龟得“游”起来呀!

小海龟(Turtlesim)游动

        打开另外一个终端,执行下面命令,启动控制节点:

$ros2 run turtlesim turtle_teleop_key

大家发现没有,G|B|V|C|D|E|R|T,低头看看你们手指下的键盘,以F键为中心的一圈按键,用来控制小海龟的游动方向(左边是我们曾经最为熟悉的WASD),不信?我们来瞧瞧看。

        切换小写,分别摁一下F周遭的键(鼠标单击在控制节点那个终端,不要单击在小海龟出现的那个窗口),小海龟会响应旋转到对应的方向,当切换为大写时,摁一下B,小海龟才会朝一个方向游动(个人感觉控制起来也不是那么方便啊)。

有同学可能看的更远一点,会考虑到,为什么摁一下键盘,小海龟才移动一点路程而不是一劳永逸地游下去,这个问题,我们可以考虑这样一种场景,当你的控制系统与实际受控的机器人(或小车)由于某种原因断联时,你还希望它一直动下去吗。

        我们可以分别执行下面的命令看看大概看看当前的节点、主题、服务、动作信息,我们再打开一个终端:

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

节点有俩,/teleop_turtle和/turtlesim,主题有/parameter_events、/rosout、/turtle1/cmd_vel、/turtle1/color_sensor、/turtle1/pose,

一共21个服务及1个动作(/turtle1/rotate_absolute),后面的章节我们会详细了解这些概念及功能,今天轻松点,先瞅一眼,过过瘾。

安装rqt

        国际惯例,如果你之前安装的不是完整版,那么你需执行如下命令进行安装:

$sudo apt update

$sudo apt install ~nros-iron-rqt*

用用rqt

        rqt工具可以帮助我们更加具体化的了解、操作这些相关的服务、主题等等概念和功能,我们执行如下命令启动rqt工具(之前的小海龟及控制节点不要关闭):

$rqt

开始弹出的窗口没有啥有用的内容(仅一些文字提示),不用急,在窗口的上面菜单栏选择Plugins > Services > Service Caller,

如果现象与上图不一致,那么可以尝试恐吓一下(执行命令rqt --force-discover)。

        我们刷新下service,在其右侧的下拉框选中spawn服务,

给小海龟找个伴

        根据月老手册的指示,我们先通过双击对应Expression列下面对应的x和y修改坐标值(如x=1.0,y=1.0)即可在对的时间对的地方出现对的龟,然后点击右侧的Call按钮(调用spawn服务),如果先点击call再配置坐标,会出现下面的状况,我们的命运之龟穿越过头了,直接越界修仙了,我们的小海龟依然伤心太平洋,

而根据正确的指示行动后,你看,来了,TA来了,TA带着轻快的步伐走来了,请看现场直播画面,

刷新下服务后,大家会发现,我们穿越的龟和终成眷属的那对龟对应的服务均出现在最新的名单之上。

给小海龟添点料

        我们继续体验下另外一种服务set_pen,改变下小海龟游动的轨迹颜色,参照之前的修改逻辑,取g值为255(r红g绿b蓝,0~255),滑条绿线,也可修改下线条宽度,确认好后点击Call按钮,然后切换到控制终端界面,控制小海龟(turtle1的游动),我们主动点,游到TA身边,搞定。

双龟同游

        下面我们再来体验下今天的最后一个技能点,重映射(主题)。我们在控制turtle1时,却控制不了turtle3的移动(turtle2小朋友已经活在另外一个时空了,我们别去管它),怎么办,好办,我们何不搭个顺风车,来个成龟之美,另开一个终端(source ROS 2环境变量)执行如下命令,开启另外一个控制节点,给turtle3的cmd_vel主题送波能量:

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

使得我们的turtle3也能收到这样的移动数据,当控制键盘时(分别控制两个控制节点终端),实现了二龟之间的游戏,达到了我们成龟之美的目的(为了区别二者的轨迹,我们可以修改下turtle3的轨迹颜色及粗细,大家自己尝试做下)。

本篇完。

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

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

相关文章

跨境必看的TikTok养号保姆式教程

TikTok养号的重要性不必多少,不仅可以在创号初期保障账号安全,后期的账号流量也需要以前期养好账号为前提。下面就给大家分享如何养号的真实操作攻略! 一、为什么要养号 (1)提高系统推荐精准度 系统不了解新账户人设…

LangChain核心概念与组件

Chains Chains可以让你按照一定的顺序和逻辑来执行不同的任务。Chains有以下四种类型: 类型作用LLMChain用于在语言模型周围添加一些功能的简单Chain,它由一个PromptTemplate和一个语言模型(LLM或chat model)组成,它…

初识C++(二)引用,内联函数,auto

目录 1.引用的概念与用法: 1.1引用特性: 1.2使用场景 1.2.1做参数 1.3传值、传引用效率比较 1.4引用做返回值 1.5引用和指针的对比 2.内联函数 3.auto关键字 4. 基于范围的for循环(C11) 5.指针空值nullptr(C11) 1.引用的概念与用法:…

记录 AI绘图 Stable Diffusion的本地安装使用,可搭建画图服务端

开头 最近刷短视频看到了很多关于AI绘图,Midjourney,gittimg.ai,Stable Diffusion等一些绘图AI工具,感受到了AI绘画的魅力。通过chatGPT生成关键词再加上绘图工具,真是完美,文末教大家如何用gpt提词 Midj…

浮动布局与定位布局

目录 前言: 浮动布局(Float Layout): 定位布局(Positioning Layout): 1.传统布局: 1.1文档流布局: 1.1.1基本的布局方式: 1.1.2 块级元素: 1.1.3调整元素: 1.2浮动布局: 1.2.1浮动布局允许元素向左或向右浮动,使…

docker启动卡死问题排查

问题:输入docker ps 或则vession 卡死,无任何输出 排查思路如下: 1、查看docker状态或者日志 journalctl -u docker.service 或者 systemctl status docker 3月 20 18:23:06 dfbpmyy2 dockerd[1114]: time"2024-03-20T18:23:06.7449…

SpringBoot整合Redis:缓存击穿--互斥锁解决

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 …

Python算法100例-4.5 最小公倍数

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序 1.问题描述 求任意两个正整数的最小公倍数(Least Common Multiple,LCM)。 2.问题分析 如…

开源博客项目Blog .NET Core源码学习(12:App.Application项目结构分析)

开源博客项目Blog的App.Application项目主要定义网站页面使用的数据类,同时定义各类数据的增删改查操作接口和实现类。App.Application项目未安装Nuget包,主要引用App.Core项目的类型。   App.Application项目的顶层文件夹如下图所示,下面逐…

【Java程序设计】【C00352】基于Springboot的疫情隔壁酒店管理系统(有论文)

基于Springboot的疫情隔壁酒店管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以…

大学里女生适合做什么副业?这几个小副业最适合女生

大学里女生应该做什么样的副业合适?对于这个问题没办法给大家确定的答案,毕竟每个人能做什么,适合什么,要根据每个人的性格特点特长来看。 但是女生们不管做什么,尽量都不要选择做廉价劳动力的赚钱方式,因为…

STM32串口收发单字节数据原理及程序实现

线路连接: 显示屏的SCA接在B11,SCL接在B10,串口的RX连接A9,TX连接A10。 程序编写: 在上一个博客中实现了串口的发送代码,这里实现串口的接收代码,在上一个代码的基础上增加程序功能。 Seiral.…

【搞不明白】redis和mysql、mybatisplus有啥关系

一个解决三天的bug,到现在也没有搞明白,如题,到底redis和mysql、mybatisplus能有啥关系。三个不相关的嘛 记录下问题: (框架用的Jeecgboot 3.6.0) – 学习使用 看下面的一段代码,是一个分页查询:注意引用的…

mysql数据库表字段使用desc等关键字报错及解决方法

建议尽量避开关键字!!! 如果实在必须用,那参考下面解决办法: 在要用到关键字的地方加反引号标识:

@EnableWebMvc 导致自定义序列化器失效

目录 前言 一. 自定义序列化器失效 1.1 EnableWebMvc 的作用 1.2 EnableWebMvc 带来了什么后果 1.3 原理分析 1.4 问题解决 二. 总结 前言 在使用Swagger的时候用 到了EnableWebMvc,发现之前为了解决Long类型、日期类型等自定义序列化器失效了 Configurati…

JavaScript、ES6与微信小程序:工具箱、升级与新房子

JavaScript、ES6和微信小程序三者之间有什么联系?我想,作为初学者还是有点蒙。下面作一个简单的分析,供大家参考。 首先,我们可以把JavaScript想象成一个非常强大的工具箱,里面装满了各种各样的工具。这些工具可以帮助我们完成各种任务,比如…

vivado 使用远程主机和计算群集

使用远程主机和计算群集 概述 AMD Vivado™集成设计环境(IDE)支持同时并行合成和实现的执行在多个Linux主机上运行。你可以做到这一点通过配置单个主机或指定要在其上启动作业的命令手动执行现有的计算集群。目前,Linux是Vivado唯一支持远程主…

书生浦语大模型实战营第一课笔记

书生浦语大模型全链路开源体系 课程笔记大模型的发展趋势InternLM2的主要亮点模型到应用的典型流程全链路的开源工具 InternLM2技术报告笔记大型语言模型的发展InternEvoModel Structure训练数据 课程笔记 第一节课主要对大模型进行介绍,特别是书生浦语大模型的发展…

【读书微言】The first summary

系列文章目录 文章目录 系列文章目录前言一、读书微言总结 前言 一、读书微言 强大的内心催生信念我们的生活是否幸福并不是依靠外在的环境,而是依靠我们内在的信念。要想成为自己命运的主宰,我们就必须形成自己的信念。只要我们能坚定自己的内在信念&…

认识线程(Thread)

目录 一、概念 1、 线程是什么 2、为啥要有线程? 3、进程和线程的区别 4、Java 的线程 和 操作系统线程 的关系 二、第⼀个多线程程序 三、创建线程 ⽅法1:继承 Thread 类 ⽅法2:实现 Runnable 接⼝ 对⽐上⾯两种⽅法: 其他变形 四、…