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的轨迹颜色及粗细,大家自己尝试做下)。

本篇完。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目:基于JavaWeb实现企业员工工资管理系统(技术栈:javaweb+jsp+mysql 源码+数据库)

一、项目简介 本项目是一套基于ServletJsp实现的学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0…

基于java+springboot+vue实现的校园二手交易系统(文末源码+Lw+ppt)23-336

摘 要 自从新冠疫情爆发以来,各个线下实体越来越难做,线下购物的人也越来越少,随之带来的是一些不必要的浪费,尤其是即将毕业的大学生,各种用品不方便携带走导致被遗弃,造成大量的浪费。本系统目的就是让…

docker关闭全部运行容器命令是什么?

环境: docker v22.1 问题描述: docker关闭全部运行容器命令是什么? 解决方案: 要关闭所有正在运行的Docker容器,可以使用如下命令: docker stop $(docker ps -a -q)这条命令首先执行 docker ps -a -q…

主流公链 - Solana

探索Solana区块链:下一代高性能区块链平台 1. Solana简介 Solana是一个高性能的区块链平台(TPS能达到10W级别),旨在实现高吞吐量和低延迟的区块链交易处理。它采用了一系列创新技术,其中包括Proof of History (PoH)&a…

OD C卷 - 分披萨

分披萨 有大小不同的奇数块披萨;从A开始轮流取披萨,第一块可以任意选取,其他都必须从缺口开始选;B每次都选最大块的, A知道B的想法;求A能获得的披萨块总和的最大值; 输入描述: 第一…

RSTP、MSTP、VRRP

RSTP协议原理与配置 问题一、STP的收敛延时(30秒(有BP端口情况下RP端口down)或者50秒(没有BP端口情况下RP端口down)) RSTP:Rapid Spanning Tree Protocol RSTP和STP从原理流程上一样&#xf…

Springboot整合Redis报错:Unable to connection Redis

今天在做Springboot整合Redis中碰到下列错误: 基于以上的错误首先在Xshell或者其他远程操控虚拟机的软件上看能不能连接到Redis: [zzllocalhost ~]$ redis-cli -h 192.168.136.132 -p 6379 -a ****** Warning: Using a password with -a or -u option on the comma…

修复ubuntu引导

一、制作ubuntu启动U盘 进入启动盘后,点击Try ubuntu,进入U盘的ubuntu系统。 二、配置和添加源 sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update三、运行 Boot Repair重新制作引导 sudo boot-repair注意&#x…

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

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

STM32G4 TIM1触发ADC转换

STM32G4 TIM1触发ADC转换 📍相关篇《HAL STM32G4 ADC手动触发采集各种滤波算法实现》🎈《HAL STM32G4 TIM1 3路PWM互补输出VOFA波形演示》📍《HAL STM32G4内部运放的使用》 ✨继欧拉电子无刷电机驱动相关视频学习 – STM32G4 FOC开发实战—TI…

谷歌Google广告推广开户和投放攻略?

随着出海市场增加,越来越多的中国企业选择借助谷歌Google广告这一全球最大的在线广告平台,拓展海外市场,提升品牌知名度和产品销量。在这个过程中,选择一家专业且富有实战经验的服务商至关重要,而云衔科技正是这样一位…

IIC解挂死

参考这篇写的好 挂死之后 for(i0;i<16;ii1) {发送1个SCL下降沿延时if(SDA1)//已经解除挂死{Master将SDA0&#xff1b;//发送stop前奏发送1个SCL上升沿延时Master将SDA0&#xff1b;//发送stop延时} }