ROS上基於usb_cam軟件包實現usb攝像頭的攝像功能

系統環境:ubuntu 16.06
ROS: kinetic

1. 設計目標

我們這裏是基於ros系統實現usb攝像頭的攝像、錄bag數據包及rviz中觀察數據功能。

2. 安裝軟件

在實現我們目標之前,我們需要在我們的linux系統的terminal中執行如下命令:

2.1 安裝ros

sudo apt-get update -qq && apt-get upgrade -y -qq
sudo apt-get install -y  sudo lsb-release iputils-ping libelf-dev kmod usbutils pciutils dirmngr gnupg2
sudo apt-get install -y -qq build-essential python-dev python3-dev python-pip python-all-dev libatlas-base-dev gfortran libopenblas-dev
sudo apt-get install -y -qq libboost-all-dev cmake libpcap-dev libglew-dev sysstat ntpdate ifstat libopencv-dev
sudo apt-get install -y -qq git htop vim sshfs nfs-common screen openssh-server libyaml-cpp-dev

# setup ros environment

sudo echo "Installing ros related packages..."
sudo apt-get install -y  python-rosdep python-rosinstall python-vcstools
sudo rosdep init && rosdep update

sudo pip install -q -U Cython geopy bitarray catkin_tools psutil future
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get install -y -qq ros-desktop-full
sudo apt-get install -y -qq ros-kinetic-can-msgs ros-kinetic-laser-proc ros-kinetic-urg-c ros-kinetic-laser-geometry
sudo apt-get install -y -qq ros-kinetic-diagnostic-updater ros-kinetic-cv-bridge ros-kinetic-dynamic-reconfigure
sudo apt-get install -y -qq ros-kinetic-geodesy ros-kinetic-roslint
sudo apt-get install -y -qq ros-kinetic-pcl-conversions ros-kinetic-pcl-ros
sudo sh -c 'echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc'

2.2 安裝usb_cam

通過apt來便捷安裝usb_cam
sudo apt install ros-kinetic-usb-cam
當我們通過命令方便快捷的安裝好usb_cam後,接下來簡單查看下該軟件包我們需要注意的部分:
在這裏插入圖片描述
一般情況下如果我們不需要對usb_cam進行深度修改定製的話,直接使用apt來安裝就可以,我們只需要在自己創建的軟件包中創建自己的launch文件,按照上圖的usb_cam-test.launch文件內容格式複製一份差不多的,然後根據自己的需要修改下其中的param參數即可。

2.3 通過源碼安裝usb_cam軟件包

當我們需要對usb_cam進行深度定製修改時就只能通過下載其源碼,然後根據需要修改代碼,最後編譯啓動運行就可以了,不過這個屬於高級功能,一般情況下大家是不用下載源碼來修改的,除非你非常熟悉usb_cam源碼結構,自己需要的功能usb_cam無法滿足時才需要下載源碼修改。

下面我們在github上來下載該源碼,github上的usb_cam源碼網址如下:
git clone https://github.com/ros-drivers/usb_cam
通過下圖來查看整個下載操作流程:
在這裏插入圖片描述
注意:
如果在筆記本上運行外置usb的camera,則需要作如下修改:
vim launch/usb_cam-test.launch
在這裏插入圖片描述

2.4 編譯usb_cam節點

catkin build
roslaunch usb_cam usb_cam-test.launch

啓動之後將彈出一個小窗口,顯示攝像頭數據:

2.5 在rviz中查看相機輸出

0x05 校準攝像頭
在這裏插入圖片描述

2.6 rviz 顯示相關topic數據

Add -> By Topic -> Image

在這裏插入圖片描述

3. 攝像頭校準

一般我們在使用usb_cam來啓動相機時,如果沒有校準過的話,都會收到如下警告信息:
在這裏插入圖片描述
如果啓動的攝像頭有自動對焦功能,則沒有上述警告提示信息。

3.1 對焦操作

一般情況如果只是拿攝像頭作爲視頻監控功能的話就不用對相機做校準操作,只有在需要調用opencv功能對相機的視頻流做圖像處理,例如人臉識別,物體識別,使用立體相機或雙目相機進行測距時才需要對相機進行校準。

