传感器的动态标定 自动驾驶系统的传感器标定方法
自动驾驶系统的传感器标定方法
来源:智车科技
导读传感器标定是自动驾驶的基本需求 ,一个车上装了多个/多种传感器,而它们之间的坐标关系是需要确定的。湾区自动驾驶创业公司ZooX的co-founder和CTO是Sebastia Thrun的学生Jesse Levinson,他的博士论文就是传感器标定。
这个工作可分成两部分:内参标定和外参标定 ,内参是决定传感器内部的映射关系,比如摄像头的焦距,偏心和像素横纵比(+畸变系数),而外参是决定传感器和外部某个坐标系的转换关系,比如姿态参数(旋转和平移6自由度)。
摄像头的标定曾经是计算机视觉中3-D重建的前提,张正友老师著名的的Zhang氏标定法,利用Absolute Conic不变性得到的平面标定算法简化了控制场。
这里重点是,讨论不同传感器之间的外参标定,特别是激光雷达和摄像头之间的标定。
另外在自动驾驶研发中,GPS/IMU和摄像头或者激光雷达的标定,雷达和摄像头之间的标定也是常见的。不同传感器之间标定最大的问题是如何衡量最佳,因为获取的数据类型不一样:
摄像头是RGB图像的像素阵列;激光雷达是3-D点云距离信息(有可能带反射值的灰度值);GPS-IMU给的是车身位置姿态信息;雷达是2-D反射图。这样的话,实现标定误差最小化的目标函数会因为不同传感器配对而不同。
另外,标定方法分targetless 和target 两种,前者在自然环境中进行,约束条件少,不需要用专门的target;后者则需要专门的控制场,有ground truth的target,比如典型的棋盘格平面板。
这里仅限于targetless方法的讨论,依次给出标定的若干算法。
01 首先是手眼标定
这是一个被标定方法普遍研究的,一定约束条件下的问题:可以广义的理解,一个“手” (比如GPS/IMU)和一个“眼” (激光雷达/摄像头)都固定在一个机器上,那么当机器运动之后,“手”和“眼”发生的姿态变化一定满足一定的约束关系,这样求解一个方程就可以得到“手”-“眼”之间的坐标转换关系,一般是AX=XB形式的方程。
手眼系统分两种:eye in hand 和eye to hand ,我们这里显然是前者,即手-眼都在动的情况。
手眼标定分两步法 和单步法 ,后者最有名的论文是“hand eye calibration using dual quaternion"。一般认为,单步法精度高于两步法,前者估计旋转之后再估计平移。
这里通过东京大学的论文“LiDAR and Camera Calibration using Motion Estimated by Sensor Fusion Odometry”来看看激光雷达和摄像头的标定算法。
显然它是求解一个手-眼标定的扩展问题-,即2D-3D标定,如图所示:
求解激光雷达的姿态变化采用ICP,而摄像头的运动采用特征匹配。后者有一个单目SFM的scale问题,论文提出了一个基于传感器融合的解法:初始估计来自于无尺度的摄像头运动和有尺度的激光雷达运动;之后有scale的摄像头运动会在加上激光雷达点云数据被重新估计。最后二者的外参数就能通过手-眼标定得到。下图是算法流程图:
手眼标定的典型解法是两步法: 先求解旋转矩阵,然后再估计平移向量,公式在下面给出:
现在因为scale问题,上述解法不稳定,所以要利用激光雷达的数据做文章,见下图:
3-D点云的点在图像中被跟踪,其2D-3D对应关系可以描述为如下公式:
而求解的问题变成了:
上面优化问题的初始解是通过经典的P3P得到的。
得到摄像头的运动参数之后可以在两步手眼标定法中得到旋转和平移6参数,其中平移估计如下:
注:这里估计摄像头运动和估计手眼标定是交替进行的,以改进估计精度。除此之外,作者也发现一些摄像头运动影响标定精度的策略,看下图分析:
可以总结出:1) 摄像头实际运动a 越小,投影误差越小;2) ( )越小,投影误差越小。第一点说明标定时候摄像头运动要小,第二点说明,标定的周围环境深度要变化小,比如墙壁。
另外还发现,增加摄像头运动的旋转角,摄像头运动估计到手眼标定的误差传播会小。
这个方法无法在室外自然环境中使用,因为点云投影的图像点很难确定。
有三篇关于如何优化激光雷达-摄像头标定的论文,不是通过3-D点云和图像点的匹配误差来估计标定参数,而是直接计算点云在图像平面形成的深度图,其和摄像头获取的图像存在全局匹配的测度。
不过这些方法,需要大量迭代,最好的做法是根据手眼标定产生初始值为好。
另外,密西根大学是采用了激光雷达反射值,悉尼大学在此基础上改进,两个都不如斯坦福大学方法方便,直接用点云和图像匹配实现标定。
斯坦福论文“Automatic Online Calibration of Cameras and Lasers”。
斯坦福的方法是在线修正标定的“漂移” ,如下图所示:精确的标定应该使图中绿色点(深度不连续)和红色边缘(通过逆距离变换 IDT,即inverse distance transform)匹配。
标定的目标函数是这样定义的:
其中w 是视频窗大小,f 是帧#,(i, j) 是图像中的像素位置,而p是点云的3-D点。X表示激光雷达点云数据,D是图像做过IDT的结果。
下图是实时在线标定的结果例子:
第一行标定好的,第二行出现漂移,第三行重新标定。
密西根大学的论文“Automatic Targetless Extrinsic Calibration of a 3D Lidar and Camera by Maximizing Mutual Information”。
这里定义了标定的任务就是求解两个传感器之间的转换关系,如图:求解R,T。
定义的Mutual Information (MI) 目标函数是一个熵值:
求解的算法是梯度法:
下图是一个标定的例子:RGB像素和点云校准。
澳大利亚悉尼大学的论文“Automatic Calibration of Lidar and Camera Images using Normalized Mutual Information”。
本文是对上面方法的改进。传感器配置如图:
标定的流程在下图给出:
其中定义了一个新测度Gradient Orientation Measure (GOM)如下:
实际上是图像和激光雷达点云的梯度相关测度。
点云数据和图像数据匹配时候需要将点云投影到柱面图像上,如图所示:
投影公式如下:
而点云的梯度计算之前需要将点云投影到球面上,公式如下:
最后,点云的梯度计算方法如下:
标定的任务就是求解GOM最大,而文中采用了蒙特卡洛方法 ,类似particle filter。下图是一个结果做例子:
IMU-摄像头标定
德国Fraunhofer论文“INS-Camera Calibration without Ground Control Points“。
本文虽然是给无人机的标定,对车辆也适合。
这是IMU定义的East, North, Up (ENU) 坐标系:
而实际上IMU-摄像头标定和激光雷达-摄像头标定都是类似的,先解决一个手眼标定,然后优化结果 。只是IMU没有反馈信息可用,只有姿态数据,所以就做pose graph optimization。下图是流程图:其中摄像头还是用SFM估计姿态。
这是使用的图像标定板:
03 激光雷达系统标定
牛津大学论文“Automatic self-calibration of a full field-of-view 3D n-laser scanner".
本文定义点云的“crispness” 作为质量测度,通过一个熵函数Rényi Quadratic Entropy (RQE)最小化作为在线标定激光雷达的优化目标。(注:其中作者还讨论了激光雷达的时钟偏差问题解决方案)
“crisp“其实是描述点云分布作为一个GMM(Gaussian Mixture Model)形式下的致密度。根据信息熵的定义,RQE被选择为测度:
下图是一个标定后采集的点云结果:
标定算法如下:
04 雷达-摄像头标定
西安交大论文“Integrating Millimeter Wave Radar with a Monocular Vision Sensor for On-Road Obstacle Detection Applications”。
在讲传感器融合的时候提过这部分工作,这里重点介绍标定部分。首先坐标系关系如下:
传感器配置如下:
标定环境如下:
标定其实是计算图像平面和雷达反射面之间的homography矩阵参数,如下图:
用PLC控制称重,其实很容易,5分钟学会S7-200称重编程和校称
原创不易,请勿抄袭!
我知道这么写一点意义都没有,我也不可能去追究别人盗版我文章的责任,但我希望我写了近6个小时的文章会有人真心喜欢,会有人能够学到文章里的知识点,并应用到工业中,这样我的目的就达到了,然后希望大家能支持我一下,点赞收藏并分享,让更多的人看到这篇写之不易的文章,谢谢。
上篇文章我们讲了PLC连接称重传感器的几种方法以及这几种方法的优缺点,今天我们说一下如何使用西门子S7-200编写称重程序。下篇文章我们会再讲一下西门子S7-300的称重程序;本文提到的所有程序实例,手册和库文件还有称重模块的详细信息以及校称软件等等我都已打包好,有需要的在评论区留下邮箱,我会一一发送。
1 称重传感器+二次表+模拟量输入的方式比较简单,只需要识别好模拟量输入通道,然后将模拟量输入转换为需要的数值范围就可以。
2 称重传感器+二次表+通讯的方式,需要选择带232/485通讯接口的PLC,设置好通讯参数后,从接收口读到的数值就是称重的实际数值,然后进行换算即可,232/485通讯也是PLC使用的一个知识点,大家有兴趣的话可以在下方留言,我可以给大家讲解。
3 我们主要讲讲这个最经典的方式吧,那就是重传感器+接线盒+称重模块。
要想使用这种方式称量的话,我们需要编写PLC程序,并且通过软件设置称重模块参数,并进行校称等操作。
一首先我们先说说PLC编程,其实称重系统的编程学起来非常难,但应用起来非常简单。为什么这么说呢?
举个例子,1+1=2大家都知道,但是要问1加1为什么等于2那就复杂多了。
所以大家想用PLC控制称重系统的话,只需要把我给大家做的例子按照现场实际设备简单修改一下,然后下到PLC里就可以使用,下载后有疑问的话再去测试各个点的功能,多用几次后就熟练了。(几乎所有人的第一套PLC程序都是抄袭别人的,一点一点探索然后自己才有思路。)
但是为了让大家理解更深一些,我除了把程序发给你们让你们模仿外,还会将一些重要的信息列出来,让大家对称重系统有一个系统的了解,这样才能快速的学会称重的编程。
我们选用的PLC是CPU226.西门子S7-200其他型号也可以,但是需要注意:1不同PLC可以拓展的称重模块数量不同,2程序设置的起始位置可能有变化,因为有的PLC自带模拟量,所以接到PLC后的称重模块的起始值就不是AIW0,而称重模块前没有模拟量输入的一般起始地址就是AIW0.具体起始值以硬件监测到的为准,这个后文我们会说到。
然后按照接线图将传感器接到接线盒,再由接线盒接到PLC模块,然后检查下回路,没有问题后送电。
连线方式
SIWAREX MS称重模块
用西门子的专用编程电缆连接到PLC,以前说过西门子PLC的区别,S7-200没有以太网口,S7-200smart不能拓展称重模块,有点尴尬,所以只能用这种特定电缆进行编程。
西门子称重模块可以理解成一种硬件,所以需要驱动,对西门子S7-200来说,这个驱动就是库文件,我们将库文件倒入程序中,库文件也打包在文件包里。
打开软件,添加库文件
添加成功
程序出现在库里
倒入后大家可以看到两个程序块,一个程序块是用来读取称重数值的,另一个是用来清零的,这两个程序块我们可以直接拉出来用。
连接好PLC后先将滤波功能去掉,以前的文章说过,滤波会导致称重有延迟,所以需要去掉。工业自动化的知识网络就是由一个一个知识点构成,我需要将整个知识网络拆分成一个一个知识点,大家需要一个一个知识点学习,然后构建自己的知识网络。
删除滤波功能
然后我们读取下PLC信息,可以看到状态是AIW0,图片为例子为截图,德国的E是输入I,A是输出Q的意思,所以有些德国图纸标记是E和A,大家了解一下就可以。
可以看出起始值是AIW0,和AQW0,后面程序设置会用到
然后我们进行编程。
第一行和第二行为数据转换,其中第一行的firstA为PLC硬件读到的地址,其他的依次后移一个字节;比如文中读到的地址是AIW0,AQW0参数设置就是AIW0,AIW2,AIW4,AIW6,AQW0,AQW2,AQW4,AQW6;如果读到的地址是AIW8,AQW8参数设置就是AIW8,AIW10,AIW12,AIW14,AQW8,AQW10,AQW12,AQW14。
FirstVB是数据转换的起始位置,以指针的形式,实际数据为后移一位,如果是&VB200,那实际读数就是VW202,这个数可以任意填写,只要不侵占其他程序就可以。
第三行和第四行是清零指令,按照上述程序即可实现清零,但需谨记,清零仅在称的重量小于一定数值以下才可,否则无法清零,我用的传感器的清零上限是50g。
PLC程序就是这样,因为VW是字的格式,不可以与数值作比较,需要转换到可计算的数据格式,所以例子程序转换为VD1000,VD1000就是可以比较的最终重量数值,如果需要以设定值控制外部设备的话就用VD1000做数值比较就可以。
二除了PLC程序,我们还需要按照称重传感器设置称重模块参数。我们需要用到的软件是Siwatool_V4或者Siwatool_MS,这两个软件的区别就在于Siwatool_V4可以针对多个称重模块,Siwatool_MS只对应一种模块,所以我一般两个都装,哪个好用用哪个,用法大致一样。
我们需要一根线连接称重模块和安装以上软件的电脑;
两侧各为9针串口,称重模块上有串口接口,电脑侧如果没有的话需要串口转USB转换器。
连接之后。
第一步:建立通信
点击Module name,选择SIWAREX MS
然后点击Online按钮,软件与模块建立通信,如果通讯不上的话,切换一下COM口就可以了。
PC列参数表示SIWATOOL软件中的参数设置,SIWAREX列为称重模块内实际设置的参数,当二者不一致时,参数为红色。
将鼠标点击Adjustment parameter (DR3) 上,鼠标右键,选择Receive data record,将DR3中的所有参数读取到SIWATOOL软件中。
第二步:称重模块参数设置
Adjustment weight 1:标定砝码重量,因为SIWAREX MS只能通过一个Word来存储重量,无法显示小数点,所以此处输入砝码重量时需要考虑小数点个数。此处输出2000,如果小数点个数为2,那么代表标定砝码重量为20.00
Decimal place for the remote display:小数点个数
Weighing range:称量范围,指容器或者秤台上被称量的物料的最大重量,而不是传感器量程。当重量大于此处设置的称量范围时,称重模块的MAX指示灯会变为红色。
第三步:将参数发送到称重模块中
完成上述参数设置后,将鼠标点击Adjustment parameter (DR3) 上,鼠标右键,选择Send data record,将DR3中的所有参数写入到称重模块中。
第四步:零点标定
将秤清空,然后执行零点标定,此时重量显示为0。
第五步:砝码标定
将标定砝码(重量与第二步设定的砝码重量一致)放在秤上,然后执行砝码标定,此时显示砝码重量。
第六步:参数备份。
点击Receive all data按钮,将称重模块参数全部上载,然后单击Save as按钮,将参数保存为文件。如果需要更换新模块时,只需要将该文件打开,通过Send all data,将参数下载到新模块中即可,无法重新进行标定。
西门子有多种称重模块,软件也有多个,但都大同小异,只要我们熟悉一个效称软件,其他的就非常容易了。
最后提醒大家一下,无论是更换称重模块还是更换称重传感器我们都需要重新效称,然后即使不坏的话,传感器使用时间过长也需要重新效称才能保持准确度。
六小时的心血啊,希望大家喜欢,分享知识是我最大的快乐!想要资料的留下邮箱。
(如果喜欢这篇文章,请点赞并关注,以便优秀文章在第一时间收到推送)
相关问答
温度 传感器的标定 方法是什么?所有的传感器出厂时都需要标定,只有标定好的传感器才能提供给客户。温度传感器当然也一样,温度传感器的标定和大多数其它传感器的标定一样,最普遍的方法就是...
传感器标定的 基本形式分为哪几类?一、按用途压力敏和力敏传感器、位置传感器、温度传感器、温湿度传感器、气体传感器、液位传感器、能耗传感器、速度传感器、加速度传感器、射线辐射传感器、...
传感器标定的 主要步骤是什么,标定条件是什么?传感器标定的主要步骤有以下几个:1.确定标定目标:确定需要标定的传感器和其测量参数。2.数据采集:通过传感器收集一系列已知输入状态下的数据,例如已知的物...
传感器 如何 标定 三步?1、将传感器全量程标准输入量分成若干个间断点,取各点的值作为标准输入值。2、由小到大一点一点地输入标准值,待输出稳定后记录与各输入值相对应的输出值。3...
如何做到正确的 传感器标定 呢?首先我们需要了解一下拉力传感器的优缺点有哪些。拉力传感器的优点是精度高,测量范围广,寿命长,结构简单,频响特性好,能在恶劣条件下工作,易于实现小型化、整...
热电偶 传感器 静态 标定 步骤?1、中能仪表认为热电偶标定前必须进行外观检查、检查焊接点是否光滑、牢固、热电极是否变脆、变色、发黑,严重腐蚀等。2、中能仪表认为热电偶标定采用比较...
什么是 传感器 定期 标定 ? - 132****4900 的回答 - 懂得因为有些传感器在使用过程会产生误差,这个引起的原因众多,有时间问题,使用过程中的振动,老旧,损坏等原因,会产生或者可能产生一些误差这个时候就需...
在 传感器 中,什么叫 标定 ,什么是校准?传感器的标定:对装配好的传感器,对设计指标进行一系列实验,全面检测,确定实际性能。传感器的校准:在使用一段时间或修理后,对主要技术指标进行再次检测试...
什么是传 传感器的标定 ?利用标准器具对传感器进行标度的过程称为标定。具体到压电式压力传感器来说,用专用的标定设备,如活塞式压力计,产生一个大小已知的标准力。作用在传感器上,...
称重 传感器 如何进行 标定 ,具体步骤?你好,我是余姚赛尔斯的技术员。标定称重传感器首先需要准备:称重传感器,配套的称重仪表,与传感器满量程接近的标准力值或重物。接线完毕后根据称重仪表标定说...