ROS_TF的深入研究

TF的深入学习与研究

需求

通过本篇文章实现对TF变换的深入研究。

最终目标

掌握坐标系之间的相互转换、掌握坐标点在不同坐标系下的转换。

TF的消息格式

在坐标转换实现中常用的 geometry_msgs/TransformStamped(用于传输坐标系相关位置信息)和geometry_msgs/PointStamped(用于传输某个坐标系内坐标点的信息)

具体如下:

geometry_msgs/TransformStamped

重要内容:
父坐标系、子坐标系、位姿偏移的给定

std_msgs/Header header                     #头信息
  uint32 seq                                #|-- 序列号
  time stamp                                #|-- 时间戳
  string frame_id                            #|-- 坐标 ID
string child_frame_id                    #子坐标系的 id
geometry_msgs/Transform transform        #坐标信息
  geometry_msgs/Vector3 translation        #偏移量
    float64 x                                #|-- X 方向的偏移量
    float64 y                                #|-- Y 方向的偏移量
    float64 z                                #|-- Z 方向上的偏移量
  geometry_msgs/Quaternion rotation        #四元数
    float64 x                                
    float64 y                                
    float64 z                                
    float64 w

geometry_msgs/PointStamped

重要内容:
指定坐标系、坐标系下的位置

std_msgs/Header header                    #头
  uint32 seq                                #|-- 序号
  time stamp                                #|-- 时间戳
  string frame_id                            #|-- 所属坐标系的 id
geometry_msgs/Point point                #点坐标
  float64 x                                    #|-- x y z 坐标
  float64 y
  float64 z

静态坐标系之间的关系转换

静态坐标系是指两个坐标系之间关系的相对位姿关系不发生改变

实现流程:

  • 发布方:通过静态广播器的形式发布相对坐标系的位姿关系
    1、创建 静态坐标广播器
    broadcaster = tf2_ros.StaticTransformBroadcaster()
    2、组织坐标系的相关消息
    tfs = TransformStamped()
    3、广播器发送消息
    broadcaster.sendTransform(tfs)

  • 订阅方:订阅广播发布的内容,并处理坐标点在不同坐标系下的转换

    1、创建缓存对象,用来存放消息
    buffer = tf2_ros.Buffer()
    2、创建监听对象,监听发布的坐标相对关系
    listener = tf2_ros.TransformListener(buffer)
    3、将点坐标转换成相对于 world 的坐标
    point_target = buffer.transform(point_source,“world”)

动态坐标系之间的关系转换

动态坐标系是指:两个坐标系之间的位姿关系在不断发生改变

实现流程:

  • 发布方:将一个坐标系视为一个坐标点,获得其坐标点的位姿关系进行转换
    1、订阅一个坐标系(视为坐标点)在另一个坐标系下的位置话题
    2、创建回调函数,接收位置信息
    3、在回调函数中,创建广播器
    broadcaster = tf2_ros.TransformBroadcaster()
    4、组织发布的数据
    tfs = TransformStamped()
    5、广播器发送数据
    broadcaster.sendTransform(tfs)
  • 订阅方:订阅数据
    1、创建缓存区域
    buffer = tf2_ros.Buffer()
    2、创建监听对象
    listener = tf2_ros.TransformListener(buffer)
    3、实现坐标点在不同坐标系下的转换
    point_target = buffer.transform(point_source,“world”,rospy.Duration(1))

关键

1、将一个坐标系视为坐标点,找到关于这个坐标点在另一个坐标系下的位置话题,进行消息格式的转换
2、广播发送消息后,进行后续转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值