其他分享
首页 > 其他分享> > ROS tf使用

ROS tf使用

作者:互联网

目录

发布tf

  1. 定义一个广播,利用它发布坐标系转换关系话题
static tf::TransformBroadcaster br;
  1. 定义存Transform信息: 旋转和平移
tf::Transform transform;

2.1 设置坐标原点

transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );

setOrigin()函数的参数类型需要为tf::Vector3类型
假设是要发布一个子坐标系为”turtle1”父坐标系为“world”,那么其中(msg->x,msg->y,0.0)是指“turtle1”的坐标原点在“world”坐标系下的坐标。

2.2 设置四元数

 // 根据 欧拉角设置
tf::Quaternion q;
q.setRPY(0, 0, msg->theta);
transform.setRotation(q);
//根据四元数设置
transform.setRotation( tf::Quaternion(0, 0, 0, 1) ); 

setRPY()函数的参数为”turtle1”在“world”坐标系下的roll(绕X轴),pitch(绕Y轴),yaw(绕Z轴);为了确保转换正确强烈建议,在转换完后,运行下程序,打开rviz下使用确认下转换是否正确.

  1. 将变换广播出去
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));
  1. transform:存储变换关系的变量;
  2. ros::Time::now():广播tf使的时间戳;
  3. “world”:父坐标系的名字;turtle_name:子坐标系的名字

总结一下,假设你在机器人上应用,如果你知道机器人的位置x,y,z,与三个旋转角roll,pitch,yaw就可以广播一个tf了

获取tf

通过监听tf,我们可以避免繁琐的旋转矩阵的计算,而直接获取我们需要的相关信息。
在监听中我最常用两个函数:

lookupTransform();
transformPoint();

参考

tf 使用

标签:turtle1,transform,msg,使用,tf,world,ROS,坐标系
来源: https://www.cnblogs.com/flyinggod/p/16166845.html