點(diǎn)云的獲取方式有多種,比如三維成像傳感器、Lidar激光探測(cè)與測(cè)量、逆向工程等。.. 對(duì)于尋常百姓家,后2者的成本是十分昂貴的,所以我們可以嘗試玩一下自己搭建三維成像傳感器中的一種——3D線(xiàn)激光,一個(gè)單目相機(jī),一個(gè)激光足矣。對(duì)于3D線(xiàn)掃,要產(chǎn)生點(diǎn)云,首先需要對(duì)系統(tǒng)進(jìn)行標(biāo)定,這里我們需要獲取到的信息有:
1.相機(jī)的內(nèi)外參
2.激光的平面方程
3.移動(dòng)方向的平移矩陣
在計(jì)算出這三步驟結(jié)果后,我們就可以通過(guò)每一張2D像素圖片,計(jì)算出3D點(diǎn)的空間位置。圖像中每個(gè)點(diǎn)都可以得到一個(gè)像素坐標(biāo)P(x,y),這個(gè)點(diǎn)是實(shí)際空間中的某個(gè)點(diǎn),和相機(jī)中心點(diǎn)的連線(xiàn)在相機(jī)平面上的投影得到的。因此根據(jù)相機(jī)內(nèi)外參的標(biāo)定結(jié)果,我們可以得到相機(jī)的中心點(diǎn)C(Xc,Yc,Zc),以及這個(gè)像素坐標(biāo) $P$ 映射到的實(shí)際空間坐標(biāo)P0(X0,Y0,Z0),這里的P0理論上應(yīng)該是一組點(diǎn),我們可以直接取Z0=0的點(diǎn)來(lái)方便計(jì)算。
由這兩個(gè)點(diǎn)組成的空間直線(xiàn)與激光平面的交點(diǎn)就是其三維空間中的點(diǎn)坐標(biāo)。我們可以通過(guò)直線(xiàn)方程和激光平面方程聯(lián)立解出該點(diǎn)的坐標(biāo)。1)直線(xiàn)方程:(x-Xc)/(x-X0) = (y-Yc)/(y-Y0) = (z-Zc)/(z-Z0)2)平面方程:Ax+By+Cz+D=0在一張圖片中的所有點(diǎn)都計(jì)算完畢后,再次計(jì)算下一張圖片中的所有點(diǎn)。每張圖片的計(jì)算結(jié)果都要根據(jù)移動(dòng)方向的平移矩陣來(lái)進(jìn)行疊加映射。
halcon有非常簡(jiǎn)單實(shí)用的線(xiàn)激光3D點(diǎn)云成像的相關(guān)例程,我們可以通過(guò)例程自己搭建平臺(tái)進(jìn)行3D相機(jī)的開(kāi)發(fā)和測(cè)試,那就是halcon的例程calibrate_sheet_of_line_calplate.hdev,這個(gè)例程就是對(duì)自己用線(xiàn)激光和相機(jī)搭建的3D平臺(tái)進(jìn)行參數(shù)標(biāo)定。
整個(gè)例程的步驟非常明確,每一步在halcon的例程中都有配文字說(shuō)明,但是有些細(xì)節(jié)和關(guān)鍵參數(shù)需要了解透徹,這樣才能方便我們?cè)诖罱ㄗ约旱南到y(tǒng)時(shí)可以替換和改變關(guān)鍵的參數(shù)。下面我們來(lái)詳細(xì)解析這個(gè)例程:* Part 1: Perform the calibration of the camera首先第一步,對(duì)相機(jī)參數(shù)的標(biāo)定,實(shí)際上是外參的標(biāo)定
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)設(shè)置相機(jī)的內(nèi)參(焦距,畸變參數(shù)K1,K2,K3,P1,P2,像元尺寸X,像元尺寸Y,圖片中點(diǎn)CX,圖片中心點(diǎn)CY,圖片寬W,圖片高K)這些基礎(chǔ)相機(jī)內(nèi)參可以直接手動(dòng)填寫(xiě),不需要特別準(zhǔn)確,例如鏡頭多少mm,像元尺寸和圖像大小這些都是可以已知的。
CalTabDescription := ‘caltab_30mm.descr’標(biāo)定板標(biāo)準(zhǔn)文件,實(shí)際上是halcon的圓點(diǎn)標(biāo)定板的尺寸30mm,如果大家在用不同長(zhǎng)度的標(biāo)定板需要在這里修改,這個(gè)文件名實(shí)際上是對(duì)應(yīng)到halcon默認(rèn)路徑下的標(biāo)定板描述文件,在halcon安裝目錄下面有個(gè)calib文件夾,而.descr文件實(shí)際上就是對(duì)標(biāo)定板的描述文件,可直接用txt或notepad打開(kāi),里面對(duì)標(biāo)定板的長(zhǎng)寬,邊界,圓點(diǎn)半徑等的一些設(shè)定,用戶(hù)有需要也可直接找一個(gè)文件自己手動(dòng)修改成自己的標(biāo)定板尺寸。
CalTabThickness := .00063標(biāo)定板厚度,單位是m,halcon有些例程經(jīng)常會(huì)在單位mm和單位m之間來(lái)回切換,大家需要注意
NumCalibImages := 20用于外參標(biāo)定的圖片的數(shù)目,這里設(shè)置為20,大家可以根據(jù)自己實(shí)際上可以拍攝的圖片進(jìn)行修改。這里需要拍攝20張標(biāo)定板的圖片,這20張標(biāo)定板圖片用來(lái)計(jì)算相機(jī)的外參。后面一段代碼就是循環(huán)對(duì)標(biāo)定板圖片進(jìn)行處理,獲取標(biāo)定板對(duì)應(yīng)的位置坐標(biāo)。
因?yàn)槭嵌鄰垐D片進(jìn)行擬合計(jì)算,所以理論上圖片數(shù)目多,標(biāo)定板位置變化越大,對(duì)于最后的結(jié)果越準(zhǔn)確,包括標(biāo)定板需要各種角度的傾斜,在不同平面上拍攝等等。*Part 2: Calibrate the orientation of the light plane with respect to the world coordinate system設(shè)置標(biāo)準(zhǔn)世界坐標(biāo)系坐標(biāo)和激光平面的計(jì)算標(biāo)定
MinThreshold := 80這里設(shè)置最小閾值,是用來(lái)后面計(jì)算激光線(xiàn)圖片時(shí)提取激光的有效范圍用的,也可根據(jù)實(shí)際情況修改,不過(guò)影響不大,因?yàn)榧す鈭D片的黑白分明非常明顯。
Index := 19這里需要特別注意,在這里設(shè)置第19張圖片標(biāo)定板的坐標(biāo)系基準(zhǔn)世界坐標(biāo),后面的點(diǎn)云坐標(biāo)系就是基于這個(gè)了。所以大家在拍照的時(shí)候第19張(或者可以改成任何你想要的一張)最好選擇一個(gè)平面而且將標(biāo)定板放正一些,這樣在后續(xù)很多調(diào)試的時(shí)候你能明白自己的世界坐標(biāo)大概在什么位置(可以看到halcon例程中這一張圖片也是很正的位置)。
同時(shí)導(dǎo)入與這個(gè)標(biāo)定板位置對(duì)應(yīng)的一張激光圖像,這張激光圖像的拍攝理論上是跟標(biāo)定板在同一位置,即拍攝完第19張標(biāo)定板后,標(biāo)定板拿開(kāi),在同樣的位置打上激光,拍攝激光圖片。
Index := 20這是和之前第19張圖片位置有一定高度差的另外一個(gè)平面的位置拍攝的標(biāo)定板圖片,同樣在這個(gè)位置拍攝完標(biāo)定板后需要再拍攝一張激光圖片,這是因?yàn)樾枰_定激光平面的最簡(jiǎn)單方式就是在空間上找到兩條平行線(xiàn),即可確定一個(gè)平面。這里第19和第20最好是兩個(gè)平行的面,這樣激光打在上面就會(huì)呈現(xiàn)出兩條平行線(xiàn),這樣擬合出來(lái)的激光平面就更準(zhǔn)確。后面的代碼都是對(duì)激光圖片的有效點(diǎn)提取,以及計(jì)算擬合激光平面。擬合完成后有一個(gè)RMS值用來(lái)判斷擬合的精度效果:如果擬合RMS大于這個(gè)設(shè)定值,就認(rèn)為擬合失敗,這里單位也是m。
if (MeanResidual 》 5e-5) return () endif在計(jì)算完成后,halcon會(huì)將激光平面的參數(shù)show出來(lái):
這里實(shí)際上是代表兩個(gè)坐標(biāo)系之間的pose的轉(zhuǎn)換關(guān)系,type=0表示的是ZYX模式,從這6個(gè)量我們大概能判斷出最后的激光平面是否計(jì)算正常,這也是我之前建議第19張標(biāo)定板圖片盡量擺正,而且激光器打出的線(xiàn)激光也盡量和標(biāo)定板平行。從這個(gè)結(jié)果可以看出beta角接近360°,gamma接近0度,基本上可以理解為激光和世界坐標(biāo)只有一個(gè)方向的夾角就是alpha,然后這個(gè)角度也是我們安裝激光時(shí)自己可控的。
在上面兩個(gè)步驟完成之后,實(shí)際上就可以通過(guò)某一張激光圖來(lái)計(jì)算出這上面的激光點(diǎn)對(duì)應(yīng)的世界坐標(biāo)系下的3D點(diǎn)的XYZ值了。* Part 3: Calibration of the movement of the object between the acquisition of two successive profiles第三部分,很好理解,就是計(jì)算出運(yùn)動(dòng)平面的方向pose,方便每一條激光線(xiàn)的疊加。因?yàn)榫€(xiàn)激光3D成像最后一定是需要一個(gè)運(yùn)動(dòng)平臺(tái)的,不論是相機(jī)動(dòng)還是物體動(dòng),都一樣,需要將運(yùn)動(dòng)平臺(tái)動(dòng)的方向(這里的方向指的是XYZ三個(gè)方向)計(jì)算出來(lái)。
read_image (CaltabImagePos1, ‘sheet_of_light/caltab_at_position_1.png’) read_image (CaltabImagePos20, ‘sheet_of_light/caltab_at_position_2.png’) StepNumber := 19這里應(yīng)該是提前拍好了兩張標(biāo)定板,這兩張標(biāo)定板是經(jīng)過(guò)運(yùn)動(dòng)平面運(yùn)動(dòng)一定的步長(zhǎng)之后拍攝的,那么就把這個(gè)步長(zhǎng)值設(shè)置給StepNumber。
這個(gè)步長(zhǎng)值是我們自己可以控制的,根據(jù)實(shí)際運(yùn)動(dòng)平臺(tái)和實(shí)際工作時(shí)的觸發(fā)拍照的情況來(lái)設(shè)置。這里在計(jì)算完兩張圖片的標(biāo)定板位置后,需要將它們的坐標(biāo)轉(zhuǎn)換到第一步的第19張標(biāo)定板對(duì)應(yīng)的基準(zhǔn)世界坐標(biāo)位置下,再進(jìn)行兩張標(biāo)定板的相對(duì)關(guān)系計(jì)算,最后除以StepNumber即可。
MovementPose := MovementPoseNSteps / StepNumber
從這個(gè)運(yùn)動(dòng)平面計(jì)算結(jié)果可以看出,在X,Z兩個(gè)方向上基本上都是0,在Y方向上有一定的位移。這里同樣建議大家在拍攝這兩張運(yùn)動(dòng)步長(zhǎng)的標(biāo)定板時(shí),盡量將標(biāo)定板放正,這樣在計(jì)算出來(lái)步長(zhǎng)結(jié)果時(shí)可以直接判斷是否準(zhǔn)確。比如我們已經(jīng)知道自己的軸或者機(jī)械手運(yùn)動(dòng)一個(gè)單位是多少mm,最后根據(jù)計(jì)算出來(lái)的結(jié)果進(jìn)行比對(duì)即可。到這里sheetofline的所有參數(shù)就計(jì)算完畢了。
最后總結(jié)一下:這三個(gè)步驟實(shí)際上需要拍攝N張標(biāo)定板圖片,2張激光平面圖片,2張運(yùn)動(dòng)前后的標(biāo)定板圖片。那么最合理的標(biāo)定步驟應(yīng)該時(shí)怎樣的呢:
1.首先需要用設(shè)備拍攝N-2張姿態(tài)、位置和角度不同的標(biāo)定板圖片。標(biāo)定板放在視野范圍內(nèi),各種平移和傾斜旋轉(zhuǎn);2.拍攝倒數(shù)第二張標(biāo)定板圖片,這張標(biāo)定板圖片將用來(lái)作為后續(xù)的基準(zhǔn)坐標(biāo)系用于計(jì)算,在拍攝時(shí)盡量將標(biāo)定板放置于平面,放正,與相機(jī)平行,這樣后續(xù)方便自我檢查;3.拍攝完后,將標(biāo)定板拿走,在同一個(gè)位置打上激光線(xiàn),激光線(xiàn)最好也與相機(jī)平行,與標(biāo)定板的邊也平行;
4.重復(fù)第2步,拍攝倒數(shù)第一張標(biāo)定板圖片,這張標(biāo)定板所在的平面最好是與之前的標(biāo)準(zhǔn)平面有一個(gè)臺(tái)階落差,同樣盡量放平放正;
5.重復(fù)第3步拍攝激光圖片;6.再將標(biāo)定板放在運(yùn)動(dòng)平面上,盡量放平放正,拍攝一張;7.控制運(yùn)動(dòng)平面運(yùn)動(dòng)一定的步長(zhǎng)N,記錄N,并且拍攝一張運(yùn)動(dòng)后的標(biāo)定板圖片,注意在第6步和第7步中間標(biāo)定板不能移動(dòng)。OK,到這里halcon搭建3D線(xiàn)激光的原理和步驟都講解完了,看下最終的效果圖吧~
責(zé)任編輯:haq
-
傳感器
+關(guān)注
關(guān)注
2565文章
53008瀏覽量
767462 -
3D
+關(guān)注
關(guān)注
9文章
2959瀏覽量
110766 -
模型
+關(guān)注
關(guān)注
1文章
3521瀏覽量
50425
原文標(biāo)題:3D線(xiàn)激光成像數(shù)學(xué)模型簡(jiǎn)析與實(shí)現(xiàn)
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺(jué)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
VirtualLab:光學(xué)系統(tǒng)的三維可視化
六維力傳感器的技術(shù)、應(yīng)用與核心指標(biāo)
在結(jié)構(gòu)光三維成像方面DLP LightCrafter 4500如何連續(xù)投射彩色圖?
三維測(cè)量在醫(yī)療領(lǐng)域的應(yīng)用
三維測(cè)量技術(shù)在工業(yè)中的應(yīng)用
三維掃描與建模的區(qū)別 三維掃描在工業(yè)中的應(yīng)用
數(shù)字孿生三維可視化場(chǎng)景如何搭建?
中國(guó)研發(fā)出新型三維電壓成像新技術(shù)
什么是三維點(diǎn)云分割
CGQ-24霍爾傳感器是一種什么類(lèi)型的傳感器
三維觸摸面板-運(yùn)用觸感功能
三維打印技術(shù)原理
泰來(lái)三維 三維掃描在文物保護(hù)中的應(yīng)用場(chǎng)景

評(píng)論