【 ROS 入门 2】tf 入门学习教程总结(缺少系统整理)

【ROS官网 tf 教程】http://wiki.ros.org/tf/Tutorials

【参考博客】

  1. 三维旋转矩阵(包括任意轴的通用旋转矩阵、Euler角、单位四元数)的计算
  2. 视觉SLAM中的数学基础 第二篇 四元数
  3. ROS学习–轻松使用tf
  4. tf 使用
  5. ROS探索总结(二十二)——设置机器人的tf变换
  6. ROS之tf空间坐标变换完全详解
  7. ROS探索总结(十二)——坐标系统
  8. ROS之tf空间坐标变换浅析
  9. ROS中的tf(transform)的理解 ,你追我小乌龟的深入剖析
  10. tf(Transform Frame)变换
  11. 张宇考研数学闭关修炼,线性代数部分,163页,向量空间,相关知识

【总述】

针对上面这些博客,有的我感觉说的有道理,有的又说的比较扯淡,虽然我是入门级别,但是也是看了小20篇博客,加上官网的英文教程,总的来说,也算是入了门,知道个大概。下面我阐述一下我的观点以及看法。

如果想要实现turtle1追turtle2,需要以下几点:向世界广播两只turtle的位置,使用listener来计算如何从第二只turtle到第一只turtle,向第二只turtle的订阅话题发消息,让turtle2动起来。所以总结起来,广播是一个独立功能节点,监听是另一个功能节点来计算如何使得turtle2到达turtle1,计算出结果后,将消息发送给turtle2订阅的话题,使得turtle2动起来,故,共涉及6个结点:键盘节点(操作turtle1),turtle1节点,turtle1广播节点,listener节点,turtle2节点,turtle2广播节点

两个乌龟有坐标,分别是他们俩的名字

【注】:对于这篇文章,目前所知甚少,无法系统进行整理,为防止以后忘记,特记录下几点需要注意的地方:

  1. 创建tf需要用TransformBroadcaster,只需要创建它就可以了,他将这个坐标系的名字,位置,角度,父坐标系,进行广播。并且公布它到world坐标系的transform,注意创建的时候,就已经是sendTransform了,他发送的就是transform
    tf.TransformBroadcaster().sendTransform((0.0, 2.0, 0.0)坐标系在现时刻的相对于父坐标系的位置,(0.0, 0.0, 0.0, 1.0)相对于父坐标系的旋转角度, rospy.Time.now()时间戳, "carrot1"坐标系名称, "turtle1"父坐标系名称)

  2. 获取transform只需要一个listener就可以了,lookuptransform一般用rospy.Time(0),尽量不要用now,因为会产生消息还未到达的错误,如果一定要用now,要设置一个waitForTransform,listener.waitForTransform("/turtle2", “/carrot1”, now, rospy.Duration(4.0))在里面设置一个等待时长Duration,超时后就不再等待。这篇博客也很好:https://www.cnblogs.com/aobosir/p/5928559.html

  3. lookuptransform获取的应该是两个坐标系原点之间的xy坐标差值,和旋转角度,也就是这个transform应该是针对原点来说的,这也是为什么教程中改变,坐标系之间的变换后,turtle2追turtle1会错位的原因,因为在给turtle2消息的时候,这个消息就是针对于原点变换来说的,而不是turtle1的坐标,所以实际上是turtle2去追逐carrot1的原点。

  4. 如果是turtle2追5秒前的turtle1,一定要有一个静态全局不变的参考系,以这个参考系为桥梁,来控制turtle2的运动

  5. 对于lookupTransform,(trans,rot) = listener.lookupTransform(’/turtle2’, ‘/turtle1’, rospy.Time(0)),trans是一个数组,保存这xy坐标差值,rot是旋转角度,
    在这里插入图片描述
    可以看到是从turtle1变换到turtle2,所以turtle2是变换结果,需要的是从turtle1怎么操作,类似于平移旋转,从而达到turtle2的效果

  6. 对于rospy.Time(0):For real tf use cases, it is often perfectly fine to use Time(0). Get access to the latest available transforms in that tf tree。。
    在这里插入图片描述

    具体可以查看:https://answers.ros.org/question/243179/whats-the-diff-between-rospytime0-and-rospytimenow/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值