树莓派 ROS 学习(二)小乌龟 turtlesim

news2024/11/15 17:32:16

添加链接描述

目录

创建catkin工作空间

小乌龟turtlesim节点

启动节点

turtlesim节点

turtlesim 话题与消息

查看话题的消息类型

查看消息类型的具体内容

查看话题的值

改变背景颜色

获取参数列表

 获取参数值

修改颜色

控制乌龟运动

通过发布话题控制乌龟运动

通过键盘控制乌龟运动

通过服务控制乌龟的移动


上次安装成功ROS之后,先确认一下ROS的安装环境正确:

env | grep ROS
    

result:


    
  1. ROS_VERSION = 1
  2. ROS_PYTHON_VERSION = 3
  3. ROS_PACKAGE_PATH = /opt /ros /noetic /share
  4. ROSLISP_PACKAGE_DIRECTORIES =
  5. ROS_ETC_DIR = /opt /ros /noetic /etc /ros
  6. ROS_MASTER_URI =http: / /localhost: 11311
  7. ROS_ROOT = /opt /ros /noetic /share /ros
  8. ROS_DISTRO =noetic

创建catkin工作空间

其实就是创建一个文件夹,然后在这个文件夹下,我们可以生成或者修改现有的catkin工作空间。输入以下命令就可以创建catkin工作空间:


    
  1. mkdir -p ~/catkin_ws/src
  2. cd ~/catkin_ws/src
  3. catkin_init_workspace

注意这个时候其实工作空间是空的,但是还是可以编译它:


    
  1. cd ~/catkin_ws/
  2. catkin_make

在这一步之后最好是可以加载在devel文件夹下的源文件 setup.bash,也可以一步到位直接在.bashrc里面加入加载源文件的命令,这样不用每次都加载一遍:


    
  1. echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
  2. source ~/.bashrc

使用以下命令确认源文件加载成功:

echo $ROS_PACKAGE_PATH
    

输出应该为:

 这里 ubuntu是安装时的用户名,上一篇安装ubuntu桌面版的时候默认用户名就是ubuntu了。

小乌龟turtlesim节点

启动节点

首先打开一个终端窗口,输入以下命令启动ROS节点管理器:

roscore

    

结果为:

然后再打开一个终端(不要关闭当前窗口),运行以下命令:

rosrun turtlesim turtlesim_node
    

执行输出类似:

然后会弹出turtlesim的界面如图:

然后将这几个终端最小化,记得不要关闭这两个终端。

turtlesim节点

新打开一个终端,输入如下命令找出所有的活动节点:

rosnode list
    

输出如下:

这里可以看到我们已经成功启动了 /turtlesim 节点。

如果需要查看turtlesim节点发布的话题、订阅话题和服务等内容,可以输入:

rosnode info /turtlesim
    

结果如图:

在publications下面可以看到,/turtlesim 发布了两个话题: /turtle1/color_sensor 和 /turtle1/pose, 分别控制了乌龟界面的北京颜色和乌龟在界面上的位置坐标,它们的消息类型分别是 [turtlesim/Color] 和 [turtlesim/Pose] 。

在Subscriptions下面可以看到 /turtlesim 订阅了一个未知类型的话题 turtle1/cmd_vel

turtlesim 话题与消息

输入如下命令来查看 /turtlesim 的话题:

rostopic list
    

输出结果为:

查看话题的消息类型

输入 rostopic type 命令查看话题类型,例如:

rostopic type /turtle1/color_sensor
    

 输出结果为:


