当前位置: 首页 > news >正文

ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现


偶吼吼胜利在望,冲冲冲

老规矩新建功能包

工作空间目录下/src下开启终端输入

catkin_create_pkg learning_tf roscpp rospy tf turtlesim

如何实现tf广播

引入库

 c++                                                                                python  

pose是订阅的消息类型,之前在的订阅那一节我们已经介绍过了。

初始化节点

  c++                                                                                python  

这里python没有设定主函数,直接就在主函数定义段内嵌套了节点的定义,可以发现c++觉python这时候定义的节点名称是不一样的,C++定义的节点名叫my_tf_boradcaster,PYthon的叫 turtle_tf_boradcaster。

海龟位姿话题的订阅

 c++                                                                                python   

话题名的获取

话题的订阅就是需要使用到回调函数的,特别的是这一次的目的是输出向量额坐标系变换时候的平移矩阵和旋转矩阵,所以我们需要定义两条消息。那么就是turtle1和turtle2两个话题消息,我们可以发现在python中利用占位符以及turtlename=rospy.get_param('~turtle'),通过获取参数的方式就可以得到这两个海龟的话题名,而c++则需要turtle_name = argv[1];的方式获取送入的参数名字在加上/pose做区分,二者所检索的话题名都是turtlei/pose。

命名空间

python这句代码的意思是获取turtle的私有命名空间,如果没有~就是全局命名空间。

命名空间的学习见以下链接:

【精选】ROS中节点、话题、参数重命名以及全局、相对、私有命名空间(示例+代码)_ros2 节点 全局变量_肥肥胖胖是太阳的博客-CSDN博客

 argv[1]

对照着看会发现argc是输入参数的个数,argv是具体的输入的参数,数数方式吃从后向前数。

回调函数

有订阅就要有回调函数,这才是重中之重。

创建TF广播器(TransformBroadcaster)

 c++                                                                                python  

数据广播

 c++                                                                                python   

在数据广播出去之前,我们需要初始化数据,定义数据

初始化tf数据

 c++                                                                                python   

这一部分 c++的detOrigin是像transform中传入平移矩阵T,q是由平移矩阵计算出的欧拉角向量,setRotation则是像transform中传入欧拉向量角,此时就得到了旋转平移矩阵transform。

python的就更简单, 这一句的意思就是计算旋转平移矩阵transform。

广播数据

观察上面的代码可以发现两者都有一个time.now()这是输出实时时间用以区分。

 循环等待回调函数

在回调函数需要的消息进来之前,需要执行等待代码

 c++                                                                                python   

监听器的实现

在前面我们已经将两只海龟相对于世界坐标系的位置广播出去了,下面我们需要监听到二者的位置,在计算二者间的旋转平移矩阵。

引入库

这里面roslib是用来导入功能包的,咱也不知道为啥监听器的实现python代码需要多一个链接功能包的语句,所以这暂时是一个遗留问题。

/spawn是创建小海龟客户端的服务类型,这一次python用到的包真的好多。

初始化ROS节点

创建客户端

这一部分就是客户端的代码,生成第二只小海龟

等待/spawn服务指令

创建客户端

这里可以发现srv的数据并没有传入,这因为srv是自带封装好的初始数据的,之前在学习客户端建立的时候,我们初始化了srv并送入了一写数据,这里不送入使用自带的数据也不会报错,不同的是python中是需要指定起始点位置和名称的。

创建发布器

我们在监听到消息后需要发布出去,所以需要先在监听器外层建立一个发布器。

创建监听器

 

延时等待

准备工作做好之后就开始延时等待。

循环

数据监听

这句代码的意思是如果节点开启才执行while循环里的代码。

相较于python监听transform数据来说,c++多了一个等待3秒的代码,catch和except后面都是报错输出。

数据计算与发布

延时循环

 

主函数调用

由于python是直接在主循环里面写的,所以就不用指定主函数了。

CMakeList.txt

编译

工作空间开启终端输入

catkin_make

roscore

rosrun turtlesim turtlesim_node

rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1

rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2

% 这两行代码中,__name是更改节点的名字广播器程序节点的名字在C++中是my_tf_boradcaster,PYthon的叫 turtle_tf_boradcaster。但是如果我们要广播两次的话,就需要对节点的名字进行更改避免冲突,这其实就像是函数调用一样,在设定函数的时候的参数值在使用的使用我们要输入不同的名字以避免冲突。

如果不改名字的化就会提示节点名字冲突。后面的turtle1是需要的输入变量。

rosrun learning_tf turtle_tf_listener % 前几句一直没有反应,只有到这一句开始才会建立海龟,开始追随,不停地发布turtle1的位置给turtle2,然后turtle2再运动,这就是跟随的基本原理,我们知道发布是在监听代码中进行的,发布的消息名称一直是turtle2,也就是给turtle2发运动位置消息。也就是说这个消息是直接发个小海龟2的!。换个思路我们可以turtle1的位置发布给turtle2也是可以实现同样的效果的。额,他好像就是这么实现的哈。把1的位置广播出去然后发布给2.

不对,是广播的两只乌龟的位置,然后给turtle2发布的指令是它往1走的方向。

rosrun turtlesim turtle_teleop_key  % 这个是键盘控制按键,2会跟着1走。

至于python代码的执行如下两行代码需要变更成如下的语句

rosrun learning_tf turtle_tf_broadcaster.py __name:=turtle1_tf_broadcaster _turtle:=turtle1

rosrun learning_tf turtle_tf_broadcaster.py __name:=turtle2_tf_broadcaster _turtle:=turtle2

相关文章:

ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现

偶吼吼胜利在望,冲冲冲 老规矩新建功能包 工作空间目录下/src下开启终端输入 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何实现tf广播 引入库 c python …...

计算机算法分析与设计(23)---二分搜索算法(C++)

文章目录 1. 算法介绍2. 代码编写 1. 算法介绍 1. 二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search&#xf…...

前置语音群呼与语音机器人群呼哪个更好

最近通过观察自己接到的营销电话,通过语音机器人外呼的量应该有所下降。同时和客户交流获取到的信息,也是和这个情况类似,很多AI机器人群呼的量转向了OKCC前置语音群呼。询问原因,说是前置语音群呼转化更快,AI机器人群…...

『Element Plus の 百科大全』

Element Plus 官网 点击跳转...

P3879 [TJOI2010] 阅读理解- 字典树

题面 分析 将所有单词存入字典树&#xff0c;重点值怎么判断在哪一行出现过&#xff0c;对于字典树查询的判断字符串是否存在的数组可以开成二维&#xff0c;也就是在查询到某个字符串存在后&#xff0c;再通过循环判断每一层是否存在。 代码 #include <bits/stdc.h>…...

upgrade k8s (by quqi99)

作者&#xff1a;张华 发表于&#xff1a;2023-11-17 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明(http://blog.csdn.net/quqi99) 本文只是从网上搜索一些升级k8s的理论学习&#xff0c;下面的步骤未实际测…...

CronExpression

CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年]序号 说明 是否必填 允许填写的值 允许的通配符 1 秒 是 0-59 , - * / 2 分 是 0-59 , - * / 3 小时 是 0-23 , - * / 4 日 是 1-31 , - * ? / L W 5 月 是 1-12 or JA…...

释放机器人潜力,INDEMIND深耕底层技术

市场转暖&#xff0c;但攘外需要同时安内。 市场降温之后&#xff0c;正迎来拐点 疫情之后&#xff0c;经济逐渐下行&#xff0c;服务机器人的“好日子”也随之结束&#xff0c;整个行业都在动荡中经历渡劫。根据TE智库报告显示&#xff0c;从2022年开始&#xff0c;我国服务…...

【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript进阶指南 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继…...

流量2----2

2...

人工智能发展前景

随着人工智能的快速发展&#xff0c;这个行业对人才的需求也在不断增长。越来越多的有志之士开始关注人工智能&#xff0c;希望通过自学获得相关技能&#xff0c;进而在人工智能领域找到心仪的职业。本文将探讨人工智能职业发展的前景&#xff0c;并为大家提供自学人工智能的途…...

