利用listener监听者监听可以获取任意两个TF坐标系之间的位置关系
-
代码实例:
tf::TransformListener listener;//创建监听者 tf::StampedTransform transform;//创建一个对象用来保存位置关系 try{ listener.lookupTransform(frame_id, ns, ros::Time(0), transform);//frame_id和ns可以为任意两个无直接关系的坐标系 } catch (tf::TransformException ex){ ROS_ERROR("%s",ex.what()); ros::Duration(1.0).sleep(); } //从transform中获取坐标点位 point.x = transform.getOrigin().x(); point.y = transform.getOrigin().y(); point.z = transform.getOrigin().z();
-
target_frame,这里理解为 数据应转换到的frame, 也就是 tf 的 frame_id ;source_frame ,这里理解为 数据来源的frame, 也就是 tf 的 child_frame_id
-
源代码:
void lookupTransform(const std::string& target_frame,
const std::string& source_frame,
const ros::Time& time,
StampedTransform& transform) const;
-
ros::Time(0),这里时间使用ros::Time(0)获取最新的变化,不使用ros::Time::now()因为程序运行会有延迟无法得到最新时刻的数据。