爲了從相機圖像信息獲得準確的距離信息,則需要多種附加信息,如每臺相機各不相同的鏡頭特性、鏡頭與圖像傳感器之間的距離以及扭轉角度等信息。這是因爲相機是一個將我們生活的三維空間世界投影到二維空間的圖像投影設備,所以在投影過程中,由於每臺相機的固有特性,這些參數都會不同。

例如每臺相機的鏡頭和圖像傳感器彼此不同,並且由於相機的硬件結構不同,鏡頭和圖像傳感器之間的距離也各不相同。並且在相機制作過程中,鏡頭和圖像傳感器必須水平組裝,但由於細微的偏差,圖像中心(image center)與主點(principal point)會有細微的偏離,且圖像傳感器的傾度也會略有差異。

校準這些部件的過程稱爲相機校準(Calibration),目的是查找相機的固有參數。攝像機的校準是非常重要的,ROS提供的是利用OpenCV相機校準的校準功能包,接下來我們按照如下步驟操作即可:

(1)安裝相機校準軟件包
sudo apt install ros-kinetic-camera-calibration
但是在使用該校準軟件包時需要啓動uvc_camera軟件包,這樣我們才能使用camera-clibration軟件進行校準,最終生成的校準yaml文件是可以在uvc_camera和usb_cam軟件包中通用的。

安裝uvc_camera的命令如下:
在kinetic中安裝命令:sudo apt install ros-kinetic-uvc-camera

(2)查看默認的相機信息

首先啓動uvc_camera節點,通過如下命令啓動,注意需要先啓動roscore節點後再啓動該節點:
rosrun uvc_camera uvc_camera_node
在這裏插入圖片描述
當啓動節點後,查看默認的相機信息,由於目前還沒有校準文件的配置信息,因此全部顯示爲默認值:
在這裏插入圖片描述
(3)準備校準用的棋盤

攝像機的校準是以一個由黑白方塊組成的棋盤爲基準進行的,如下圖所示。可以從本文的附件中下載8×6國際象棋棋盤,並打印出來後將其貼到一個平坦的紙板上。有時也會打印成超過1米的棋盤,但這裏用的是A4紙。作爲參考,8×6棋盤橫向有9個方塊,所以有8個交叉點,而豎向有7個方塊,有6個交叉點,所以它被稱爲8×6棋盤。
在這裏插入圖片描述
使用如下命令來進行啓動校準節點:
rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.0255 image:=/image_raw
下面對命令中各參數進行簡單介紹,–size是上述棋盤的寬度和高度, –square 0.0255是棋盤的一個小方格的實際尺寸。這個小方塊是正方形,但是打印出來的尺寸可能會各不相同。由於使用A4紙張打印出來是25.5毫米(我們可以使用尺子測量一下每個格子的寬度即可),所以下面命令中寫了0.0255,如果換成A3紙張打印的話,每個方格是36毫米,需要將square參數改爲0.036即可,一般由於打印的不同大小我們只需要改動square大小,其他參數基本上不用改動。
在這裏插入圖片描述
校準節點運行後會運行GUI,此時如果用相機對準棋盤,校準將立即開始。在GUI屏幕的右側,可以看到一個標有X、Y、Size和Skew的條形控件。這是校準的進展狀態,都以綠色填滿意味着校準完成。在校準過程中需要將棋盤對着相機朝着左/右/上/下/前/後移動,還需要傾斜棋盤,這是個比較無聊的過程,我們需要拿着校準棋盤不斷的移動,晃盪個大概5分鐘左右就差不多了,看到基本上綠色已經填滿了。校準所需的所有圖像都記錄下來之後,CALIBRATE按鈕會被激活。點擊這個按鈕後會進行實際的校準計算,這需要大約3到5分鐘。此時就可以將校準板放下了,耐心等待計算完成後,點擊SAVE按鈕保存校準信息,存儲的地址顯示在執行校準的終端窗口中,是存儲在某一個/tmp目錄(如“/tmp/calibrationdata.tar.gz”)中。
在這裏插入圖片描述
在這裏插入圖片描述
接下來將生成的校準文件移動到當前用戶的home目錄下:
在這裏插入圖片描述
最後只需要打開head_camera.yaml文件修改一下就能保證該校準參數文件正常使用了:
在這裏插入圖片描述
有了校準的配置文件,那以後我們再使用usb_cam打開usb攝像頭的話就沒有找不到校準文件的警告提示信息了:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章