编写程序,要求输入x的值,输出y的值。分别用(1)不嵌套的if语句(2)嵌套的if语句(3)if-else语句(4)switch语句。

编写程序&#xff0c;要求输入x的值&#xff0c;输出y的值。分别用&#xff08;1&#xff09;不嵌套的if语句&#xff08;2&#xff09;嵌套的if语句&#xff08;3&#xff09;if-else语句&#xff08;4&#xff09;switch语句。 选择结构是编程语言中常用的一种控制结构&…...

AcWing 4520:质数 ← BFS

【题目来源】https://www.acwing.com/problem/content/4523/【题目描述】 给定一个正整数 X&#xff0c;请你在 X 后面添加若干位数字&#xff08;至少添加一位数字&#xff1b;添加的数不能有前导0&#xff09;&#xff0c;使得结果为质数&#xff0c;在这个前提下所得的结果应…...

00、计算机视觉入门与调优简介

写在前面 每天更新1篇文章&#xff0c;共更新100篇以上 相关代码会放在gitee上 中间会按进度和反馈安排视频讲解 预计2023-11-11开始推送文章&#xff0c;持续3个月左右 专栏简介 本专栏带你从头开始入门计算机视觉。 内容会比之前写的文章更专业更全面&#xff0c;并且你…...

.L0CK3D来袭:如何保护您的数据免受致命攻击

尊敬的读者&#xff1a; 网络犯罪的威胁日益增长&#xff0c;其中.L0CK3D勒索病毒是一种极具挑战性的数字威胁。为了助您应对这一风险&#xff0c;本文将深入探讨.L0CK3D病毒的狡猾手法、毁灭性影响&#xff0c;提供详实的数据恢复方法&#xff0c;同时为您提供极具实战性的预…...

多媒体ffmpeg学习教程

多媒体ffmpeg 目前比较流行的音视频文件为:MP4 flv m3u8 ffmpeg ffmpeg ffplay ffprobe ffserverffmpeg -i INPUT -vf "split [main][tmp]; [tmp] cropiw:ih/2:0:0, vflip [flip];[main][flip] overlay0:H/2" OUTPUTffmpeg -i 2022.mp4 -vcodec mpeg4 -b:…...

SELinux零知识学习十五、SELinux策略语言之客体类别和许可(9)

接前一篇文章&#xff1a;SELinux零知识学习十四、SELinux策略语言之客体类别和许可&#xff08;8&#xff09; 一、SELinux策略语言之客体类别和许可 4. 客体类别许可实例 &#xff08;3&#xff09;进程客体类别许可 与文件许可不同&#xff0c;许多进程许可没有直接对应到…...

OpenSign:安全可靠的电子签名解决方案 | 开源日报 No.76

microsoft/Web-Dev-For-Beginners Stars: 71.5k License: MIT 这个开源项目是一个为期 12 周的全面课程&#xff0c;由微软云倡导者团队提供。它旨在帮助初学者掌握 JavaScript、CSS 和 HTML 的基础知识。每一节都包括预习和复习测验、详细的书面指南、解决方案、作业等内容。…...

Linux | 进程间通信

目录 前言 一、进程间通信的基本概念 二、管道 1、管道的基本概念 2、匿名管道 &#xff08;1&#xff09;原理 &#xff08;2&#xff09;测试代码 &#xff08;3&#xff09;读写控制相关问题 a、读端关闭 b、写端关闭 c、读快写慢 d、读慢些快 &#xff08;4&a…...

Vue.js正式环境中配置多个请求的URL

在Vue.js中&#xff0c;你可以在正式环境中配置多个请求的URL&#xff0c;通常使用一些配置文件或者环境变量的方式。下面是一种常见的配置方式&#xff1a; 1. 创建配置文件&#xff1a;在项目的根目录下&#xff0c;创建一个配置文件&#xff0c;比如可以是config.js&#x…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...