技术标签: kitti
数据采集平台: 1个彩色摄像头立体声对, 1个灰度摄像头立体声对, 1个64线激光雷达, 1个GPS/IMU
先上采集装置实物图:
坐标系统的定义如下, 其中方向以司机看向前方道路的视角给出.
Camera: x: right, y: down, z: forward
Velodyne: x: forward, y: left, z: up
GPS/IMU: x: forward, y: left, z: up
所有的坐标系统遵循右手系, 右手系的定义如下: 左图为左手系, 右图为右手系. 对于右手系,右手拇指在 Z 轴方向为正, 手掌的弯曲表示从 X 轴到 Y 轴的运动.
传感器装置平面图如下: 红色标注的为传感器, 蓝色表示传感器之间的转换
相机的布置:
彩色和灰度相机相互靠近(约6厘米), 两种立体设备的基线约为54厘米. 我们选择这样的设置, 以便为左右相机, 可以提供颜色和灰度信息. 虽然彩色相机(显然)带有颜色信息, 但灰度相机图像具有更高的对比度和更少的噪声. 所有摄像机相对于Velodyne激光扫描仪均以约10 Hz的频率同步. 雷达采集数据时,是绕着竖直轴旋转扫描,只有当雷达旋转到与相机的朝向一致时会触发相机采集图像. 我们使用时直接使用官网给出的同步且校准后的数据即可,它已将雷达数据与相机数据对齐,也就是可以认为同一文件名对应的图像数据与雷达点云数据属于同一个场景.
数据的描述:
序列的所有传感器读数都压缩到一个名为date_drive的文件中。其中日期和驱动器是记录日期和序列号的占位符。目录结构如下图所示.
时间戳存储在 timestamp.txt 中, 相应的数据子文件中提供每帧传感器的读数. txt 文件中的每一行都是由日期和时间 (以小时, 分钟, 秒为单位)组成的. 由于激光雷达具有滚动快门, 对这个传感器提供 3 个时间戳. 一个旋转的起始位置, 一个旋转的结束位置和一个用于激光雷达和相机朝向一致时触发相机采集图像的时间.
每个传感器流存储的数据格式如下:
Images: 彩色和灰度图像都使用8位PNG文件进行无损压缩存储.
OXTS: 对于每一帧,我们在一个文本文件中存储了30个不同的GPS/IMU值:地理坐标包括海拔、全球方向、速度、加速度、角速率、精度和卫星信息。加速度和角速度都是通过两个坐标系来确定的,一个是附着在车身上的(x, y, z),另一个是映射到该位置的地表切平面上(f, l, u).
Velodyne: Velodyne扫描存储为浮点二进制文件. 每个点存储有它的坐标 (x, y, z) 和一个额外的反射值 r.
同步:
为了同步传感器, 使用激光雷达的时间戳作为参考, 并考虑每一个自旋作为一帧. 在激光雷达扫描仪的底部安装了一个簧片触点, 当连续旋转的激光雷达旋转到与相机的朝向一致时,触发相机采集图像.这最小化了动态对象在范围和图像观测上的差异.
但是, GPS/IMU不能这样同步, 相反,由于它以100赫兹的频率提供更新,我们收集与激光扫描仪时间戳最接近的特定帧的信息,导致GPS/IMU和camera/Velodyne数据包之间最坏情况下的时间差为5毫秒。注意,所有的时间戳都提供了这样的信息,即任何时候的定位信息都可以很容易地通过插值得到。
相机的校准:
每天的校准参数以行为主顺序存储在calib_cam_to_cam.txt中,使用如下表示法:
,是相机的索引. 0 代表左边的灰度相机, 1 代表右边的灰度相机, 2 代表左边彩色相机, 3 代表右边彩色相机. 当使用同步和矫正过的数据时,只有带有 rect 下标的变量是相关的. 但是你最有可能使用到的是P_rect_xx. 矫正旋转矩阵
用于使图像平面共面.
将校准过 (旋转过) 的相机坐标系中的点 投射成第 i 个相机图片的点
. 其公式如下:
表示相对于参考相机 0 的基线. 为了将参考相机坐标系中的三维点 x 投影到第 i 个图像平面上的点 y, 参考相机的校准旋转矩阵
也必须考虑.
注意: 在这里,通过添加第四个零行和零列, 被扩展成了 4X4的矩阵. 并且设置
从Velodyne 坐标系到 相机坐标系的刚体变换存在于 calib_velo_to_cam.txt 文件中, 如下公式将 Velodyne 坐标系中的点投射到 第 i 个相机图片中.
Kitti官网 devkit 中的一个例子:
example transformations
-----------------------
As the transformations sometimes confuse people, here we give a short
example how points in the velodyne coordinate system can be transformed
into the camera left coordinate system.
In order to transform a homogeneous point X = [x y z 1]' from the velodyne
coordinate system to a homogeneous point Y = [u v 1]' on image plane of
camera xx, the following transformation has to be applied:
Y = P_rect_xx * R_rect_00 * (R|T)_velo_to_cam * X
To transform a point X from GPS/IMU coordinates to the image plane:
Y = P_rect_xx * R_rect_00 * (R|T)_velo_to_cam * (R|T)_imu_to_velo * X
The matrices are:
- P_rect_xx (3x4): rectfied cam 0 coordinates -> image plane
- R_rect_00 (4x4): cam 0 coordinates -> rectified cam 0 coord.
- (R|T)_velo_to_cam (4x4): velodyne coordinates -> cam 0 coordinates
- (R|T)_imu_to_velo (4x4): imu coordinates -> velodyne coordinates
Note that the (4x4) matrices above are padded with zeros and:
R_rect_00(4,4) = (R|T)_velo_to_cam(4,4) = (R|T)_imu_to_velo(4,4) = 1.
看到一个不错的解释照抄如下, 链接为: https://www.cnblogs.com/llfctt/p/9475659.html
注: 本博客只为记录学习过程,留着复习.
Aragorn’s Story
本文从鸿蒙环境搭建开始说起,并汇总了HarmonyOS智能硬件开发和应用开发的一手资料,全场景剖析HarmonyOS系统究竟是什么、如何助力开发者更便捷高效地开发应用。1.我的鸿蒙起步——开发环境搭建2.HarmonyOS智能硬件开发学习指南3.应用开发HarmonyOS应用开发学习指南...
原文链接:http://arongranberg.com/astar/docs/getstarted.php插件下载地址:http://pan.baidu.com/s/1eROqaB4题外话:最近想学习一下A*插件,由于在网上没有发现什么比较详细的教程,所以就只能上官网了。这是第一次看这么长的英语文章,翻译得不好,请见谅!概述:A*插件的核心脚本就是”astarpath.cs”,所以如果你想使用A*插件进行寻路,那么场景中一定要有一个”astarpath.cs”(并且一个场景仅有一个).
spark2.32 源码编译cdh5.15.0功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入使用的软件有apach...
/***脚本作用:关闭当前应用**代码编写:魚離ヤ吥開氺**时间:2019.03.26**代码建议者:依和乐**测试系统:安卓8.1**Auto.js版本: 4.1.1**自适配目前主流安卓手机,如有其他请自行加入修改即可使用方法:调用 关闭应用() 封装函数即可;*///测试关闭QQ应用launchApp("QQ");sleep(1500);关闭应用();//此代...
File file = new File(mFile.getOriginalFilename());FileUtils.copyInputStreamToFile(mFile.getInputStream(), file);// 会在本地产生临时文件,用完后需要删除if (file.exists()) { file.delete();}
https://www.cnblogs.com/hitcm/p/5939507.htmlhttps://google-cartographer-ros.readthedocs.io/en/latest/index.html
最近做项目需要实现一个类似于淘宝、京东首页那种滑动效果的广告。于是想到使用ViewPager,但是ViewPager本身是不支持无限左右滑动的,所以需要自己实现。目前实现无限滑动的思路大体有两个:1、将viewpager上限设置成一个很大的数,第一个页面设置到中间。然后滑动的时候,用当前的序号与viewpager页面数取余得到目标页面的序号,然后显示出来。理论上一个人不会无聊到一直左滑
在使用海思的片子的时候,文档有介绍demo板使用tftp更新固件以及使用nfs开发。现将操作做一个总结,以备后面查询。参考:https://blog.csdn.net/zhaoyun_zzz/article/details/82659337https://blog.csdn.net/zengxiaohua123/article/details/80614950tftp的增强版本:t...
Caused by: java.lang.ClassCastException:android.widget.LinearLayout$LayoutParams 最近,在android中用代码动态改变某种布局(组件)的高度时,会遇到如题所示的类转换异常。上网查了一下,如下所示:These supply parameters to the parent o
字符串的格式化在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为格式标记字符串 % 要输出的值组其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的'值组'如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为:%c...
计算机系统组成及工作原理1.计算机系统一般有硬件和软件两大系统组成。2.微型计算机系统结构由运算器、控制器、存储器、输入设备、输出设备五大部分组成。3.微型计算机的运算器由算术逻辑运算部件(ALU)、累加器和通用寄存器组成。4.微型计算机中,运算器和控制器合称为中曲处理单元(CPU)。5.冯●诺依曼计算机工作原理的设计思想就是把程序输入到计算机存储起来,然后依次执行,简称为程序存储。6.在衡量计算...