赞
踩
使用tf.TransformBroadcaster
类完成tf树的发布,有两个函数:
sendTransform(translation,rotation,time,child,parent)
sendTransformMessage(transform)
sendTransform(translation,rotation,time,child,parent)
需要将父子farme之间的平移、旋转手动打时间戳,然后发给/tf
案例1:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tf
import rospy
if __name__ == '__main__':
rospy.init_node('tf_test_node')
br = tf.TransformBroadcaster()
while not rospy.is_shutdown():
br.sendTransform((1,2,0),
tf.transformations.quaternion_from_euler(0,0,0),
rospy.Time.now(),"world","test")
案例2:
#!/usr/bin/env python # -*- coding:utf-8 -*- import rospy import math import tf if __name__ == '__main__': rospy.init_node('py_tf_broadcaster') br = tf.TransformBroadcaster() x=1.0 y=2.0 z=3.0 roll=0 pitch=0 yaw=1.57 rate = rospy.Rate(1) while not rospy.is_shutdown(): yaw=yaw+0.1 br.sendTransform((x,y,z), tf.transformations.quaternion_from_euler(roll,pitch,yaw), rospy.Time.now(), "base_link", "link1") rate.sleep()
sendTransformMessage(transform)
发送的是已经封装好的Message
案例:
#!/usr/bin/env python # -*- coding:utf-8 -*- import rospy import geometry_msgs.msg import tf2_ros.transform_broadcaster import math import tf if __name__ == '__main__': rospy.init_node('py_tf_broadcaster') m=tf.TransformBroadcaster() t = geometry_msgs.msg.TransformStamped() t.header.frame_id = 'base_link' t.header.stamp = rospy.Time(0) t.child_frame_id = 'link1' t.transform.translation.x = 1 t.transform.translation.y = 2 t.transform.translation.z = 3 t.transform.rotation.w=1 t.transform.rotation.x=0 t.transform.rotation.y=0 t.transform.rotation.z=0 #输入相对原点的值和欧拉角 rate = rospy.Rate(1) while not rospy.is_shutdown(): m.sendTransformMessage(t) rate.sleep()
rosrun rqt_tf_tree rqt_tf_tree
rosrun tf tf_echo [reference_frame] [target_frame]
rosrun tf view_frames
函数名称 | 函数功能 |
---|---|
tf.transformations.random_quaternion(rand=None) | 返回均匀随机单位四元数 |
tf.transformations.random_rotation_matrix(rand=None) | 返回均匀随机单位旋转矩阵 |
tf.transformations.random_vector(size) | 返回均匀随机单位向量 |
tf.transformations.translation_matrix(v) | 通过向量来求旋转矩阵 |
tf.transformations.translation_from_matrix(m) | 通过旋转矩阵来求向量 |
函数名称 | 函数功能 |
---|---|
tf.transformations.quaternion_about_axis(angle axis) | 通过旋转轴和旋转角返回四元数 |
tf.transformations.quaternion_conjugate(quaternion) | 返回四元数的共轭 |
tf.transformations.quaternion_from_euler(ai,aj,ak, axes’ryxz’) | 从欧拉角和旋转轴,求四元数 |
tf.transformations.quaternion_from_matrix(matrix) | 从旋转矩阵中,返回四元数 |
tf.transformations.quaternion_multiply(quaternion1,quaternion2) | 两个四元数相乘 |
tf.transformations.euler_matrix(ai,aj,ak,axes=‘xyz’) | 由欧拉角和旋转轴返回旋转矩阵 |
tf.transformations.euler_from_matrix(matrix) | 由旋转矩阵和特定的旋转轴返回欧拉角 |
tf.transformations.euler_from_quaternion(quaternion) | 由四元数和特定的轴得到欧拉角 |
函数 | 注释 |
---|---|
euler_matrix(ai,aj,ak,axes=‘sxyz’) | 欧拉角到矩阵 |
euler_form_matrix(matrix,axes=‘sxyz’) | 矩阵到欧拉角 |
euler_from_quaternion(quaternion,axes=‘sxyz’) | 四元数到欧拉角 |
quaternion_form_euler(ai,aj,ak,axes=‘sxyz’) | 欧拉角到四元数 |
quaternion_matrix(quaternion) | 四元数到矩阵 |
quaternion_form_matrix(matrix) | 矩阵到四元数 |
… | … |
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。