• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS学习记录⑤:TF工具的使用与练习

人工智能 小黑鸭 2119次浏览 0个评论

TF工具的使用与练习

  • 1. 什么是TF
  • 2. TF的构成
  • 3. TF辅助工具
  • 4. 向TF工具广播发送自己位置
  • 5. 向TF工具收听获取坐标关系
  • 6. 通过turtlesim进行练习
  • 参考

1. 什么是TF

TF是Transformations Frames的缩写。在ROS中,是一个工具,提供了坐标转换等方面的功能。 说白了TF工具就是帮助你完成坐标转换的一个工具,有了它就不用去计算各个坐标系之间的转换了,学过机器人学的应该会对此感受颇深。

2. TF的构成

在ROS中,TF工具包包含了三块内容:BroadcasterListenerTF转换工具 ROS中提供的是TF转换工具。转换是通过两个部分来完成的。

  • Broadcaster 负责向TF工具广播 参照物 和 自己的位置 关系
  • Listener 负责向TF工具查看 想要知道的 两个物体间的相对坐标

TF工具底层是通过向量来去实现的。

3. TF辅助工具

(1)采用tf_monitor,查看当前TF树中所有坐标系的发布状态。  

rosrun tf tf_monitor

  (2)采用rqt_tf_tree,查看当前所有坐标之间的变换关系,可通过刷新更新当前树的内容。  

rosrun rqt_tf_tree rqt_tf_tree

  (3)采用tf_echo,获取reference_frame和target_frame之间的坐标变换关系。  

rosrun tf tf_echo [reference_frame] [target_frame]

 

4. 向TF工具广播发送自己位置

部分代码  

from tf.broadcaster import TransformBroadcaster
from tf.transformations import quaternion_from_euler

broadcaster = TransformBroadcaster()


def pose_callback(msg):
	if not isinstance(msg, Pose):
        return
    # 机器人在参考坐标系的位置msg.x和msg.y,姿态msg.theta
	translation = (msg.x, msg.y, 0)
	rotation = quaternion_from_euler(0, 0, msg.theta)		# 欧拉角 ->  四元素
	
	broadcaster.sendTransform(translation, rotation, rospy.Time().now(), "child", "parent")		# 发广播

  其中 quaternion_from_euler 将欧拉角转换为四元素:欧拉角,旋转矩阵。其中欧拉角:roll:x、pitch:y、yaw:z。 sendTransform 中传入的几组数分别为:

  • translation:描述位置
  • rotation:通过四元素来描述姿态
  • Time().now():time,打上时间戳
  • "child":子坐标系(机器人坐标系)
  • "parent":父坐标系(机器人的参考坐标系)

5. 向TF工具收听获取坐标关系

部分代码  

# 获取相对位置信息的listener
listener = TransformListener()

rate = rospy.Rate(10)
while not rospy.is_shutdown():

    try:
        transform = listener.lookupTransform("target_frame", "source_frame", rospy.Time())
    except:
        rate.sleep()
        continue
    
    x, y, z = transform[0] 		# 获取位置
    quat = transform[1]		# 获取姿态 (四元素) -> rpy
    roll, pitch, yaw = euler_from_quaternion(quat)

  lookupTransform 中传入的几组数分别为:

  • "target_frame":参考坐标系
  • "source_frame":求解的坐标系
  • rospy.Time():获得最近的相对位置 返回的数据为:
  • 位置:[x, y, z]
  • 姿态:[roll, pitch, yaw, w]

6. 通过turtlesim进行练习

待补充

参考

古月居的:ROS探索总结(十二)——坐标系统 C++的实现参考:ROS学习——tf坐标系统


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS学习记录⑤:TF工具的使用与练习
喜欢 (0)

您必须 登录 才能发表评论!

加载中……