StampedTransform类
-
tf::StampedTransform 是c++类,继承tf::Transform
-
tf::Transform类中有旋转平移两个变量:
///Storage for the rotation
Matrix3x3 m_basis;
///Storage for the translation
Vector3 m_origin; -
访问:可以通过
getOrigin()访问平移m_origin,
getRotation()访问旋转m_basis(以四元数形式访问);
getBasis()访问旋转m_basis(以旋转矩阵形式访问); -
设置值:可以通过
setRotation( tf::Quaternion(x,y,z,w));设置旋转
setOrigin( tf::Vector3(x,y,z) );设置平移 -
类重载*,可以通过乘vector,实现3d点坐标变化
tf::StampedTransform& in_transform tf::Vector3 tf_point(in_point.x, in_point.y, in_point.z); tf::Vector3 tf_transformed = in_transform * tf_point;
-
其中tf::Quaternion是tf自定义的四元数类
tf::Vector3是tf自定义的vector类
tf::Matrix3x3是tf自定义的三维vector类
注意:tf::StampedTransform 和 geometry_msgs/TransformStamped.msg不同,tf::StampedTransform只能用在C++里,是C++的一个类,一种数据格式,不是一个消息。geometry_msgs/TransformStamped.msg是一个message,依赖于ROS,与语言无关(即是无论和种语言C++、Python、Java等,都可以发送该消息)。参考:
tf::StampedTransform 一般用在tf库。tf库是ROS中的旧版坐标变换库,用于处理坐标系之间的转换和广播。它是基于坐标树(Coordinate Tree)的概念,可以管理多个坐标系之间的变换关系。tf库包含了坐标变换的核心功能,如广播坐标变换、查询坐标变换等。它使用TransformBroadcaster和TransformListener实现了坐标系的广播和监听。
一般使用
void lookupTransform(const std::string& target_frame, const std::string& source_frame, const ros::Time& time, StampedTransform& transform)
监听
transform_listener.lookupTransform(target_frame, source_frame, ros::Time(0), transform);
geometry_msgs/TransformStamped.msg一般用于tf2。tf2是ROS中的新版坐标变换库,也是现在推荐使用的库。tf2库在设计上更加模块化、灵活且可扩展,具有更好的性能和稳定性。它引入了更多的功能和改进,例如支持更多数据类型、更精确的坐标变换组件(TransformStamped)、更稳定的坐标缓存等,同时还可以与ROS的时间和消息系统更好地集成。与tf类似,tf2还提供了框架来广播和监听坐标变换,通过tf2_ros包来提供ROS相关的接口。
一般使用
geometry_msgs::TransformStamped tfs = buffer.lookupTransform("son2","son1",ros::Time(0));
监听