ROS与Python入门教程-TF-编写tf的listener(监听器)

ROS进二阶学习笔记(1) TF 学习笔记3 -- TF Listener 编写 (Python)and Adding frame(Python) ROS TF 学习笔记(3) -- TF Listener 编写 (Python) Ref: http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28Python%29 In the previous tutorials we created a tf broadcaster to publish the po 阅读详情

说明

  • 介绍创建TF监听器使用TF

创建TF监听器

  • 创建节点nodes/turtle_tf_listener.py
$ roscd learning_tf
$ touch nodes/turtle_tf_listener.py
$ chmod +x nodes/turtle_tf_listener.py
$ rosed nodes/turtle_tf_listener.py
  • 手工输入代码:
#!/usr/bin/env python  
import roslib
roslib.load_manifest('learning_tf')
import rospy
import math
import tf
import geometry_msgs.msg
import turtlesim.srv

if __name__ == '__main__':
    rospy.init_node('tf_turtle')

    listener = tf.TransformListener()

    rospy.wait_for_service('spawn')
    spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
    spawner(4, 2, 0, 'turtle2')

    turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist,queue_size=1)

    rate = rospy.Rate(10.0)
    while not rospy.is_shutdown():
        try:
            (trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
        except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue

        angular = 4 * math.atan2(trans[1], trans[0])
        linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
        cmd = geometry_msgs.msg.Twist()
        cmd.linear.x = linear
        cmd.angular.z = angular
        turtle_vel.publish(cmd)

        rate.sleep()

代码分析:

  • 代码:import tf
  • 分析:TF包提供了一个tf.transformlistener实现使接收任务将更容易。
  • 代码:listener = tf.TransformListener()
  • 分析:在这里,我们创建了一个tf.transformlistener对象。一旦侦听器被创建,它就开始接收转换,并缓冲他们长达10秒。
  • 代码:
rate = rospy.Rate(10.0)
    while not rospy.is_shutdown():
        try:
            (trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
        except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
            continue
  • 分析:
    • 通过listener.lookupTransform函数来实现获取变换
    • 第一参数:变换从/turtle2坐标系
    • 第二参数:到/turtle1坐标系
    • rospy.Time(0),想变换的时间,rospy.Time(0)获取最新的变换。

运行节点

  • 打开start_demo.launch
$ roscd learning_tf
$ rosed launch/start_demo.launch
  • 手工输入增加的代码
<launch>
    ...
<node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />
</launch>
  • 运行
$ roslaunch learning_tf start_demo.launch

检查结果:

  • 要查看是否有工作,只使用箭头键驱动第一只海龟(确保你的终端窗口是活动的,而不是你的模拟器窗口),你会看到第二只海龟跟随第一只!

异常情况

[ERROR] 1253915565.300572000: Frame id /turtle2 does not exist! When trying to transform between /turtle1 and /turtle2.
[ERROR] 1253915565.401172000: Frame id /turtle2 does not exist! When trying to transform between /turtle1 and /turtle2.
  • 这是因为监听器进行变换计算,但/turtle2来没获取,变换发布需要一定的时间来启动。
C++ tf::TransformListener ROS编写机器人的时候,不免会用到坐标变换,而TF是ROS中建立坐标系,并且使用各个坐标间转换关系的一个很好的工具。 TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系下的坐标。 使用TF功能包主要有以下两种方式: A:监听tf变换,接收并缓存系统中发布的所有参考系变换,并从中查询所需要的参考系变换。 B:广播tf变换,向系统中广播参考系之间的坐标变换关系。系统中更可能会存在多个不同部分的tf变换广播,每个广播都可以 阅读详情

相关推荐

chatgpt赋能python:Python坐标变换:从入门到精通

Python 坐标变换是 Python 中非常常见和实用的功能之一,掌握这些变换的基本原理和实现方法对于 Python 工程师来说非常重要。在实际应用中,我们可以将坐标变换应用于图像处理、地图绘制和计算机视觉等众多领域当中,以实现各种应用程序的设计和开发。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。

a1sssssb的博客 1183

tf_listener(tf监听)获取yaw值

tf tf::StampedTransform listenTransform; listener.lookupTransform("map", "base", ros::Time(0), listenTransform); /**省略中间一部分代码,直接进入正题**/ theta = tf::getYaw(listenTransform.getRotation()); /** **/

baidu_39489456的博客 1793

ROS坐标系TF学习——脱坑

在根据创客智造的 ROS探索总结-12.坐标系统进行实验时,遇到两个坑,记录一下: unlocate python节点,需要通过chmod +x abc.py给该文件增加执行权限。 turtle_tf_listener.py文件中 turtle_vel = rospy.Publisher(‘turtle2/command_velocity’, turtlesim.msg.Velocity)tur...

烈火的博客 1089

ROS学习--轻松使用tf

tf是ROS中建立坐标系,并且使用各个坐标间转换关系的一个很好的工具,对于非导航专业的同学,常常苦恼与各种旋转矩阵的变换,自己经常被搞的头大,最近由于课题实验的需要,尝试使用tf,对此有了一个初步的了解。很多已经接触ROS有一段时间的朋友,可能都没有真正使用过tf,因为从官方给的例程看起来好像非常繁琐,所以也就不想使用,但是最近一段时间的学习发现,其实真正有用程序的就仅仅几句,所以其实非常简单。

Start_From_Scratch的博客 4万+

ROS-tf坐标系广播与监听的编程实现

这里写目录标题一、创建功能包二、创建tf代码2.1 cpp2.1.1 创建tf广播器代码2.1.2 创建tf监听器代码2.2 python文件2.2.1 创建tf广播器代码2.2.2 创建tf监听器代码三、配置tf广播器与监听器代码编译规则四、编译并运行 本节的目的是,实现上一节的底层代码,即通过程序代码实现小海龟turtle2跟随turtle1。 一、创建功能包 $ cd ~/catkin_ws/src $ catkin_create_pkg learning_tf roscpp rospy tf tur

weixin_45519751的博客 399

ROS TF坐标变换从原理到C++实战详解

坐标变换是机器人系统中实现多传感器数据融合与跨坐标系定位的基础能力,其核心在于理解坐标系定义、刚体位姿表示及时间同步的变换传递机制。ROS通过TF(Transform Library)提供分布式、带时间戳的坐标系关系管理,底层依赖四元数与齐次变换矩阵完成高效旋转和平移计算。该技术广泛应用于机械臂视觉伺服、移动机器人导航、多机协同定位等场景,尤其在需要高实时性与确定性行为的C++工程实践中,正确广播静态/动态变换、鲁棒监听与异常处理成为系统稳定的关键。本文聚焦ROS Noetic下tf库的C++原生实现,覆盖

weixin_34293141的博客 443

python监听器_ROS与Python入门教程-TF-编写tf的listener(监听器)

ROS与Python入门教程-TF-编写tf的listener(监听器)说明介绍创建TF监听器使用TF创建TF监听器创建节点nodes/turtle_tf_listener.py$ roscd learning_tf$ touch nodes/turtle_tf_listener.py$ chmod +x nodes/turtle_tf_listener.py$ rosed nodes/turtl...

weixin_39534149的博客 700

ROS函数库本质:Stage/TF/PCL的运行时契约与数据流设计

ROS函数库并非普通工具集,而是构建机器人系统数据流、坐标同步与时间对齐的底层契约体系。其核心原理在于通过标准消息(如sensor_msgs/LaserScan、nav_msgs/Odometry)和协议(如tf2时间戳插值、PCL内存布局兼容性)实现跨模块互操作。这种设计赋予ROS强大的技术价值:仿真与实机接口一致、算法可移植、多传感器数据可融合。典型应用场景包括SLAM建图、动态避障路径规划、多机器人协同定位等。深入理解Stage的确定性消息发布机制、TF的时间感知树形缓存、PCL与ROS的零拷贝点云共

banglvfei0870的博客 292

ROS(九)——tf坐标系广播与监听的编程实现

上一届中两只海龟跟随的原理,怎么通过TF坐标系完成广播跟监听的编程实现 创建功能包 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 之前跑的那两个海龟例程,两只海龟之间都和world 坐标系之间有个位置关系,这个位置关系是通过tf坐标系去广播出来的 创建tf广播器代码(C++) 如何通过tf广播任意两个坐标系之间的位置关系 如何实现一个tf广播器 定义TF广播器(TransformBroadcaste...

hxxjxw的博客 2541

ROS初学者必修:Stage、TF与PCL三大核心库接口实战解析

在机器人开发中,坐标变换(TF)、轻量仿真(Stage)和点云处理(PCL)是ROS应用最广泛的基础能力。TF并非静态查表,而是基于时间戳同步的动态坐标系协调机制;Stage通过零物理引擎的分层抽象实现毫秒级2D仿真响应;PCL与ROS的桥接依赖零拷贝内存映射,避免高频点云处理中的性能瓶颈。这些技术共同支撑导航、建图、多传感器融合等典型场景。本文聚焦ROS初学者最易卡壳的三大函数库——Stage的ROS封装层、TF的C++/Python接口层、PCL-ROS消息桥接层,结合真实调试案例,详解头文件结构、参数

weixin_33672400的博客 407

ROS机器人开发避坑指南:从‘坐标系对不上’到‘tf2 lookup_transform超时’的实战解决方案

本文深入探讨ROS机器人开发中tf2坐标变换的常见问题与解决方案,包括坐标系对齐、时间同步、静态变换发布及lookup_transform超时等关键挑战。通过实战案例和代码示例,帮助开发者优化多传感器系统中的坐标变换性能,提升机器人开发的效率与稳定性。

weixin_30466039的博客 428

第10天 ROS 《Noetic TF坐标变换完整实验教程》

本文基于Ubuntu20.04和ROS Noetic平台,系统讲解了ROS TF坐标变换的核心原理与实践应用。主要内容包括:1)坐标系基础概念与ROS标准坐标系层级;2)TF系统的广播器与监听器工作机制;3)四种递进式实验:静态/动态TF广播开发、TF监听器实现、海龟跟随综合案例;4)配套TF调试工具(tf_echo、view_frames、RViz可视化)的使用方法。通过完整代码示例和详细操作指引,帮助学习者掌握机器人系统中多传感器坐标统一、位姿变换查询等关键技术,适用于ROS入门教学与实践开发。实验涵盖

