** tf监听器**
tf::TransformListener listener;
listener.waitForTransform("/turtle2", "/turtle1", ros::Time(0), ros::Duration(3.0));
listener.lookupTransform("/turtle2", "/turtle1", ros::Time(0), transform);
这里的 waitForTransform() 传入的第一个参数是 目标坐标系 , 第二个参数是 源坐标系。/turtle2 是target_frame,这里理解为 数据应转换到的frame, 也就是 tf 的 frame_id ; /turtle1 是source_frame ,这里理解为 数据来源的frame, 也就是 tf 的 child_frame_id 。 等待的是 /turtle2 到 /turtle1 的坐标转换,ros::Time(0) 代表最近时刻的有效数据,ros::time::now() 是现在这个时刻的有效数据,不可以把 ros::Time(0) 改成 ros::time::now() ,因为监听做不到实时,会有几毫秒的延迟;最长等待 3.0 s 的时间。
Transformer::transformQuaternion()
( Transformer::transformPose () 和 Transformer::transformQuaternion()的使用方法和含义基本是一样的,这里只对 Transformer::transformPose () 做简单解释)
TransformListenerWrapper* tf_;
tf::Stamped<tf::Pose> ident (tf::Transform(tf::createIdentityQuaternion(),
tf::Vector3(0,0,0)),
ros::Time(), laser_scan->header.frame_id);
tf::Stamped<tf::Pose> laser_pose;
tf_->transformPose(base_frame_id_, ident, laser_pose);
这里传入的参数:目标坐标系、ident 是输入的 带时间戳的位姿、laser_pose 是输出的 带时间戳的位姿。
该函数主要是 查找了一个一个目标坐标系base_frame_id_ 到 ident 中的源坐标系laser 之间的 tf, ident 的中的tf转换数据会被赋值到 laser_pose 中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)