链接:https://zhuanlan.zhihu.com/p/48589754

三维扫描仪有三个误差来源:

● 线性误差(激光雷达部分/LARA)

● 测距噪声(激光雷达部分/LARA)

● 测角误差(机械偏转部分)

它的硬件包括两个部分

1、激光雷达系统(The LAser RAdar system/LARA),它的作用是发射激光,测量激光飞行时间,计算被测物体的距离。

2、机械偏转系统(The Mechanical Deflection System),它的作用是引导激光束的发射方向。偏转系统通过激光反射镜(铅垂方向转动)以及旋转整个仪器(水平方向转动)来实现全方位测量。在极坐标系中扫描仪通过水平角与竖直角来确定激光束位置。

  1. 激光雷达系统(LARA)

每一次激光测距的读数都包含误差,这个是任何设备避免不了的。测距的误差包括两部分:稳定可预测误差与随机不可预测误差。可预测误差可以通过合适的校准程序来改正:

将扫描仪的激光测距部分固定好,激光束指向一个具有已知反射率的标靶板。标靶板固定在滑轮车上,并且滑轮车可以沿着激光束走向精确地固定在某一个位置。每一个位置“i”都会做10000次距离采样(测量距离与反射率)。整个程序会自动测出不同反射率、不同距离下的测距情况。

真实距离D(i)由更高精度的激光干涉仪测得,通过对比10000次距离采样的平均值与D(i)的误差值,即可计算出改正值。我们称之为“测距校准”。距离校准可在扫描仪实时测量的同时进行实时改正,这样就能提高激光测距系统的测距精度。然而经过校准后还会存在微小的误差,这个误差就是所谓的“线性误差”,线性误差可以用相同的校准程序进行测定。

1.1)线性误差

用以上程序校准过的扫描仪,通过以上的程序再进行距离测量,记录不同距离下的测距采样的平均值与标准差。对比不同距离下的采样均值与真实距离D(i),我们得到了不同距离下的测距残留误差。随着标靶距离的变化,误差曲线总是成“之”字型,不是一个线性变化,总是在0位置上下浮动,我们称这种误差为“线性误差”。

扫描仪标称它的线性误差小于等于1mm,意思是误差曲线在+/-1mm以内浮动。总的来说线性误差与被测物体远近是没有关系的,所以线性误差可以被看做一个常数。

线性误差是随机误差,不符合正态分布。小于1mm的误差值是通过对数百台的扫描仪测试而来。然而对于所有误差来讲,线性误差是毫无关联的随机误差,你可以按照均方根值(RMS)来看待。

1.2)测距噪声

所谓距离噪声是指,特定距离下的测距采样值与其均值(特定距离下的10000测距采样均值)的差值。它符合高斯正态分布,可以表征每次测距读数的分布情况,一般以1 Sigma表示。它的意思是所有采样值里有68.3%是在以平均值为基准±1Sigma以内的。对于正太分布来讲,1Sigma 即所谓的均方根(RMS/Root Mean Square),也就是扫描仪的测距噪声。

测距噪声是任何点云数据里都有的,例如我们随便找一块墙体或者地面的点云,从侧面查看点云,都有一定的厚度,而不是一条线,老外称之为“三明治”现象。点云的厚度取决于它测距噪声点的范围(±1Sigma包含68.3%的点云、±2Sigma包含95.5%的点云、±3Sigma包含99.7%的点云)。

影响测距噪声的主要因素是被测物体与扫描仪的距离、物体表面反射率。物体表面反射率越好,距离越近噪声越少;物体表面反射率越低,距离越远噪声越多。

对于Z+F 5010来说被测物体在25米处,表面反射率为37%的情况下,测距噪声(1sigma)为0.6mm RMS,反射率为80%情况下为0.5mm RMS;如果据被测物体增加到100m,测距噪声会相应增加到3.8mm,2.0mm。

对于所有数据获取速率高的扫描仪来讲,测距噪声受采集速率的影响很大。大家可以类比一下全站仪,全站仪测一个点是需要一定的时间的。因为扫描仪动辄每秒几十万点的测量速率,它没有足够的时间将噪点滤除掉。如果要对比不同扫描仪的测距噪声需要先确定其数据采集速率。相同采集速率下,对比出来才有一定的参考价值。

例如:

● 在100m处目标反射率37%,扫描仪A以127KHz(127000点/秒)的速率测出的数据,测距噪声2.8mm

● 在100m处目标反射率37%,扫描仪B以10KHz(10000点/秒)的速率测出的数据,测距噪声1.5mm

表面上看扫描仪B的测距噪声要小一点,但是考虑到数据采集速率,有如下算法可供参考:

●扫描仪A 标准化测距噪声==0.0107mm

●扫描仪A 标准化测距噪声==0.0150mm

所以说测距噪声的大小还是要考虑到当时采集数据的速率。

2)机械偏转系统

激光束的发射角度是根据反射镜的角度来测量的,激光束真实的发射角度与反射镜的实际角度并不是完全一样。这个误差我们称之为“测角误差”。测角误差又包括水平测角误差Eβ与竖直测角误差Eα。对于Z+F 5010来说水平与竖直测角误差都是0.007°RMS(0.122mrad rms)。

