ROS之tf2坐标转换包
参考资源:
tf2资源:
官网:http://wiki.ros.org/tf2
http://wiki.ros.org/tf2/Tutorials
API: http://docs.ros.org/jade/api/tf2/html/index.html
在tf2系统中,将包分为tf2和tf2_ros,前者用来进行坐标变换等具体操作,tf2_ros则负责与ROS消息打交道,负责发布tf或订阅tf,即发布者和订阅者是在tf2_ros命名空间下的。
ROS中广播和监听的tf2消息类型是tf2_msgs::TFMessage,其本质是
geometry_msgs/TransformStamped类型的向量形式
geometry_msgs/TransformStamped[] transformsstd_msgs/Header headeruint32 seqtime stampstring frame_idstring child_frame_idgeometry_msgs/Transform transformgeometry_msgs/Vector3 translationfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion rotationfloat64 xfloat64 yfloat64 zfloat64 w
tf2_ros wiki:http://wiki.ros.org/tf2_ros?distro=melodic
tf2_ros API: http://docs.ros.org/kinetic/api/tf2_ros/html/c++/
广播tf2:
#include <tf2_ros/transform_listener.h>
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
#include <geometry_msgs/TransformStamped.h>
#include <geometry_msgs/PointStamped.h>static tf2_ros::TransformBroadcaster br;geometry_msgs::TransformStamped transformStamped;transformStamped.header.stamp = ros::Time::now();transformStamped.header.frame_id = "world";transformStamped.child_frame_id = turtle_name;transformStamped.transform.translation.x = msg->x;transformStamped.transform.translation.y = msg->y;transformStamped.transform.translation.z = 0.0;tf2::Quaternion q;q.setRPY(0, 0, msg->theta);transformStamped.transform.rotation.x = q.x();transformStamped.transform.rotation.y = q.y();transformStamped.transform.rotation.z = q.z();transformStamped.transform.rotation.w = q.w();br.sendTransform(transformStamped);
监听tf2:
使用tf2消息的大部分工作通过tf2_ros::Buffer
类完成,其通过tf2_ros::TransformListener
完成对tf2_ros::Buffer
类的初始化和构造,并订阅相应tf消息,后续操作都是用的tf2_ros::Buffer
类的成员函数完成:
#include <tf2_ros/transform_listener.h>
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
#include <geometry_msgs/TransformStamped.h>
#include <geometry_msgs/PointStamped.h>
....
tf2_ros::Buffer tfBuffer;tf2_ros::TransformListener tfListener(tfBuffer);ros::Rate rate(10.0);while (node.ok()){geometry_msgs::TransformStamped transformStamped;try{transformStamped = tfBuffer.lookupTransform("turtle2", "turtle1",ros::Time(0), ros::Duration(3.0));geometry_msgs::PointStamped world, velo_link;tfBuffer.transform<geometry_msgs::PointStamped>(world, velo_link, "velo_link", ros::Duration(1.0));}catch (tf2::TransformException &ex) {ROS_WARN("%s",ex.what());ros::Duration(1.0).sleep();continue;}}
数据类型变换:
https://answers.ros.org/question/261419/tf2-transformpose-in-c/
https://answers.ros.org/question/95791/tf-transformpoint-equivalent-on-tf2/
点云转换:
https://github.com/lucasw/transform_point_cloud
ROS之tf2坐标转换包相关推荐
- ros之TF坐标转换
ros之TF坐标转换 1.c++ demo01_turtle1.cpp #include <iostream> #include <ros/ros.h> #include &l ...
- 【机器人操作系统】ROS工作空间及功能包的创建
ROS工作空间及功能包的创建 摘要: 总结ROS工作空间及功能包的创建的具体步骤及命令: 工作空间/功能包的创建的步骤大同小异: step1.创建工作空间/功能包: step2.编译工作空间/功能包: ...
- 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解
本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分七个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EK ...
- ros --- 录制imu bag包 和 imu标定
ros --- base notes ( tf ...) 1. ros 录制imu bag包 2. imu标定 创建 launch 文件 1. ros 录制imu bag包 rosbag 指令 ros ...
- ROS系列——image-transport功能包没有发布compressed图像Topic的原因
ROS系列--image-transport功能包没有发布compressed图像Topic的原因 说明 解决 说明 自己开发了摄像头图像发布节点,但是运行节点发现只有image_transportd ...
- ROS系列——mavros功能包中常用话题和服务介绍,包括消息名称、类型、头文件、成员变量、示例代码
ROS系列--mavros功能包中常用话题和服务介绍,包括消息名称.类型.头文件.成员变量.示例代码 官方链接 常用话题 订阅 1.1 系统状态 1.2 GPS数据 1.3 本地位置 1.4 三轴速度 ...
- ros中使用serial包实现串口通信
一.Ubuntu下的串口助手cutecom 1.安装cutecom并打开: sudo apt-get install cutecom sudo cutecom 2.查看电脑链接的串口信息(名称): d ...
- ubuntu 20.04 ROS Noetic 无serial包解决方法
ubuntu 20.04 ROS Noetic 无serial包解决方法 在ros-noetic版本之前的ros-kinetic或者ros-meldic版本,进行串口通信的时候可以采用 sudo ap ...
- ROS学习——tf2
一.TF2简介 Since ROS Hydro, tf has been "deprecated" in favor of tf2. tf2 is an iteration on ...
最新文章
- Dynamic Setting ImageUrl In DataPager
- 浅谈电量传感器在数据中心的UPS电源中的应用
- Centos 7 安装NodeJS开发环境
- Spring注解开发-初始化/销毁方法注解
- 多重背包单调队列优化思路_动态规划入门——多重背包与单调优化
- 网关 Spring Cloud Gateway
- linux redis-4.0,Linux Redis 4.0.2 安装部署
- python中number函数_Python 数字(Number)
- Bootstrap 可切换的标签导航
- 解析对偶理论与对偶单纯性法
- 若依(RuoYi)如何不登录直接访问?
- LTE下行资源分配方式
- Linux快捷方式There was an error launching the application
- 暑假教师计算机培训总结,关于暑期教师信息技术培训总结范文
- 【Fracturing amp; Destruction】Unity3D的物体爆裂、炸裂、碎裂效果
- D3.js从入门指南
- C primer plus编程练习-第7章
- img文件制作linux启动u盘,如何在Linux系统中制作可启动img/iso镜像文件
- 5.1再次优化httpserver
- 《被讨厌的勇气》- 一切烦恼都来自人际关系
热门文章
- 基于Matlab的图像几何变换实现
- c语言精确线搜索抛物线法,一维迭代搜索(黄金分割法抛物线法).ppt
- ngnix有版本要求吗_魔兽世界:暴雪疯了?新版本老玩家遭重大削弱,这是逼人AFK?...
- Spring中AOP实现
- matlab中的脚本与函数、自相关函数corr,xcorr,corrcoef的应用
- 区块链软件开发公司谈区块链为什么被大众所接受
- 作为测试人员,从哪几个方面保证产品质量呢
- 查办总统丑闻的韩国检方受到黑客攻击
- 产品力品牌力双重加码,育润羊奶粉新品强势来袭
- 即将开源,码晒客/疯狂创意二维码,个性二维码底层。