ROS-TF的使用(常用功能)
tf 使用_人非人1991的博客-CSDN博客
一、TF中的数据格式:
这些数据格式全都是class
头文件:#include <tf/transform_datatypes.h>基本上可以包含所有的tf数据类型
(1)tf::Vector3
tf::Vector3 point;
默认构造一个对象:tf::Vector3(float x, float y, float z)
对于tf::Vector3对象还有set与get方法。
1)举例:构造一个xyz分别为0,0,0的对象 tf::Vector3(0,0,0)
2)举例:使用geometry_msgs::PoseStampedPtr pose构造一个对象
tf::Vector3(pose->pose.position.x,pose->pose.position.y,pose->pose.position.z)
(2)tf::Quaternion
tf::Quaternion q;
1) 举例:使用geometry_msgs::PoseStampedPtr pose构造一个对象
tf::quaternionMsgToTF(pose->pose.orientation,q); //把geomsg形式的四元数转化为tf形式,得到q
2) q.setRPY(Rtheta,Ptheta,Ytheta);//根据已经知道的欧拉角进行设置q,分别是child_frame绕着frame
坐标系下的roll(绕X轴),pitch(绕Y轴),yaw(绕Z轴)
已知q,获取roll,pitch,yaw
tf::Matrix3x3(q).getRPY(roll,pitch,yaw);
3)tf_q = tf::createQuaternionFromYaw( theta ); theta是绕z轴旋转角,其他两个轴旋转角为0;
tf_q = tf::createQuaternionFromRollPitchYaw(roll,pitch,yaw);
如要生成ros_q,可以直接使用 :ros_q = tf::createQuaternionMsgFromYaw(theta);
ros_q = tf::createQuaternionMsgFromRollPitchYaw(roll,pitch,yaw);
4) q = tf::Quaternion(0,0,0,1);//直接通过参数设置q,0,0,0,1代表没有任何旋转
拓展:把tf四元数转化为geomsg四元数
geometry_msg::Quaternion msg_q;
tf::quaternionTFToMsg(tf_q,msg_q);
(3)tf::Transform
tf::Transform transform
1) transform = tf::Transform( tf::Quaternion(0,0,0,1) , tf::Vector3(0,0,0) ); //使用参数初始化,得到transform
2) transform. setRotation( tf_q );
transform.setOrigin( tf_point ); //通过set方法得到transform
(4)tf::StampedTransform
这种类型是由tf::Transform作为父类继承而来的
tf::StampedTransform stamped_transform
stamped_transform = tf::StampedTransform( transform, ros::Time::now(), "frame", "child_frame"); //使用参数初始化得到
可以直接获取stamped_transform.getRotation(), stamped_transform.getOrigin();
二、tf::TransformBroadcaster
发布TF
头文件:#include< tf / transform_broadcaster.h >
tf::TransformBroadcaster broadcaster; //定义发布器
broadcaster.sendTransform( stamped_transform ) ; //发布一个tf,stamped_transform是一个tf::StampedTransform类型的数据。
三、tf::TransformListener
头文件:#include< tf / transform_listener.h>
tf::TransformListener listener //定义监听器
(1)lookuoTransform(); //获取tf
tf::StampedTransform stamped_transform; //定义存放变换关系的变量
try
{
//得到child_frame坐标系原点,在frame坐标系下的坐标与旋转角度listener.lookupTransform("frame", "child_frame",ros::Time(0), stamped_transform);
}catch (tf::TransformException &ex)
{ROS_ERROR("%s",ex.what());ros::Duration(1.0).sleep();continue;
}
获取到stamped_transform后可以使用这些信息
transform.getOrigin().x()
transform.getOrigin().y()transform.getRotation().getW();
transform.getRotation().getX();
transform.getRotation().getY();
transform.getRotation().getZ();
(2)transformPoint()
在实际应用中需要将一个坐标系下的点转化到另一个坐标系下
//将child_frame坐标系下的Point1,转化到frame坐标系下,存储在point2中
geometry_msgs::PointStamped point1;
point1.header.stamp=ros::Time();
point1.header.frame_id="child_frame";
point1.point.x=1;
point1.point.y=2;
point1.point.z=3;
geometry_msgs::PointStamped point2;
try
{listener.transformPoint("frame",point1,point2);
}
catch (tf::TransformException &ex)
{ROS_ERROR("%s",ex.what());ros::Duration(1.0).sleep();}
四、四元数转欧拉角
/*********四元数转欧拉角********/
tf::Quaternion tf_q;
tf::quaternionMsgToTF(amcl_pose.pose.pose.orientation,tf_q);
double roll,pitch,yaw;
tf::Matrix3x3(tf_q).getRPY(roll,pitch,yaw);//四元数转yaw角
tf::getYaw(tf_q);
tf::getYaw(ros_q);/********欧拉角转四元数*****/
ros_q = tf::createQuaternionMsgFromYaw(yaw);
rt_q = f::createQuaternionFromYaw(yaw);
ros_q = tf::createQuaternionMsgFromRollPitchYaw(roll,pitch,yaw);
tf_q = tf::createQuaternionFromRollPitchYaw(roll,pitch,yaw);
tf_q.setRPY(roll,pitch,yaw);void GetXYZWFromRPY(double roll, double pitch, double yaw, double& x, double& y, double& z, double& w)
{roll /= 2;pitch /= 2;yaw /= 2;x = sin(roll) * cos(pitch) * cos(yaw) - cos(roll) * sin(pitch) * sin(yaw);y = cos(roll) * sin(pitch) * cos(yaw) + sin(roll) * cos(pitch) * sin(yaw);z = cos(roll) * cos(pitch) * sin(yaw) - sin(roll) * sin(pitch) * cos(yaw);w = cos(roll) * cos(pitch) * cos(yaw) + sin(roll) * sin(pitch) * sin(yaw);
}
五、已知tf::Transform tf 和其中一个坐标系下的 pose 可以将其转化到另一个坐标系下
geometry_msgs::Pose transformPose(geometry_msgs::Pose &pose, tf::Transform &tf)
{tf::Pose tf_pose;tf::poseMsgToTF(pose,tf_pose);tf_pose = tf * tf_pose;geometry_msgs::Pose ros_pose;tf::poseTFToMsg(tf_pose, ros_pose);return ros_pose;
}
ROS-TF的使用(常用功能)相关推荐
- 5 ROS的安装与常用操作简介
5.1 ROS是什么? ROS(Robot Operating System机器人操作系统)是面向机器人的开源的元操作系统(meta-operating system).它能够提供类似传统操作系统的诸 ...
- asp.net 常用功能
每每看到一些月经贴 日日贴的时候很费解 这里想搜集一些大家平时用到的常见功能代码或者组建之类的. 我列举一下. asp.net 常用功能 1各种导入导出 2各种上传下载(大文件,多文件,进度条,无刷 ...
- ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包
ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...
- ROS TF原理和使用方法
ROS TF介绍 一.TF是什么? 1.TF是ROS的一个包(package) 2.TF能让用户随时记录各种坐标系之间的变换关系 3.TF能让用户在一个坐标系中进行坐标运算,并将转换关系后的位置关系传 ...
- nginx介绍及常用功能
什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...
- Photoshop抠图、污点处理等常用功能及快捷键
Photoshop抠图.污点处理等常用功能及快捷键 局部图片获取 图片污点修护 各种乱七八糟的常用东西 常用快捷键 常用功能的查看与设置 局部图片获取 a.钢笔工具创建路径后改为选区 b.选区工具3连 ...
- SAP MM不常用功能之供应商Rebate
SAP MM不常用功能之供应商Rebate 采购中的返利流程 返利协议是卖方和买方之间签订的合同,在供应特定价值的物料时给予一定百分比的折扣. 下面是SAP系统中实现该业务场景的具体步骤. Step ...
- SAP QM 不常用功能点之 Physical-Sample Record
SAP QM 不常用功能点之 Physical-Sample Record A record that contains all master data and transaction data fo ...
- 大白菜软件常用功能介绍
大白菜软件常用功能介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.刻录光盘介绍 1.选择你需要的刻录的光盘 2.点击刻录光盘 3.确认之后点击刻录 4.等待刻录完成 转载于 ...
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
最新文章
- 超级网管员原有QQ群己满,现增加新群
- webServer tomcat5/tomcat6/tomcat7诠释
- tomcat如何查找请求资源的?
- 工信部副部长怀进鹏:信息产业呈现四大发展特点
- Access 利用模版实现条码打印功能
- 经典实战教程!java编译器eclipse
- cssrem转换工具_微信小程序开发-rem转换rpx小工具
- MySQL双主高可用架构之MMM实战
- 舒尔特表-最终版 js
- 十年优秀网络玄幻小说大点评(推荐)
- 【PS | 学习】蛋黄酥海报制作
- CBAM、通道注意力、空间注意力学习
- Linux 平台上的软件包管理
- Android之雪花飘落效果
- 【小技术】数据库显示“远程过程调用失败”怎么办?
- three.js和D3.js
- 企业微信封号规则及解封
- 35款 JavaScript 图形图表库
- 信息化项目网络安全方案编制
- 中英文说明书丨 AbFluor 488 细胞凋亡检测试剂盒