z5mm6的博客 246

GIS应用技巧之三招搞定重叠区域数据提取

在很多分析过程中,常常需要分析判断哪些图形发生了重叠,该重叠情况的发生在对应分析环境下具有特定意义。例如在缓冲区分析中,若两个受灾点周边的受灾面积(即缓冲区)有所重叠,分析重叠区域的受灾影响时,就需要考虑相互影响的因素。本例中先用【要素转面】工具提取出发生重叠的区域,其次用【空间连接】工具将原始图层信息连接到重叠数据的图层,分析重叠数据的属性表,即可得到发生重叠的原始图层数据。 Step1 提取重叠区属数据。打开【数据管理工具】|【要素】|【要素转面】工具,输入要素设置为“circles”,输出要素类设置为

端木宛白的博客家园 6万+

write a tf listener

写tf listener时遇到的问题: 参考网页:http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28C%2B%2B%29 1.  How to publish the pose (position) of the robot after having the tf listener to "listener.

Erva的专栏 1684

SwinIR实战:从环境搭建到模型训练的全流程解析

本文提供了SwinIR超分辨率模型从零开始的全流程实战指南。详细解析了基于PyTorch和Anaconda的环境搭建、数据准备与配置文件修改、训练启动与常见错误排查(如张量尺寸不匹配),以及模型评估方法,帮助读者高效部署并训练SwinIR模型。

