数据预处理(17)_坐标转换,tf::StampedTransform =」 Eigen::Matrix4f

在开发的过程中,通常会遇到坐标转换的问题,比如从传感器坐标系src,到车体坐标系ref。通常可以分为3步:
第一步:监听TF

bool getTF(const ros::Time&query_time,const std::string& ref,const std::string& src,tf::StampedTransform& transform)
{
	    try 
	    {
	        tf::TransformListener* tf_=new tf::TransformListener();
	       	tf_->waitForTransform(ref,src,query_time,ros::Duration(0.01));
	        tf_->.lookupTransform(ref,src,query_time,transform);
	        return true;
    	} 
    	catch (tf::TransformException &ex) 
    	{
        	return false;
    	}
}

第二步:tf::StampedTransform => Eigen::Matrix4f 转换

bool TFListener::TransformToMatrix(const tf::StampedTransform& transform, Eigen::Matrix4f& transform_matrix) 
{
    Eigen::Translation3f tl_btol(
    transform.getOrigin().getX(), 
    transform.getOrigin().getY(), 
    transform.getOrigin().getZ());
    double roll, pitch, yaw;
    tf::Matrix3x3(transform.getRotation()).getEulerYPR(yaw, pitch, roll);
    Eigen::AngleAxisf rot_x_btol(roll, Eigen::Vector3f::UnitX());
    Eigen::AngleAxisf rot_y_btol(pitch, Eigen::Vector3f::UnitY());
    Eigen::AngleAxisf rot_z_btol(yaw, Eigen::Vector3f::UnitZ());
    transform_matrix = (tl_btol * rot_z_btol * rot_y_btol * rot_x_btol).matrix();
    return true;
}

第三步:坐标变换,以点云为例。
将source_cloud经过transform_matrix转换矩阵得到新的点云filtered_pc

pcl::PointCloud<pcl::PointXYZI>::Ptr filtered_pc(new pcl::PointCloud<pcl::PointXYZI>)
pcl::tranformPointCloud(*source_cloud,*filtered_pc,transform_matrix);

当然这里只是其中一种针对点云批量转换的写法,如果只是想转换传感器坐标系下的一个点(比如传感器坐标系下的一个障碍物),可以直接通过transform进行转换,也可以通过数学坐标变换关系完成。下一节会对这两种方式作介绍。

热门文章

暂无图片
编程学习 ·

命令模式

菜鸟教程中代理模式总结)1.定义:将请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令 的合适的对象,并把该命令传给相应的对象,该对象执行命令。 2.主要解决:行为请求者与行为实现者通常是一种紧耦合的关系,为了消除这种耦合关系 3.何时使用:命…
暂无图片
编程学习 ·

电解电容的遇到的问题

目前板子遇到一个问题: 电解电容串在语音的输出端(470的电容)出现电容两边的电压差比较大,正极为5.68V,负极输出为1.34V。由于电压达不到要求,系统不能正常工作 百度看到一些相关描述,怀疑有关系。将电解电容更换后恢复正常。 百度问题: 电解电容的电压是什么意思?必须…
暂无图片
编程学习 ·

Linux下用ls和du命令查看文件以及文件夹大小

