ROS之tf空间坐标变换浅析
首先tf空间坐标变化应该是ros中常用到的,所以简单熟悉了一下。我在学习过程挺痛苦的额,可能是基础不好。这一篇我是对照wiki网站和创客学习的,有不对的地方希望高手能指出。
tf
-
定义:
- tf(Transform Frame)是软件库,它会管理坐标变换树。虽然可以用数学知识来完成,但太麻烦。我们可以向机器人添加很多传感器和组件,还可以更组件的位置,这样需要添加新坐标到变换树,怎么添加呢?我们可以直接调用tf库来完成。
下面我们用例子来解释。但是我建议看是把http://wiki.ros.org/tf知识先看一遍。
先看一个简单字例子,我们给出机器人base_link和base_laser的相对位置,然后创建一个相对于base_laser的点,输出这个点相对于base_link的位置。
广播代码:
#include<ros/ros.h>
#include<tf/transform_broadcaster.h>
int main(int argc, char** argv) {
ros::init(argc, argv, "tf_publisher");
ros::NodeHandle n;
ros::Rate r(100);
tf::TransformBroadcaster broadcaster;
tf::Transform transform;
transform.setOrigin(tf::Vector3(0.1, 0, 0.2));
tf::Quaternion q;
q.setRPY(0, 0, 0);
transform.setRotation(q);
while(n.ok()) {
broadcaster.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "base_link", "base_laser")); //发布了base_link和base_laser之间的坐标关系
r.sleep();
}
return