weixin_28224217的博客 319

PyTorch GPU版本安装避坑指南:解决RuntimeError: No CUDA GPUs are available报错

本文详细解析了PyTorch GPU版本安装过程中常见的`RuntimeError: No CUDA GPUs are available`报错问题,从硬件驱动检查、CUDA Toolkit与cuDNN安装到PyTorch GPU版本的正确配置,提供了全面的避坑指南和实战验证方法,帮助开发者高效搭建深度学习开发环境。

r2s3t4的博客 298

ROS2 tf2广播器(broadcaster)、侦听器(listener)

tf2介绍 安装依赖 sudo apt-get install ros-foxy-turtle-tf2-py ros-foxy-tf2-tools transforms3d(它提供四元数和欧拉角转换功能) pip3 install transforms3d 运行结果 启动turtle_tf2_demo.launch.py文件 ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py 键盘控制turtlesim ros2 run turtlesim turt

gezongbo的博客 2119

zemax双透镜公差分析

蒙特卡罗分析: 评估公差的整体影响,模拟过程中产生一系列随机的lens,满足指定的公差,然后再按照标准评估。公差分析,就是在设计了一个理想的系统后,想看看实际生产过程中如果产生公差(误差),系统会坏到什么程度,也就是光学性能受到多大影响。反灵敏度分析:分别对每个公差在性能方面的一个给定的最小允许减少量来计算公差,也就是限制了系统性能的变化,和灵敏度分析方向相反。灵敏度分析对每个公差单独求值,分别计算每个公差操作数的最大、最小、标准值(如上图)所有设计上可能的公差都列出来了。注意要固定透镜的口径。

