問題:
當(dāng)使用Astra相機(jī)的啟動的指令啟動相機(jī)后,使用rviz查看相機(jī)所發(fā)布的rgb數(shù)據(jù)時,在終端會出現(xiàn)如下的提示信息:
Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found.
Camera calibration file /home/car/.ros/camera_info/depth_Astra_Orbbec.yaml not found.
可以看到提示的信息為相機(jī)的標(biāo)定文件未能在 /home/car/.ros/camera_info/下找到,當(dāng)我自己根據(jù)提示的路徑去查找時,發(fā)現(xiàn)在/home/car/.ros/路徑文件下,并沒有camera_info這個文件夾,因此網(wǎng)上查詢發(fā)現(xiàn)是因?yàn)樽约簺]有對相機(jī)進(jìn)行標(biāo)定的緣故而導(dǎo)致。
下面就根據(jù)下面的步驟開始解決這個相機(jī)標(biāo)定問題:
1、準(zhǔn)備階段
1)打印棋盤格,可在下面的這個網(wǎng)站鏈接中打印自己想要的尺寸的棋盤格,我設(shè)置的行列為7x10,大小為18mm的棋盤格
棋盤格網(wǎng)頁鏈接:Camera Calibration Pattern Generator – calib.io
也可下載我的7x10棋盤格文件:棋盤格_200x150_7x10_18.pdf官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤
2)在Ubuntu18.04系統(tǒng)中安裝標(biāo)定功能包
sudo apt-get install ros-melodic-camera-calibration
2.1、標(biāo)定彩色相機(jī)
1)啟動相機(jī)節(jié)點(diǎn)
roslaunch astra_camera astra.launch
2)打開相機(jī)標(biāo)定節(jié)點(diǎn)并指定話題(astra相機(jī)發(fā)布的彩色節(jié)點(diǎn)為:/camera/rgb/image_raw,可以使用 rostopic list?進(jìn)行查看相機(jī)發(fā)布的節(jié)點(diǎn)名稱)
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:=/camera/rgb/image_raw
其中的指令參考如下進(jìn)行修改:
(1)?size指的是:棋盤格內(nèi)部的角點(diǎn)的行列數(shù);
(注意:不是棋盤格的行列數(shù),如我指定的行列為 7x10 ,則指令中的size就應(yīng)就改為 6x9 ,因?yàn)檫@個對應(yīng)的是棋盤格內(nèi)部的角點(diǎn)的行列數(shù)。)
(2)?square?是棋盤格每個格子的邊長(可以自己用尺子量一下),我這里的是18mm,對應(yīng)指令應(yīng)輸入0.018,因?yàn)橹噶畹膯挝粸槊祝╩);
(3)?image是圖像話題名稱,當(dāng)Astra深度相機(jī)通常為/camera/rgb/image_raw,其他的相機(jī)可以通過 rostopic list 指令查看發(fā)布的相機(jī)節(jié)點(diǎn)名稱。
3)在彈出的窗口相機(jī)視野中手持標(biāo)定板,不斷分別進(jìn)行左右(X),上下(Y),遠(yuǎn)近(Size),傾斜(Skew)運(yùn)動,盡量讓這四個維度的進(jìn)度條都為綠色。此過程要保證標(biāo)定板上有彩色的條紋才為有效。這個過程中控制臺也會打印出標(biāo)定個數(shù)的日志。此過程也可以將標(biāo)定板固定,然后移動相機(jī)。
(1)X:標(biāo)定靶在攝像頭視野中的左右移動;
(2)Y:標(biāo)定靶在攝像頭視野中的上下移動;
(3)Size:標(biāo)定靶在攝像頭視野中的前后移動;
(4)Skew:標(biāo)定靶在攝像頭視野中的傾斜轉(zhuǎn)動
4)當(dāng)右側(cè)的CALIBRATE圓形按鈕由灰色轉(zhuǎn)為綠色時,說明數(shù)據(jù)采集完畢,此時點(diǎn)擊CALIBRATE按鈕,便開始讀取之前保存的圖片并執(zhí)行標(biāo)定計算,這里需要等待一會,因?yàn)橛嬎阈枰獣r間。
5)有標(biāo)定結(jié)果出來后,點(diǎn)擊標(biāo)定界面的SAVE按鈕,再點(diǎn)commit按鈕,標(biāo)定結(jié)果保存在/tmp/calibrationdata.tar.gz這個壓縮包中,到這里彩色相機(jī)的標(biāo)定就結(jié)束了,關(guān)閉標(biāo)定程序。
在終端中也會輸出相應(yīng)的標(biāo)定結(jié)果。
6)保存后的標(biāo)定文件為?/tmp/calibrationdata.tar.gz 的壓縮包,將之解壓,其中的 ost.yaml就是我們想要的標(biāo)定結(jié)果。
打開ost.yaml,如下:
image_width: 640
image_height: 480
camera_name: narrow_stereo ? ? ? ? ? ? ? #相機(jī)名稱
camera_matrix:? ? ? ? ? ? ? ? ? ? ? ? ? ?#相機(jī)內(nèi)參矩陣(相機(jī)坐標(biāo)系->像素坐標(biāo)系)
? rows: 3
? cols: 3
? data: [ 556.03872, ? ?0. ? ? , ?335.509 ?,
? ? ? ? ? ? 0. ? ? , ?556.50706, ?233.42121,
? ? ? ? ? ? 0. ? ? , ? ?0. ? ? , ? ?1. ? ? ]
distortion_model: plumb_bob
distortion_coefficients:? ? ? ? ? ? ? ? ?#相機(jī)畸變系數(shù)
? rows: 1
? cols: 5
? data: [0.057411, -0.256237, 0.007304, 0.014521, 0.000000]
rectification_matrix:? ? ? ? ? ? ? ? ? ? #矯正矩陣
? rows: 3
? cols: 3
? data: [ 1., ?0., ?0.,
? ? ? ? ? 0., ?1., ?0.,
? ? ? ? ? 0., ?0., ?1.]
projection_matrix:? ? ? ? ? ? ? ? ? ? ? ?#投影矩陣(世界坐標(biāo)系->圖像坐標(biāo)系)
? rows: 3
? cols: 4
? data: [ 547.36389, ? ?0. ? ? , ?345.97145, ? ?0. ? ? ,
? ? ? ? ? ? 0. ? ? , ?559.91687, ?235.82042, ? ?0. ? ? ,
? ? ? ? ? ? 0. ? ? , ? ?0. ? ? , ? ?1. ? ? , ? ?0. ? ? ]
【參數(shù)說明】
???camera_matrix:相機(jī)內(nèi)參矩陣 (固有參數(shù))
???distortion_coefficients:相機(jī)畸變系數(shù)?(固有參數(shù))
???rectification_matrix:矯正矩陣(一般為單位陣 )
???projection_matrix:投影矩陣(世界坐標(biāo)系到圖像坐標(biāo)系)
?7)然后將得到的標(biāo)定文件 ost.yaml 進(jìn)行名稱的修改,此時的更改是根據(jù)剛剛報錯的終端提文件名進(jìn)行修改即可,剛剛終端提示的第一條是
Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found.
然后我們將剛剛彩色相機(jī)得到的標(biāo)定文件 ost.yaml 的名稱修改為?rgb_Astra_Orbbec.yaml ,并且還需要將該 yaml 文件中的?camera_name 也修改為 rgb_Astra_Orbbec ,不然后續(xù)運(yùn)行的過程中會出現(xiàn)如下的提示:
[rgb_Astra_Orbbec] does not match name narrow_stereo in file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml
因?yàn)闃?biāo)定文件中默認(rèn)的名稱為?narrow_stereo ,而我們已經(jīng)將彩色相機(jī)的標(biāo)定文件修改為了?ost.yaml 的名稱修改為?rgb_Astra_Orbbec.yaml ,因此為了保證不出現(xiàn)錯誤提示,還需要將 yaml 中的?camera_name 也修改為 rgb_Astra_Orbbec 便可解決此問題。
8)將剛剛修改的 rgb_Astra_Orbbec.yaml 移動到 /home/car/.ros文件下的/camera_info/文件夾中,由于我的 /home/car/.ros文件下沒有/camera_info/文件夾,因此需要創(chuàng)建并移入
cd /tmp/calibrationdata/
mkdir -p ~/.ros/camera_info
mv rgb_Astra_Orbbec.yaml ~/.ros/camera_info/
到此處對于 Astra 相機(jī)的彩色部分標(biāo)定完成。接下來對深度相機(jī)(紅外相機(jī))部分進(jìn)行標(biāo)定操作
2.2、標(biāo)定紅外相機(jī)
?1)標(biāo)定ir紅外相機(jī)與標(biāo)定rgb彩色相機(jī)相比,除了第一步的image參數(shù)不同,其他都一樣。
由于其深度數(shù)據(jù)的成像即為紅外相機(jī)的投影光斑分析得到的,ir紅外的相機(jī)標(biāo)定結(jié)果即是深度相機(jī)的標(biāo)定結(jié)果。
運(yùn)行紅外相機(jī)標(biāo)定節(jié)點(diǎn):
# 啟動相機(jī)
roslaunch astra_camera astra.launch
# 運(yùn)行紅外標(biāo)定
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:=/camera/ir/image
目前測試,在Ubuntu18.04下melodic預(yù)覽圖像內(nèi)容是黑色的,如下圖。但是在rviz下卻可以正常查看。
原因是由于默認(rèn)的IR圖像數(shù)據(jù)是16-bit的,如果想清晰的顯示出來,我們需要將之歸一化成一個數(shù)值范圍為0-255范圍的8-bit圖片。而rviz已經(jīng)幫我們做了這樣的歸一化操作。
根據(jù)這個思想,我們實(shí)現(xiàn)一個圖像類型轉(zhuǎn)換節(jié)點(diǎn),即訂閱 /camera/ir/image 話題,將得到的16-bit的圖片轉(zhuǎn)換成8-bit,然后輸出到 /camera/ir/image_mono8,想要輸出為 /camera/ir/image_mono8的節(jié)點(diǎn)需要使用如下的轉(zhuǎn)換文件才可以,網(wǎng)盤下載鏈接如下:
image_transformer.zip官方版下載丨最新版下載丨綠色版下載丨APP下載-123云盤
將此文件保存到catkin_ws/src文件下,然后使用 catkin_make 指令對剛剛的 image_transformer進(jìn)行編譯操作,編譯完成后再次執(zhí)行如下操作即可實(shí)現(xiàn)對紅外相機(jī)的標(biāo)定工作。
也可以通過如下指令進(jìn)行克隆指令
cd catkin_ws/src
git clone https://gitee.com/tangyang/image_transformer
注意,一定得按照我下面的啟動順序依次啟動運(yùn)行指令,不然會出錯
# 1)啟動相機(jī)
roslaunch astra_camera astra.launch
# 2)啟動image_transformer轉(zhuǎn)換節(jié)點(diǎn)
cd catkin_ws
source ./devel/setup.bash
rosrun image_transformer gray_image_transformer
# 3)運(yùn)行紅外標(biāo)定
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.018 image:= /camera/ir/image_mono8
運(yùn)行完 rosrun image_transformer gray_image_transformer 指令后,使用 rostopic list 指令便可以查詢到轉(zhuǎn)換后的8-bit節(jié)點(diǎn),如下圖所示:
運(yùn)行紅外標(biāo)定指令后的圖像如下:
然后便可以在標(biāo)定程序中查看到如彩色相機(jī)標(biāo)定的類似畫面,其中標(biāo)定的步驟和彩色相機(jī)部分一致,并且此處需注意,標(biāo)定紅外相機(jī)標(biāo)定文件保存路徑也是在/tmp/下,并且名稱也是calibrationdata.tar.gz 的文件,需提前將前面的彩色相機(jī)的 calibrationdata.gz 的文件保存到其他地方,不然在紅外相機(jī)標(biāo)定文件保存時會將其覆蓋。
此外,這里所得到的紅外相機(jī)的標(biāo)定文件打開也是和彩色相機(jī)相同的命名方式,將 ost.yaml 的名稱修改為 depth_Astra_Orbbec.yaml ,將 yaml 中的?camera_name 也修改為 depth_Astra_Orbbec,然后保存修改文件,并使用如下指令將 depth_Astra_Orbbec.yaml 移動到 /home/car/.ros/camera_info/ 路徑下
cd /tmp/calibrationdata/
mv depth_Astra_Orbbec.yaml ~/.ros/camera_info/
至此,Astra 深度相機(jī)的整體標(biāo)定已完成。
參考博客
奧比中光Astra相機(jī)(一)驅(qū)動安裝及ROS標(biāo)定 - 嗶哩嗶哩
使用標(biāo)定文件出錯:does not match name narrow_stereo in file /home/michael/.ros/camera_info/head_camera.yaml._[head_camera] does not match name narrow_stereo in-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-845390.html
Astra plus 深度相機(jī)校準(zhǔn)標(biāo)定-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-845390.html
到了這里,關(guān)于Astra深度相機(jī)在Ubuntu18.04系統(tǒng)下實(shí)現(xiàn)相機(jī)標(biāo)定的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!