ROS:TF变换

文章详细介绍了ROS(TurtleBot)中用于处理坐标系变换的TF消息格式,包括TransformStamped.msg的结构,以及如何使用TFTransformBroadcaster发送和TFTransformListener接收这些变换信息。同时提到了C++和Python中的相关数据类型和函数。
摘要由CSDN通过智能技术生成

一.TF变换数据格式(msg)

TransformStamped.msg(两个坐标系之间转换)

std_msgs/Header header

        uint32 seq
        time stamp
        string frame_id        指明哪一个坐标系(父坐标系)
string child_frame_id        子坐标系
geometry_msgs/Transform transform

        geometry_msgs/Vector3 translation        表示平移

                float64 x
                float64 y
                float64 z
        geometry_msgs/Quaternion rotation        表示旋转(四元数)

                float64 x
                float64 y
                float64 z
                float64 w

参考:geometry_msgs/TransformStamped Documentation (ros.org) 

 tf/tfMessage.msg和tf2_msgs/TFMessage.msg(TF树变换关系)

rostopic info /tf 查看当前是那种TF msg

geometry_msgs/TransformStamped[] transforms  其实质就是TransformStamped.msg数组

        std_msgs/Header header

                uint32 seq
                time stamp
                string frame_id
        string child_frame_id
        geometry_msgs/Transform transform

                geometry_msgs/Vector3 translation

                        float64 x
                        float64 y
                        float64 z
                geometry_msgs/Quaternion rotation

                        float64 x
                        float64 y
                        float64 z
                        float64 w

参考:tf2_msgs/TFMessage Documentation (ros.org) 

二.TF相关数据类型 

C++相关数据类型:

向量                                tf::Vector3

点                                    tf::Point

四元数                             tf::Quaternion

3×3矩阵(旋转矩阵)         tf::Matrix3×3

位姿                                tf::Pose

变换                                tf::Transform

带时间戳的以上类型       tf::Stamped<T>

带时间戳的变换              tf::StampedTransform

 

 三.tf::TransformBroadcaster类,发送TF

void 

sendTransform (const StampedTransform &transform)

void sendTransform (const std::vector< StampedTransform > &transforms)
void sendTransform (const geometry_msgs::TransformStamped &transform)
void sendTransform (const std::vector< geometry_msgs::TransformStamped > &transforms)
TransformBroadcaster ()

参考:tf: tf::TransformBroadcaster Class Reference (ros.org) 

四.tf::TransformListener类,接受TF

void Transformer::lookupTransform(const std::string & target_frame,
const std::string & source_frame,
const ros::Time & time,
StampedTransform & transform 
)const

具体含义:把time时刻,source_frame坐标系转为target_frame坐标系,其具体转变方法存储在transform中。 

其中time:ros::Time(0)表示最新的转换时刻。(不是ros::Time::now())

参考:tf: tf::Transformer Class Reference (ros.org) 

bool Transformer::waitForTransform(const std::string & target_frame,
const std::string & source_frame,
const ros::Time & time,
const ros::Duration & timeout,
const ros::Duration & polling_sleep_duration = ros::Duration(0.01),
std::string * error_msg = NULL 
)const

具体含义:等待两个frame连通。 

参考:tf: tf::Transformer Class Reference (ros.org) 

 bool canTransform()

具体含义:表明两个frame是否连通。 

 五.python相关

1.python相关数据类型

向量、点、四元数、矩阵都表示成类似数组形式

Tuple、List、Numpy、Array通用

例如:

t=(1.0, 1.5, 0)                #平移

q=[1, 0, 0, 0]                  #四元数

m=numpy.identity(3)      #旋转矩阵(单位矩阵)

2.tf.transformations 

 3.tf.TransformListener类

其中,time一般为rospy.Time(0)表示最新时刻变换,不是rospy.Time.now().

4.tf.TransformBroadcaster类

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值