fendoudecheng的博客 3207

ROS学习笔记(18)tf坐标系广播与监听的编程实现

ROS学习笔记(18)tf坐标系广播与监听的编程的python实现

ftraa的博客 510

项目方案:社会视频资源整合接入汇聚系统解决方案(五)

视频监控接入和视频汇聚平台,形成整合平台,平台服务层包括编码设备、存储设备、解码设备等的接入服务,提供基础视频服务、传输服务、存储服务、控制服务及事件服务。两种不同的接入方式:监控设备接入,是指接入社会单位视频监控系统的DVR(数字硬盘录像机)、DVS和IPC、DVR/NVR、CVR等设备;平台对接,是指对接接入社会单位数字视频监控平台。AS-VAG视频监控接入网关支持onvif、国标等接入,也支持多种SDK接入方式,包括国产的主流品牌支持海康、大华、宇视、华为等SDK,国际品牌支持松下和axis等SDK。

weixin_70208651的博客 2464

【Python爬虫】股票信息定向爬取

【Python爬虫】股票信息定向爬取:通过requests-bs4-re技术路线爬虫获取上交所和深交所所有股票的名称和交易信息

qq_39321802的博客 1504

ROS入门21讲---tf坐标系广播与监听的编程实现

创建功能包 创建tf广播器代码 /** * 该例程产生tf数据,并计算、发布turtle2的速度指令 */ #include <ros/ros.h> #include <tf/transform_broadcaster.h> #include <turtlesim/Pose.h> std::string turtle_name; void poseCallback(const turtlesim::PoseConstPtr& msg) { //.

weixin_44766529的博客 451

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

ROS Noetic下用Python搞定tf2静态坐标变换:从雷达坐标系到世界坐标系的点转换实战

本文详细介绍了在ROS Noetic环境下使用Python和tf2库实现雷达坐标系到世界坐标系的静态坐标变换。通过完整的代码示例和关键参数说明,帮助开发者快速掌握坐标变换技术,提升机器人开发中传感器数据的利用效率。

weixin_30730053的博客 355

什么是 SAP S/4HANA 的 VDM Layering Architecture 的 CDS Hierarchy View

当涉及SAP S/4HANA的CDS Hierarchy View时,我们正在谈论一种高级数据建模技术,用于构建层次结构化的数据视图,以支持树状和分层数据的处理和分析。CDS(Core Data Services)是SAP的一种数据建模和定义语言,而CDS Hierarchy View则是CDS的一个重要组成部分,用于处理层次数据,如组织结构、产品分类、地理区域等。首先,您可以使用CDS语言创建一个新的CDS Hierarchy View,定义产品分类的层次结构。您还可以定义其他与库存相关的属性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ROS Learning-022 learning_tf-06(编程) 现在与过去中穿梭 (Python版) --- waitForTransformFull() 函数

ROS Indigo learning_tf-06 现在与过去中穿梭 (Python版) — waitForTransformFull() 函数我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo 一 . 前言这一节要做的事情:使用 tf 的一个强大功能:可以再现在与过去中穿梭。(就是:

AoboSir.com 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: ROS导航仿真和多点导航1———导航仿真
下一篇: python播放音频文件——playsound
BAIFOL
博客等级 码龄5年 116粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值