一.TF变换数据格式(msg)
TransformStamped.msg(两个坐标系之间转换)
std_msgs/Header header
uint32 seq
time stamp
string frame_id 指明哪一个坐标系(父坐标系)
string child_frame_id 子坐标系
geometry_msgs/Transform transformgeometry_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 transformgeometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotationfloat64 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类