做网站视频网站,上虞区住房和城乡建设局网站,网站什么做的,软件开发培训机构1.TF基本概念
#xff08;1#xff09;什么是TF#xff1f; TF是Transformations Frames的缩写。在ROS中#xff0c;是一个工具包#xff0c;提供了坐标转换等方面的功能。 tf工具包#xff0c;底层实现采用的是一种树状数据结构#xff0c;根据时间缓冲并维护多个参考…1.TF基本概念
1什么是TF TF是Transformations Frames的缩写。在ROS中是一个工具包提供了坐标转换等方面的功能。 tf工具包底层实现采用的是一种树状数据结构根据时间缓冲并维护多个参考系之间的坐标变换关系可以帮助程序员在任意时间将点、向量等数据的坐标在两个参考系中完成坐标变换。 2为什么需要坐标转换 坐标转换最主要要解决的是位置和姿态问题。 3什么是位置 我在哪里说的就是位置问题。 4什么是姿态我摆了个什么造型给你看是横着的竖着的躺着的这个就是姿态。 其实坐标转换解决的问题是 我在什么位置摆了个什么造型的问题。 其实描述一个物体的位置我们有很多种方式。 例如我们描述一下月球的位置 上图中我们可以说月亮在地球的左上方xxx公里也可以说在火星左下方xxx公里。
但是如果我们看看实时运行图时 我们不能简单的描述 月亮在地球的左上方xxx公里在火星左下方xxx公里。 因为他是实时运动的这个时候我们要采用一定规则对坐标进行描述还要实时动态的计算出来。 坐标描述规则就是位置和姿态。 位置的描述也都是采用相对的策略。 实时计算就是将两两相对的位置转换为另外两两相对的位置。
2.TF使用的场景 机器人每个关节的传感和运动都是参考自身 以上面的机器人烹饪为例, 头部的视觉传感器(摄像头)参考自己, 计算出煎饼和锅距离自己的距离. 机器人的左手右手的运动又是根据自己的当前位置来控制空间坐标的移动. 如果想让机器人各个部件能够协同工作, 就要建立一种世界坐标系统, 可以让各个node节点坐标系的点和向量可以互相转换.
3.TF工作原理
坐标系 右手法则 姿态RPY roll: 翻滚 pitch: 俯仰 yaw: 偏航
TF构成 ros中tf工具包包含了三块内容Broadcaster,Listener,TF转换工具 要弄清楚怎么使用TF工具包首先我们要明确位置关系描述。 位置关系描述是通过相对坐标系来的。相对坐标系就是一个参照物我们在这个参照物下来说明自己的位置和姿态。
4.TF工作原理 ROS中提供的是TF转换工具。转换是通过两个部分来完成的。 Broadcaster负责向TF工具广播 参照物和自己的位置关系 Listener负责向TF工具查看 想要知道的两个物体间的相对坐标 TF工具底层是通过向量来去实现的。
5.案例一
TF开发流程
建立Broadcaster将小乌龟1坐标发送给TF工具
void callback(const turtlesim::Pose::ConstPtr message, tf::TransformBroadcaster broadcaster) {tf::Transform transform;//设置位置transform.setOrigin(tf::Vector3(message-x, message-y, 0));//设置姿态tf::Quaternion quaternion;quaternion.setRPY(0, 0, message-theta);transform.setRotation(quaternion);broadcaster.sendTransform(tf::StampedTransform(transform, ros::Time::now(), world, turtle1));
}我们在小乌龟pose回调中得到小乌龟相对于窗体的坐标信息(message)。 broadcaster在发送相对位置信息时需要给定两个类型的数据 在相对环境中的 坐标origin包含x,y,z坐标 在相对环境中的姿态 (rotation)包含x,y,z方向的转动情况 在发送数据时要标明谁相对谁的位置。参照物我们认为是父坐标。 建立Broadcaster将小乌龟2坐标发送给TF工具¶ 参考第1步骤 建立Listener通过查看TF工具获得小乌龟1和小乌龟2间的相对坐标
tf::TransformListener listener;
ros::Rate rate(10);
while (ros::ok()) {tf::StampedTransform transform;try {listener.lookupTransform(/turtle2, /turtle1, ros::Time(0), transform);} catch (exception e) {ROS_INFO_STREAM(e.what());rate.sleep();continue;}tf::Vector3 origin transform.getOrigin();double x origin.x();double y origin.y();const tf::Quaternion quaternion transform.getRotation();double theta quaternion.z();
}转换监听器listener可以从TF工具中获得想要的两个物体间的相对坐标。 前一个参数是作为参照物存在的坐标和姿态都是(0,0,0) 第二个参数是相对于第一个参数的参照物的坐标和姿态。
Reference
TF工作原理