點云的獲取方式有多種,比如三維成像傳感器、Lidar激光探測與測量、逆向工程等。.. 對于尋常百姓家,后2者的成本是十分昂貴的,所以我們可以嘗試玩一下自己搭建三維成像傳感器中的一種——3D線激光,一個單目相機,一個激光足矣。對于3D線掃,要產生點云,首先需要對系統進行標定,這里我們需要獲取到的信息有:
1.相機的內外參
2.激光的平面方程
3.移動方向的平移矩陣
在計算出這三步驟結果后,我們就可以通過每一張2D像素圖片,計算出3D點的空間位置。圖像中每個點都可以得到一個像素坐標P(x,y),這個點是實際空間中的某個點,和相機中心點的連線在相機平面上的投影得到的。因此根據相機內外參的標定結果,我們可以得到相機的中心點C(Xc,Yc,Zc),以及這個像素坐標 $P$ 映射到的實際空間坐標P0(X0,Y0,Z0),這里的P0理論上應該是一組點,我們可以直接取Z0=0的點來方便計算。
由這兩個點組成的空間直線與激光平面的交點就是其三維空間中的點坐標。我們可以通過直線方程和激光平面方程聯立解出該點的坐標。1)直線方程:(x-Xc)/(x-X0) = (y-Yc)/(y-Y0) = (z-Zc)/(z-Z0)2)平面方程: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張標定板的圖片,這20張標定板圖片用來計算相機的外參。后面一段代碼就是循環對標定板圖片進行處理,獲取標定板對應的位置坐標。
因為是多張圖片進行擬合計算,所以理論上圖片數目多,標定板位置變化越大,對于最后的結果越準確,包括標定板需要各種角度的傾斜,在不同平面上拍攝等等。*Part 2: Calibrate the orientation of the light plane with respect to the world coordinate system設置標準世界坐標系坐標和激光平面的計算標定
MinThreshold := 80這里設置最小閾值,是用來后面計算激光線圖片時提取激光的有效范圍用的,也可根據實際情況修改,不過影響不大,因為激光圖片的黑白分明非常明顯。
Index := 19這里需要特別注意,在這里設置第19張圖片標定板的坐標系基準世界坐標,后面的點云坐標系就是基于這個了。所以大家在拍照的時候第19張(或者可以改成任何你想要的一張)最好選擇一個平面而且將標定板放正一些,這樣在后續很多調試的時候你能明白自己的世界坐標大概在什么位置(可以看到halcon例程中這一張圖片也是很正的位置)。
同時導入與這個標定板位置對應的一張激光圖像,這張激光圖像的拍攝理論上是跟標定板在同一位置,即拍攝完第19張標定板后,標定板拿開,在同樣的位置打上激光,拍攝激光圖片。
Index := 20這是和之前第19張圖片位置有一定高度差的另外一個平面的位置拍攝的標定板圖片,同樣在這個位置拍攝完標定板后需要再拍攝一張激光圖片,這是因為需要確定激光平面的最簡單方式就是在空間上找到兩條平行線,即可確定一個平面。這里第19和第20最好是兩個平行的面,這樣激光打在上面就會呈現出兩條平行線,這樣擬合出來的激光平面就更準確。后面的代碼都是對激光圖片的有效點提取,以及計算擬合激光平面。擬合完成后有一個RMS值用來判斷擬合的精度效果:如果擬合RMS大于這個設定值,就認為擬合失敗,這里單位也是m。
if (MeanResidual 》 5e-5) return () endif在計算完成后,halcon會將激光平面的參數show出來:
這里實際上是代表兩個坐標系之間的pose的轉換關系,type=0表示的是ZYX模式,從這6個量我們大概能判斷出最后的激光平面是否計算正常,這也是我之前建議第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線激光的原理和步驟都講解完了,看下最終的效果圖吧~
責任編輯:haq
-
傳感器
+關注
關注
2551文章
51195瀏覽量
754430 -
3D
+關注
關注
9文章
2890瀏覽量
107633 -
模型
+關注
關注
1文章
3255瀏覽量
48905
原文標題:3D線激光成像數學模型簡析與實現
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論