turtlesim/Color 为 /turtle1/color_sensor这一话题的消息类型 (ROS消息类型命名格式:[package name]/[message type]

查看消息类型的具体内容

刚刚看到话题 /turtle1/color_sensor 的消息类型为 turtlesim/Color , 可以通过 rosmsg shw命令来查看它的具体内容:

rosmsg show turtlesim/Color
    

 输出结果为:

也就是说这里使用 unit8 来表示背景的RGB颜色。

查看话题的值

比如说想要查看背景的RGB颜色,或者小乌龟的位置,可以用 rostopic echo 命令,例如:

rostopic echo /turtle1/color_sensor
    

终端会持续输出如图:

直到按下 Ctrl+C才会停止。

改变背景颜色

获取参数列表

通过rosparam list 命令获取 /turtlesim 节点的参数列表:

rosparam list

    

输出为:

 获取参数值

通过 rosparam get / 命令获得参数服务器上所有参数的数值:

rosparam get / 
    

输出结果为:

 注意这里的RGB数值和之前用 rostopic echo [topic name] 得到的数值相同。

修改颜色

通过 rosparam set 可以修改颜色:


    
  1. rosparam set turtlesim/background_b 0
  2. rosparam set turtlesim/background_g 0
  3. rosparam set turtlesim/background_r 255
  4. rosservice call /clear

可以看到背景变成了红色:

控制乌龟运动

红色的背景感觉有点刺眼,这里我关闭了之前的 turtlesim节点并结束了roscore 节点管理器。这里重新启动一下:

在终端一中运行:

roscore
    

在第二个终端中运行:

rosrun turtlesim turtlesim_node
    

得到:

 (每次还都是不一样的小乌龟)

通过发布话题控制乌龟运动

之前提到 /turtlesim 节点订阅了一个位置类型的话题 turtle1/cmd_vel,这里先用 rostopic type来确定一下这个话题的消息类型,在一个新的终端窗口中运行如下命令:

rostopic type /turtle1/cmd_vel
    

得到:

 运行如下命令确定该消息的数据格式:

rosmsg show geometry_msgs/Twist
    

得到输出:

可以看到我们可以规定的是乌龟的线速度和角速度,这里要注意在二维空间中,允许的运动是沿 x 方向的直线运动或者是沿 z (垂直于电脑屏幕)的旋转运动。比如说:规定线速度为 2m/s, 角速度为 1.8 rads/s,那么命令如下:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

    

需要一个稳定的频率为1Hz的指令流才能保持移动状态。我们可以使用rostopic pub -r命令来发布源源不断的命令,1 代表 1Hz 的 速度指令发布频率。可以看到命令发布之后小乌龟开始做圆周运动:

通过 Ctrl+C停止圆周运动

通过键盘控制乌龟运动

在上面控制乌龟做圆周运动的终端重,输入以下命令:

rosrun turtlesim turtle_teleop_key
    

 命令执行后显示:

然后就可以通过键盘的方向键来控制乌龟运动,方向键上下控制前后移动,左右控制移动方向:(注意这里需要活跃界面为这个终端窗口,而不是小乌龟的显示界面,如果鼠标电机小乌龟的显示界面 turtlesim 窗口,然后再用键盘控制,将不可用。)

 

结束后可以按q退出键盘控制。

通过服务控制乌龟的移动

首先通过 /turtle1/Pose 话题来获得乌龟的位置信息:

执行:

rostopic type /turtle1/pose
    

 得到输出为:

然后执行:

rosmsg show turtlesim/Pose
    

 输出:

然后可以通过以下命令得到乌龟的位置坐标、方位角度(theta)和速度参数:

rostopic echo /turtle1/Pose
    

输出为: 

 

这里需要注意这个小乌龟的原点在 TurtleSim 窗口的左下角。

然后我们就可以实用 rosservice 来移动乌龟,格式为: rosservice call <service name><service arguments>

比如服务 /turtle1/teleport_absolute 可以控制绝对位置的移动,这一服务的 service arguments 包含 x,y 坐标和方位角。例如将乌龟移动到绝对坐标 [1, 1] ,方位角为0,那么运行以下命令:

rosservice call /turtle1/teleport_absolute 1 1 0
    

执行结果如图:

可以看到乌龟移动到了绝对坐标 [1, 1] 的位置,并且头朝向是方位角为0的位置。

服务 /turtle1/teleport_relative 可以控制相对位置的移动,这一服务的 service arguments 包含移动距离和角度。例如将乌龟从绝对坐标 [1, 1] 移动到绝对坐标 [2, 1] ,那么相对位置移动了1,角度为 0 。运行以下命令:

rosservice call /turtle1/teleport_relative 1 0
    

运行结果如下图:

 

可以看到完成了相对位置的移动。大家也可以自己改变这两个服务的角度或者位移量(坐标值)来看看不同的数值对小乌龟位置的影响。

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux 29726 人正在系统学习中

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

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

相关文章

力扣sql中等篇练习(一)

力扣sql中等篇练习(一) 1 第二高的薪水 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT IFNULL((SELECT distinct salary SecondHighestSalaryFROM EmployeeORDER BY salary desclimit 1,1),null ) SecondHighestSalary1.3 运行截图 2 分数排…

【C++】命名空间,缺省参数,函数重载,引用,内联函数,auto 关键字

目录1. 命名空间2. 输入输出3. 缺省参数4. 函数重载为什么C支持函数重载&#xff1f;5. 引用5.1 引用作函数参数&#xff08;输出型参数&#xff09;5.2 作函数的返回值关于函数的返回值&#xff1a;5.3 引用权限关于类型转换&#xff1a;5.4 引用和指针6. 内联函数6.1 C推荐的…

2、在vscode上创建第一个C++多文件编译工程(即如何添加task.json和launch.json文件到工程里面)

文章目录1、新建一个工程目录2、在vscode打开刚建立的工程目录&#xff0c;建立cpp文件3、设置C/C编译的选项:c_cpp_properties.json&#xff08;1&#xff09;鼠标点在.c的源文件内部&#xff0c;按 CtrlShiftp 快捷键&#xff0c;在弹出的界面中选择: [C/C:编配置(UI)]&#…

RK3568平台开发系列讲解(Linux系统篇)Linux 内部的全景图

🚀返回专栏总目录 文章目录 一、Linus 是谁二、Linux 内核全景图三、漫画:Linux 内核都有啥沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起认识这样一个计算机黑客,看看他是怎样创造出影响世界的 Linux,然后进一步了解一下 Linux 的内部结构。 一、…

从0学习stm32第二天

1.存储器结构 程序存存储器&#xff0c;数据存储器&#xff0c;寄存器和输入输出端口&#xff0c;被组织在同一个4G的线性地址空间中&#xff1b; 可以通过地址的方法访问对应的存储器或寄存器&#xff1b; 比如 0X12 34 56 78在内存中存储 低地址----------------------…

vue3组合式API和vite+ts

创建项目 npm create vitelatest . 选择ts版本 直接安装依赖项目启动 vite项目配置路径 cnpm i --save-dev types/node 让ts项目支持node环境 vite构建工具中配置了路径加载组件 import HelloWorld from "/components/HelloWorld.vue"; 界面显示正常 引入文件路径报错…

STM32嵌入式面试知识点总结

一、STM32F1和F4的区别&#xff1f; 解答&#xff1a; 参看&#xff1a;STM32开发 – STM32初识 内核不同&#xff1a;F1是Cortex-M3内核&#xff0c;F4是Cortex-M4内核&#xff1b; 主频不同&#xff1a;F1主频72MHz&#xff0c;F4主频168MHz&#xff1b; 浮点运算&#xff…

midjourney入口是什么?怎么使用midjourney

最近有很多小伙伴在咨询我midjourney的事情&#xff0c;因为他们看过midjourney的神奇能力&#xff0c;忍不住想玩一下&#xff0c;都在问midjourney要去哪里玩&#xff1f;midjourney入口是什么&#xff1f;小编觉得今天有必要来给大家详细的说说。 一.midjourney是什么 Midj…

Kafka消息发送流程

消息发送高阶用法 自定义拦截器 自定义序列化 自定义分区器 核心参数 https://kafka.apache.org/0110/documentation.html 参数名描述默认值bootstrap.servers格式为host1:port1,host2:port2,…key.serializervalue.serializerretries0retry.backoff.ms上次发送失败&…

【数据结构与算法】快速排序的非递归实现方法

目录 一.前言 二.非递归实现 一.前言 如果数据量过大的话&#xff0c;不断递归就会出现栈溢出的现象&#xff0c;这个时候你的代码是没问题的&#xff0c;但就是跑不起来&#xff0c;这个时候就要把递归改成非递归。 一般有两种改法&#xff1a; 1.直接改&#xff0c;利用循环…

Kafka---Kafka安装(单机版)

Kafka安装&#xff08;单机版&#xff09; 文章目录Kafka安装&#xff08;单机版&#xff09;上传压缩包解压更名配置文件修改myid启动zookeeper启动kafka创建topic查看消息队列查看消息队列详情生产消息消费消息查询指定对列消息数量上传压缩包 将压缩包上传到/opt/install …

Spring —— Spring Boot 日志文件

JavaEE传送门JavaEE Spring —— Spring Boot 创建和使用 Spring —— Spring Boot 配置文件 目录Spring Boot 日志文件Spring Boot 使用日志得到日志对象使用日志对象打印日志日志级别日志级别作用日志级别的分类日志级别设置日志持久化更简单的日志输出 (lombok)Spring Boo…

全网最详细,Jmeter性能测试-性能进阶, 数据驱动将融入性能测试(五)

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 本节或者后面都可能…

【汇总版】计算机组成原理思维导图

目录导读与总结汇总思维导图导读与总结 这是一份涵盖计算机组成原理基础知识的思维导图&#xff0c;它包括计算机系统的层次结构、指令和指令执行、CPU的组成和工作原理、存储器的层次结构和管理、输入输出设备的原理和接口、以及汇编语言的基础知识。通过这份思维导图&#x…

Zookeeper源码分析——ZK服务端初始化源码解析

持久化源码 快照 public interface SnapShot {/*** deserialize a data tree from the last valid snapshot and * return the last zxid that was deserialized* 反序列化方法*/long deserialize(DataTree dt, Map<Long, Integer> sessions) throws IOException;/*** …

在Linux中搭建Apache和多个版本PHP源码的集群

ApachePHP安装在公网IP为x.x.x.x的服务器上 需要下载安装的软件版本&#xff1a;httpd-2.4php-5.6php-7.4php-8.0 安装httpd 第一步&#xff0c;查看Linux系统中是否安装了apache。 命令&#xff1a;rpm -qa | grep httpd 若已经安装了&#xff0c;则需要使用命令“yum -y…

前端学习:HTML图像、表格、列表

目录 图像 一、图像标签和源属性(Src) 二、替换文本属性(Alt) 三、设置图片样式基本属性 四、图像标签 表格 一、标签 补充: 二、表格的表头 三、表格常用标签和属性 标签 属性 列表 一、无序列表 二、有序列表 三、定义列表 四、列表常用标签属性 图像 一、…

MATLAB三相LCL滤波型PWM逆变器仿真设计matlab代码(链接在文章结尾)

MATLAB三相LCL滤波型PWM逆变器仿真设计 参考并网电流外环电容电流前馈内环的双闭环控制结构&#xff0c;可以用于光伏和风力发电网侧变换器中进行改造。 三相逆变器通常采用三相桥式逆变电路&#xff0c;采用IGBT作为开关器件的电压型三相桥式逆变电路 在并网逆变器系统中,滤波…

MySQL数据库学习笔记(七)实验课三之拼命的李绿

一来就是实验课三了&#xff0c;那么实验课二呢&#xff1f;实验课二是装配mysql环境那些东西&#xff0c;而我们在前面的笔记中也有关于配置环境的&#xff0c;所以在这里就不再赘述了。 文章目录注意&#xff1a;1&#xff0c;本地文件导入2&#xff0c;数据范围3&#xff0c…

paddle 进行数字识别 (使用ocr数据集)

要点&#xff1a; 喵了个喵&#xff0c;没使用 OCR参考文档&#xff1a; PaddleOCR数字仪表识别——2.数据合成及数据集制作_数字仪表数据集https://blog.csdn.net/castlehe/category_10459202.html?spm1001.2014.3001.5482最佳参考&#xff1a; 基于PaddleOCR的数字显示器字…