ROS中TF变换详解

ROS发布TF变换

提示:在ROS中发布TF变换时,所使用的的角度为弧度而不是度。本文可以验证,有错误欢迎各位评论指出



ROS中发布TF变换

前言

TF变换时描述机器人各个坐标系之间的位置变换关系,在ROS中发布这些关系需要使用TF工具。TF变换具体内容可以参考官方文档:http://wiki.ros.org/tf/
TF变换需要设置的内容在ROS WiKi中已有详细介绍:
http://docs.ros.org/en/jade/api/geometry_msgs/html/msg/TransformStamped.html

发布主要由两部分构成,分别是平移和旋转变换,具体构成如下:

geometry_msgs/Vector3 translation
geometry_msgs/Quaternion rotation

平移变换主要是坐标系A—>B的坐标系原点位置关系,由三个轴的平移量构成,旋转表示坐标系A和B之间旋转关系,使用四元数来表示。理解四元数可以参考博文:https://blog.csdn.net/o_mmmm_o/article/details/90271848
理解旋转变换以及平移后,接下来通过程序设计实现TF发布。以下流程为作者抽象概括理解
发布TF变换流程:
1.建立一个广播者(TransformBroadcaster)
2.建立广播者需要广播的数据类型(TransformStamped)
3.给数据类型赋值、
4.循环广播

1.Python实现TF发布

导入python所需要的库文件:

#!/usr/bin/env python
import rospy 
import tf2_ros  # 此为广播者所在库
from geometry_msgs.msg import TransformStamped  # 此为要广播的数据类型
import tf_conversions   # 从欧拉角到四元数的转换,可以直接使用,避免自己求解

初始化节点以及广播者和广播数据,

    rospy.init_node("tf_test")
    br = tf2_ros.TransformBroadcaster()  # 广播者
    trans = TransformStamped()  # 广播数据类型
    rate = rospy.Rate(1)  # TF发布频率
    x = 0
    y = 0
    z = 0
    theat = 0  # 广播的数据类型

接下来给广播数据赋值并让广播者广播数据

	x += 0.1  # 此处实现自坐标系base_link沿着X轴和y轴方向运动,速度为0.1m/s,
	y += 0.1
	theat += 1*pi/180  # 旋转角度为1度
	trans.header.frame_id = "odom"
	trans.header.stamp = rospy.Time.now()
	trans.child_frame_id = "base_link"
	
	trans.transform.translation.x = x
	trans.transform.translation.y = y
	trans.transform.translation.z = z  #  此处将平移变换赋值
	# 接下来处理坐标系旋转  首先将欧拉角转换为四元数
	q = tf_conversions.transformations.quaternion_from_euler(0, 0, theat)
	# 给发布数据中的四元数赋值
	trans.transform.rotation.x = q[0]
	trans.transform.rotation.y = q[1]
	trans.transform.rotation.z = q[2]
	trans.transform.rotation.w = q[3]
	# 广播者广播数据
	br.sendTransform(trans)
	rate.sleep()

2.C++实现TF发布

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值