1. 程式人生 > >ROS下AR.Drone 2.0相機標定

ROS下AR.Drone 2.0相機標定

二.標定前的配置
(1)在工作空間中編譯好這兩個包後:
在終端輸入:roslaunch ardrone_autonomy ardrone.launch
(2)檢視釋出的話題:
在終端輸入:rostopic list
可以看到:

圖2.1
可以看到釋出的影象的話題為:/ardrone/image_raw
前置相機的名稱:/ardrone/front
底部相機的名稱:/ardrone/bottom
這將在下一步執行相機標定包的時候用到,我們以底部相機為例進行標定,
在終端中輸入:rosservice call /ardrone/togglecam
這是切換前置與底部相機的一個服務,我找了很久才發現,所以最好找個地方記下來,再執行一次的話又會切換回前置相機。
(3)執行相機標定的節點:
在終端中輸入:rosrun camera_calibration cameracalibrator.py --size 12x8 --square 0.03 image:=/ardrone/image_raw camera:=/ardrone/bottom

注::size 是指棋盤內部角點個數,我是用的標定板公有12x8個角點(即12列8行),square指方形的邊長,我使用的標定板方形邊長為3cm,image為輸出影象的話題,camera為相機的名稱(即在/image_raw前面部分)
此教程也有相關說明:http://blog.csdn.net/heyijia0327/article/details/43538695
執行後會彈出標定使用的GUI

圖2.2
將標定板放在前方後:

圖2.3
三.標定步驟
在出現上述視窗後,拿標定板在視窗中移動,下面給出官方教程中的示意圖:


圖3.1
我們從圖2.3中可以看到,在GUI的右側有X,Y,Size,Skew這幾個標誌條
它們的含義是:
(1)x:標定板在影象中的左右位置,從左到右x由小變大。
(2)y:標定板在影象中的上下位置,從上到下y由小變大。
(3)Size:標定板在影象中的大小,由遠及近,Size由小變大。
(4)Skew:標定板在影象中傾斜的角度大小
操作過程:
(1)為了得到儘量豐富的x,y值:標定的過程中要儘量緩慢移動標定板,使標定板的位置出現在影象中的各個地方(上中下左右)。
(2)為了得到豐富的Size值緩慢移動標定板,使標定板由遠及近,採集到豐富的尺寸資訊,最好有一張,標定板佔據視野絕大部分的影象。
(3)為了得到豐富的Skew資訊,緩慢移動標定板,使標定板的俯仰,偏航,滾動變化。
注:在操作的過程中,標定板移動不要過快,並且,每移動到一個位置要停頓下,如果發現這四標誌條都變綠了說明採集到了足夠的資訊。並且如果可以執行標定,CALIBRATE就會變亮。
四.執行標定,得到結果
CALIBRATE選項變亮後,就可以點選,執行標定(最好各標誌條也都變綠),此時影象會變灰,等待幾分鐘,標定完成後,再把標定板拿到攝像機前會出現如下畫面:


圖4.1

在終端中會出現:

圖4.2
如果對標定結果滿意點選COMMIT,即可將標定結果存入指定路徑,可以在終端中找到,如:

圖4.3
PS:具體怎麼看標定結果是否滿意,現在也不太清楚,等以後再弄清楚一些再補充。
五.標定引數解釋
(1)width,height很明顯表示影象為640*360畫素大小。
(2)Camera_matrix:相機內參矩陣

(3)distortion:畸變引數,[k1,k2,p1,p2],其中k1,k2為徑向畸變,p1,p2為切向畸變
(4)rectification:未深入瞭解,好像一直都是單位陣。
(5)projection:應該是畸變矯正後的矩陣(猜測的,並不完全確定)
詳細可參考:

http://wiki.opencv.org.cn/index.php/Cv%E7%85%A7%E7%9B%B8%E6%9C%BA%E5%AE%9A%E6%A0%87%E5%92%8C%E4%B8%89%E7%BB%B4%E9%87%8D%E5%BB%BA

到此,AR.Drone 2.0的底部相機就完全標定完了,之前完全沒有做過相機的標定,都是自己從網上一點一點查的,可能有不準確的地方,希望能夠批評指正。