ROS tf使用
作者:互联网
目录
发布tf
- 定义一个广播,利用它发布坐标系转换关系话题
static tf::TransformBroadcaster br;
- 定义存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下使用确认下转换是否正确.
- 将变换广播出去
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));
- transform:存储变换关系的变量;
- ros::Time::now():广播tf使的时间戳;
- “world”:父坐标系的名字;turtle_name:子坐标系的名字
总结一下,假设你在机器人上应用,如果你知道机器人的位置x,y,z
,与三个旋转角roll,pitch,yaw
就可以广播一个tf了
获取tf
通过监听tf,我们可以避免繁琐的旋转矩阵的计算,而直接获取我们需要的相关信息。
在监听中我最常用两个函数:
lookupTransform();
transformPoint();
参考
标签:turtle1,transform,msg,使用,tf,world,ROS,坐标系 来源: https://www.cnblogs.com/flyinggod/p/16166845.html