ls的用法 ls -l |grep “^-”|wc -l或find ./company -type f | wc -l 查看某文件夹下文件的个数,包括子文件夹里的。 ls -lR|grep “^-”|wc -l 查看某文件夹下文件夹的个数,包括子文件夹里的。 ls -lR|grep “^d”|wc -l 说明:ls -l 长列表输出该目录下文件信息(注意这里…
暂无图片
编程学习 ·

Android开发第三方库的使用和集成

一、第三方SDK开发App开发APP开发是指的具体某个具体的项目,更倾向于用户体验、功能更偏于特定业务、讲究的是快速迭代、快速占领市场,通常会涉及到多个模块或者多个业务场景。SDK开发SDK 是为APP服务的,提供的大多是公共基础服务,如网络请求、打点统计、帐号服务等,在App…
暂无图片
编程学习 ·

EasyNTS上云网关内配置EasyNVR云终端成功后显示设备离线问题解决

之前为大家简单介绍过EasyNTS上云网关,一部分是为了进行网络穿透而产生的设备,目前有部分用户已经在进行了内测,我们也会收集一些内测用户的问题,集中排查解决,以达到更好的使用效果。有的用户在EasyNTS上云网关内进行流媒体终端EasyNVR硬件配置测试时,设备已经配置完成,…
暂无图片
编程学习 ·

Netty

Netty是什么?异步事件驱动的网络应用框架,可以快速开发一个可维护的高性能的服务端和客户端。都是谁在用Netty?Dubbo、zk、RocketMQ、es、Spring5(对于Http协议的实现)、Spak等大型开源项目使用Netty作为底层通讯的实现。Netty中的核心概念是什么?1、Channel管道,是对Sock…
暂无图片
编程学习 ·

Video Summarization with Long Short-Term Memory论文翻译

基于长短期记忆网络的视频摘要 文章目录基于长短期记忆网络的视频摘要Abstract1 introduction2 Related Work3 Approach3.1 Problem Statement3.2 Long Short-Term Memory (LSTM)3.3 vsLSTM for Video Summarization3.4 Enhancing vsLSTM by Modeling Pairwise Repulsiveness3…
暂无图片
编程学习 ·

代码优化

也许有人会感觉CR没有什么卵用,只要我代码实现了功能,我完成了开发任务,我就OK了,为啥还要CR??但是CR真的是有必要的,你不仅可以发现自己代码中的不足之处,待优化点,简洁明了的代码易读别人接手也会很快。1. 比如在vue项目中只有某一个组件用某一个特别长的常量对象,…
暂无图片
编程学习 ·

sed详解

1. Sed简介sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有…
暂无图片
编程学习 ·

Linux下Flume的安装

Linux下Flume的安装 一、前置条件 Flume 需要依赖 JDK 1.8+,JDK 参考:Linux下JDK的安装二 、安装步骤 2.1 下载并解压 下载所需版本的 Flume,这里我下载的是 Apache 版本的 Flume。下载地址为:http://www.apache.org/dyn/closer.lua/flume/1.9.0/apache-flume-1.9.0-bin.ta…
暂无图片
编程学习 ·

开启阿里云对象存储OSS防误删新功能,保护您珍贵的数据。

一、背景阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。OSS 每年都会遇到多起客户误删除数据的事件,为…
暂无图片
编程学习 ·

python学习(一)

编写比较通用的一个可以画出像图4中那样花朵的函数集。import math import turtle def polyline(t, n, length, angle):"""Draws n line segments.t: Turtle objectn: number of line segmentslength: length of each segmentangle: degrees between segments&q…
暂无图片
编程学习 ·

计算机基础————存储单位and数制位

存储单位 最小存储单位:bit 存储0或者1的空间 基本存储单位:byte 1Byte=8bit 1KB=2^10Byte=1024Byte 1MB=210KB=1024KB GB=1024MB TB=1024GB 数制位 二进制:每一位由0-1组成,满2进1 权为2 101011110 十进制:每一位0-9组成,满10进1 权为10 95 八进制:每一位…
暂无图片
编程学习 ·

setuptools Command Reference

https://setuptools.readthedocs.io/en/latest/setuptools.html#command-reference alias - Define shortcuts for commonly used commands bdist_egg - Create a Python Egg for the project develop - Deploy the project source in “Development Mode” egg_info - Create …
暂无图片
编程学习 ·

JavaScript从入门到精通复习资料大全(基础知识篇)

JavaScript从入门到精通复习一、JavaScript中的常量和变量1、常量:就是程序运行过程中,保持不变的数据。2、变量:是程序中一个已经命名的存储单元。3、 变量的赋值二:JavaScript中的运算符1、算术运算符2、比较运算符3、赋值运算符4、字符串运算符5、 逻辑运算符6、条件运…
暂无图片
编程学习 ·

生成文件时加序号

生成的文件按序号01,02,03,04去排列,有需要的同学可以使用,希望可以帮到你public static String generateName(File fil,final String fileName){int count = fil.listFiles(new FileFilter(){public boolean accept(File file){if(file.getName().startsWith(fileName))…
暂无图片
编程学习 ·

Spring

1、概述 1.1、简介Spring:春天------>给软件行业带来了春天 2002,首次推出了Spring框架的雏形,interface21框架 Spring框架即以interface21框架为基础,重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版 Rod Johnson,Spring Framework创始人,著名作者。很…
暂无图片
编程学习 ·

datax-web-2.1.2安装部署

datax-web-2.1.2安装部署 环境准备 1)基础软件安装MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库 JDK (1.8.0_xxx) 必选 DataX 必选 Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文…
暂无图片
编程学习 ·

spring cloud 学习(6) - zuul 微服务网关

微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService、ProductService、UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下面这样:前面这一层俗称为“网关层”,其存在意义在于,将"1对N"问题 转换成了"1对1”问…