锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

3D线激光成像数学模型简析与实现

时间:2022-11-08 09:30:00 at三维激光传感器a80150激光3d轮廓传感器

获取点云的方法有很多,比如三维成像传感器,Lidar激光探测与测量,逆向工程等... 对于普通人来说,后两者的成本非常昂贵,所以我们可以尝试在三维成像传感器中玩一个-3D线激光,单目相机,激光就够了。

对于3D要产生点云,首先需要对系统进行校准,这里我们需要获得的信息有:

1.相机的内外参 2.激光平面方程 3.移动方向的平移矩阵

在计算出这三个步骤的结果后,我们可以通过每个2D计算3个像素图片D点的空间位置。

图像中的每个点都可以得到像素坐标P(x,y),这一点是实际空间中某一点与相机中心点连接在相机平面上的投影。因此,根据相机内外参的校准结果,我们可以得到相机的中心点C(Xc,Yc,Zc),还有这个像素坐标 $P$ 实际空间坐标映射的实际空间坐标P0(X0,Y0,Z0),这里的P理论上应该是一组点,我们可以直接取Z0=方便计算0点。由这两点组成的空间直线与激光平面的交点是三维空间中的点坐标。该点的坐标可以通过直线方程和激光平面方程联合解决。

1)直线方程:(x-Xc)/(x-X0) = (y-Yc)/(y-Y0) = (z-Zc)/(z-Z2)平面方程:Ax By Cz D=0

计算一张图片中的所有点后,再次计算下一张图片中的所有点。每张图片的计算结果应根据移动方向的平移矩阵叠加映射。

halcon有非常简单实用的线激光3D点云成像的相关例程,我们可以通过例程建立自己的平台3D相机的开发和测试,即halcon的例程calibrate_sheet_of_line_calplate.hdev,这个例程是用线激光和相机建造的3D平台标定参数。

整个例程的步骤非常清晰,每一步都在halcon例程中有文本描述,但需要彻底了解一些细节和关键参数,以便在构建自己的系统时更换和更改关键参数。让我们详细分析一下这个例程:

* Part 1: Perform the calibration of the camera

第一步,相机参数的校准实际上是外参的校准

gen_cam_par_area_scan_polynomial (0.0125, 0.0, 0.0, 0.0, 0.0, 0.0, 0.000006, 0.000006, 376.0, 120.0, 752, 240, StartParameters) 

设置相机内参(焦距、畸变参数)K1,K2,K3,P1,P2,像元尺寸X,像元尺寸Y,图片中点CX,图片中心点CY,图片宽W,图片高K)

这些基本相机的内参可以直接手动填写,不需要特别准确,比如镜头多少mm,可以知道像元的大小和图像的大小。

CalTabDescription := 'caltab_30mm.descr' 

实际上,标定板的标准文件是halcon圆点标定板尺寸30mm,如果您需要在这里修改不同长度的校准板,文件名实际上是相应的halcon默认路径下的标定板描述文件在halcon下面有一个安装目录calib文件夹,而.descr文件实际上是对标定板的描述,可直接用txt或notepad打开标定板的长度、宽度、边界、界、圆点半径等设置中,用户也可以直接找到文件手动修改到自己的标定板尺寸。

CalTabThickness := .00063 

单位为标定板厚度m,halcon有些例程往往在单位mm和单位m之间来回切换,大家需要注意

NumCalibImages := 20 

外参校准图片的数量设置为20张,您可以根据您实际可以拍摄的图片进行修改。这里需要拍摄20张校准板图片,用于计算相机的外参。

后一段代码是循环处理校准板图片,以获得校准板对应的位置坐标。理论上,图片数量多,标定板位置变化越大,最终结果越准确,包括标定板需要各种角度的倾斜、在不同平面上拍摄等。

*Part 2: Calibrate the orientation of the light plane with respect to the world coordinate system

设置标准世界坐标系坐标和激光平面的计算和校准

MinThreshold := 80 

这里设置的最小阈值用于计算激光图片时提取激光的有效范围,也可以根据实际情况进行修改,但影响不大,因为激光图片的黑白非常明显。

Index := 19 

这里需要特别注意的是,在这里设置第19张图片标定板的坐标系基准世界坐标,以下点云坐标系为基础。因此,当你拍照时,最好选择一个平面并将标定板放正,以便在随后的许多调试中理解你的世界坐标在哪里(你可以看到)halcon例程中这一张图片也是很正的位置)。

同时,引入与校准板位置相对应的激光图像。理论上,激光图像的拍摄位置与校准板相同,即第19个校准板拍摄后,校准板打开,激光在同一位置拍摄。

Index := 20 