弧度(rad)是一个能清晰反映测角误差对于每个点位误差影响程度的单位,2π rad=360°即单位圆(半径为1m的圆)的周长。对于微小的角度来讲弧度即对应该弧度的弧长。例如1mrad 的角度误差,反映到点位误差上即距离增加一米,误差增加1mm。所以0.122mrad的角度误差,在距离10米处的点误差为1.2mm,在50米处误差为6mm,在100米处误差为12mm。

在做扫描仪偏转系统的校准的时候,每个台扫描仪都会扫描一个独立的校准场。通过测量校准场内的目标,并与目标的实际位置进行对比,即可得到每台扫描仪的测角误差。有了这些测角误差就会相应的生成一些实时改正参数。至于这些误差如何计算并如何实时改正的,每个厂家可能都不一样。

通过对测量数据的统计分析,测角误差也包含平均误差与标准差。只有平均误差可以通过校准程序改正。随机误差是无法校准的,只能通过标准差(RMS)来标出来。标准差即正太分布中的1Sigma。所以测角误差为0.007°的意思是有68.3%的激光束角度误差小于等于0.007°。因为所有点云(直角坐标系)都是通过极坐标计算出来的(两个角度一个距离),所以角度误差肯定会传递到点位误差上。很明显角度误差在距离较远时对点云的三维误差影响很大。

基于以上分析,测角误差是一个重要参数。但是很多厂家(代理商)只标注仪器的角度分辨率。角度分辨率是机器能识别的最小角度,和测角精度毫无关系。

Z+F激光扫描仪的更多相关文章

  1. z+f profiler 9012

    角度分辨率/角度精度 0.0088°/0.02°RMS

  2. z+f数据解析

    1.先打开cmd2.把D:\qcc\编译和解析\debug_jiexi\SampleZFS.exe 拉进来.3.SampleZFS.exe -i *.zfs -o D:\*.txt 注意:*号代表文件 ...

  3. 变量的解构赋值////////////z

    变量的解构赋值 数组的解构赋值 对象的解构赋值 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 圆括号问题 用途 数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值, ...

  4. 【最大流】ECNA 2015 F Transportation Delegation (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: N(N<=600)个点,每个点有个名字Si,R(R<=200)个生产商在R个点上,F(F<= ...

  5. Opengl4.5 中文手册—F

    索引 A      B    C      D     E     F     G H      I     J      K     L     M     N O      P    Q      ...

  6. AtCoder Regular Contest 067 F - Yakiniku Restaurants

    题意: 有n个餐厅排成一排,第i个与第i+1个之间距离是Ai. 有m种食物,每种食物只能在一个餐厅里吃,第j种食物在第i个餐厅里吃的收益是$b[i][j]$. 选择每种食物在哪个餐厅里吃,使收益减去走 ...

  7. Problem D: 求(x-y+z)*2

    Description 编写一个程序,求解以下三个函数: f(x,y,z)=2*(x-y+z) f(x,y)  =2*(x-y) f(x)    =2*(x-1) 函数调用格式见append.cc. ...

  8. Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) F 构造

    http://codeforces.com/contest/967/problem/F 题目大意: 有n个点,n*(n-1)/2条边的无向图,其中有m条路目前开启(即能走),剩下的都是关闭状态 定义: ...

  9. F# 图形数学基础。

    这几天,在看Unity3D,很有意思,其中看到,第一人称控制器,就想看到里面的一些控制脚本是如何实现,才发现,学到的好多数据知识已经还给老师了,还好,走遍大江南北,跟着的书不多,唯一的二本高数没丢. ...

随机推荐

  1. struts下载文件错误,想不明白为什么更改变量名就不报错了

    java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [is] in the inv ...

  2. C++程序的多文件组成

    C++程序的多文件组成 [例3.32] 一个源程序按照结构划分为3个文件 // 文件1 student.h (类的声明部分) #include<iostream.h> #include&l ...

  3. 玫瑰花小制作分享-JavaScript(七夕专属浪漫)

    分享一个玫瑰花的制作小方法,用小小的代码给自己的她送上一个不一样的玫瑰花. 玫瑰花代码由JavaScript实现,JavaScript 作为一种脚本语言, 被发明用于在 HTML 网页上使用,可以给H ...

  4. 基本数据类型和string的转换

  5. golang 管理 pidfile

    Pidfile 存储了进程的进程 id.一般情况下 pidfile 有以下几个作用: 其他进程可以读取 pidfile 获取运行进程的 pid(当然也可以通过其他命令 动态获取) 在启动进程前先检查 ...

  6. Python内存加载shellcode

    生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...

  7. 发布后的项目打开swagger

    使用netcore作为纯后端提供api已经变得越来越频繁,swagger也成为很多人的选择.通常会在代码中限制ASPNETCORE_ENVIRONMENT为Production时关闭swagger.但 ...

  8. 解决阿里云OSS The requested bucket name is not available的办法

    今天在创建Bucket的时候遇到了这个问题 The requested bucket name is not available. The bucket namespace is shared by ...

  9. DotNet 使用阿里云媒体转码服务

    公司项目中一部分文件放到了阿里云 OSS 上,其中有些音频文件是 amr 类型的,在后期使用的时候比较麻烦,所以需要转换成 mp3 的文件,方便以后使用.本来想使用 ffmpeg 处理,但由于文件都存 ...

  10. centos6克隆虚拟机后,网络无法访问和启动

    使用vmware安装centos6虚拟机时, 克隆虚拟机后无法访问网络. 原因是:产生了重复的网卡信息** 克隆后在70-persistent-net.rules文件中会多一行网卡信息,把第一行网卡信 ...