标签:turtle1 transform msg 使用 tf world ROS 坐标系
目录发布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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。