各位同學,打給後
我們今天要做的主題是相機校正,現今很多相機所使用的鏡頭為魚眼鏡頭,而且現今世界是3D維度,因此當要轉換到2D的照片時,會產生相機失真,使照片扭曲。
而今天要做的就是相機的內部與外部參數修正
大家上禮拜的都做完了嗎?還沒得話,請略過此講義,先完成上禮拜的進度哦
-----------------今日主題開始-----------------
實驗3:Intrinsic Calibration 相機內部參數校正
在開始所有步驟以前
請先確認VM的網卡設定如下圖紅框一樣,選擇「橋接介面卡」
緊接著,確認小鴨車與虛擬機都是使用相同網域(ex.同wifi熱點),
再來用ifconfig確認裝置各自的IP,並記錄下來。
假設其IP如下表所示
裝置 | HOSTNAME | IP |
小鴨車 | duckpi | 192.168.0.1 |
虛擬機 | vm | 192.168.0.2 |
而小鴨車會是本次作為「master」使用。
因此要先從小鴨車開始設定起。
注意:duckpi請一律換成小鴨車的hostname,而IP記得替換成自己的。
▲pi
$ cd ~/duckietown
$ source environment.sh
$ export ROS_MASTER_URI=http://192.168.0.1:11311
$ export ROS_IP=`hostname -I`
$ roslaunch duckietown camera.launch veh:=duckpi raw:=true
▼VM
$ cd ~/duckietown
$ source environment.sh
$ export ROS_MASTER_URL=http://192.168.0.1:11311
$ export ROS_IP=`hostname -I`
$ roslaunch duckietown intrinsic_calibration.launch veh:=duckpi
執行成功就會出現以下畫面
現在請移動攝像頭或者移動棋盤紙,來達成校正。
我們可以看到右邊有4條:X , Y , Size , Skew ,我們需要藉由移動棋盤紙來使相機取得更多的特徵值
當特徵值夠多時,Calibrate才會亮起,才能完成步驟
請大家開始動動稿紙,我是說棋盤,使X , Y , Size , Skew這4條盡量達到綠色滿血
其特徵值夠多時,結果如下
校正功效
實驗4:Extrinsics Calibrate 相機外部參數校正
首先先將小鴨車與邊線對齊
▲pi
$ cd ~/duckietown
$ source environment.sh
$ export ROS_IP=`hostname -I`
$ rosrun complete_image_pipeline calibrate_extrinsics
#duckpi請換成自己的hostname
自動儲存校正結果
▲pi
$ ~/duckietown/out-calibrate-extrinsics
即可去out-calibrate-extrinsics資料夾查看結果照片
★ rosrun complete_image_pipeline calibrate_extrinsics 執行遇到問題
#如果遇到PiCameraMMALError: Camera component couldn't be enabled: Out of resources
$ sudo raspi-config
select: Advanced options ->Memory split -> and set at least 128MB
參考資料網址: https://raspberrypi.stackexchange.com/questions/26829/picamera-not-working
#如果遇到Exception: findChessboardCorners failed,請移動一下棋盤,確定棋盤可以讓攝像頭完全看到,再重新跑一次