这是另一个平面拍摄的标定板图片,与之前第19张图片的位置有一定的高度差。在这个位置拍摄标定板后,还需要拍摄另一张激光图片。这是因为确定激光平面最简单的方法就是在空间上找到两条平行线来确定一个平面。第19和第20最好是两个平行个平行面,这样激光打在上面就会出现两条平行线,这样拟合的激光平面就会更准确。

后面的代码是提取激光图片的有效点,并计算拟合激光平面。拟合后有一个RMS如果拟合的用来判断拟合的精度效果的:RMS如果大于此设定值,则认为拟合失败。这里的单位也是m。

if (MeanResidual > 5e-5)    return () endif 

计算完成后,halcon激光平面参数show出来:

这实际上代表了两个坐标系之间pose转换关系,type=0表示的是ZYX在模式下,我们可以从这六个数量来判断最终激光平面是否正常。这也是我之前建议的第19张校准板图片尽可能正确,激光线激光也尽可能平行于校准板。从这个结果中可以看出beta角接近360°,gamma接近0度,激光和世界坐标的夹角基本上可以理解为只有一个方向alpha,那么这个角度也是我们安装激光时可控的。

上述两个步骤完成后,实际上可以通过激光图计算激光点对应的世界坐标系下的3D点的XYZ值了。

* Part 3: Calibration of the movement of the object between the acquisition of two successive profiles

第三部分很容易理解,即计算运动平面的方向pose,方便各激光线的叠加。

因为线激光3D最后,成像必须需要一个运动平台,无论是相机移动还是物体移动,都需要移动运动平台的方向(这里的方向是指XYZ计算出三个方向。

read_image (CaltabImagePos1, 'sheet_of_light/caltab_at_position_1.png') read_image (CaltabImagePos20, 'sheet_of_light/caltab_at_position_2.png') StepNumber := 19 

这里应该提前拍摄两个标定板。这两个标定板是在运动平面上移动一定步长后拍摄的,然后设置步长值StepNumber。根据实际运动平台和实际工作中的触发拍照情况,可以控制这个步长值。

在这里,在计算了两张图片的置后,需要将其坐标转换为第一步第19张标定板对应的基准世界坐标位置,然后计算两张标定板的相对关系,最后除以StepNumber即可。

MovementPose := MovementPoseNSteps / StepNumber 

从运动平面计算结果可以看出,在X,Z这两个方向基本上是0,在Y方向上有一定的位移。在这里,还建议您在拍摄这两个运动步长的校准板时,尽量将校准板放正,以便在计算步长结果时直接判断是否准确。例如,我们已经知道我们的轴或机械手移动了多少单位mm,最后,根据计算结果进行比较可。到这里sheetofline的所有参数就计算完毕了。

最后总结一下:这三个步骤实际上需要拍摄N张标定板图片,2张激光平面图片,2张运动前后的标定板图片

那么最合理的标定步骤应该时怎样的呢:

1.首先需要用设备拍摄N-2张姿态、位置和角度不同的标定板图片。标定板放在视野范围内,各种平移和倾斜旋转;2.拍摄倒数第二张标定板图片,这张标定板图片将用来作为后续的基准坐标系用于计算,在拍摄时尽量将标定板放置于平面,放正,与相机平行,这样后续方便自我检查;3.拍摄完后,将标定板拿走,在同一个位置打上激光线,激光线最好也与相机平行,与标定板的边也平行;4.重复第2步,拍摄倒数第一张标定板图片,这张标定板所在的平面最好是与之前的标准平面有一个台阶落差,同样尽量放平放正;5.重复第3步拍摄激光图片;6.再将标定板放在运动平面上,尽量放平放正,拍摄一张;7.控制运动平面运动一定的步长N,记录N,并且拍摄一张运动后的标定板图片,注意在第6步和第7步中间标定板不能移动。

OK,到这里halcon搭建3D线激光的原理和步骤都讲解完了,看下最终的效果图吧~


备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区

原创征稿

初衷
3D视觉工坊是基于优质原创文章的自媒体平台,创始人和合伙人致力于发布3D视觉领域最干货的文章,然而少数人的力量毕竟有限,知识盲区和领域漏洞依然存在。为了能够更好地展示领域知识,现向全体粉丝以及阅读者征稿,如果您的文章是3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、硬件选型、求职分享等方向,欢迎砸稿过来~文章内容可以为paper reading、资源总结、项目实战总结等形式,公众号将会对每一个投稿者提供相应的稿费,我们支持知识有价!

投稿方式

邮箱:vision3d@yeah.net 或者加下方的小助理微信,另请注明原创投稿。

▲长按加微信联系

▲长按关注公众号

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章