【ROS教程 008】機器視覺

DaveBobo發表於2018-02-09

在ROS系統中,對機器視覺的支援是通過新增攝像頭驅動,整合OpenCV演算法庫,整合基於機器人位置對攝像頭光學座標系進行座標變換(tf)的工具和一系列第三方工具實現的,包括視覺測量、擴增實境、物體檢測和智慧感知等各種演算法。
(1)連線和執行攝像頭
ROS系統提供官方支援的FireWire攝像頭,由於實驗條件限制沒有這種裝置,使用USB攝像頭進行展示。有兩個主要的選項能用於USB攝像頭驅動。
num1 usb_cam
如果想安裝usb_cam需要執行以下命令:

$ cd ~/dev/rosbook
$ svn co http://svn.code.sf.net/p/bosch-ros-pkg/code/trunk/stacks/bosch_drivers/usb_cam
$ cd usb_cam
$ rosmake usb_cam

在這之後執行以下命令,顯示攝像頭資料,其本身就是USB攝像頭的原始影象,即為彩色。

$ roslaunch chapter6_tutorials usb_cam.launch view:=true

這裡寫圖片描述
類似地其他好的選擇還有gscam。
(2)使用OpenCV製作USB攝像頭驅動程式
驅動是通過呼叫OpenCV的cv::VideoCapture類來實現的,它能驅動攝像頭並且允許我們去修改它的一些書本所支援的引數。然而,事實上使用usb_cam不可能實現這些功能,因為CameraInfo訊息是不可用的,因此camera_info_url並不能在引數檔案params/usb_cam/logitech.yaml中設定。而在gscam中,我們可以進行更多的控制。
使用OpenCV實現攝像頭驅動主要有兩種方法。第一是根據每秒鐘給定的影象數量(FPS)進行輪詢,第二是能夠根據FPS設定一個計時器並在計時器的回撥函式中完成實際的讀取。主要包括的技術有建立USB攝像頭驅動功能包、使用ImageTransport API釋出攝像頭幀、使用cv_bridge進行OpenCV和ROS影象處理、使用ImageTransport釋出影象、在ROS中使用OpenCV等。
以下為camera_polling的顯示結果。

$ roslaunch chapter6_tutorials camera_polling.launch camera_index:=0 fps:=15 view:=true

這裡寫圖片描述
(3)標定攝像頭
在USB攝像頭驅動下進行的標定

$ roslaunch chapter6_tutorials camera.launch calibrate:=true

這裡寫圖片描述
雙目標定

$ sudo apt-get install v4l-utils qv4l2
$ roslaunch chapter6_tutorials camera_stereo.launch view:=true

這裡寫圖片描述
這裡我的實驗效果並不好,有時間再仔細研究。
使用viso2執行視覺測距
在ROS Fuerte和Groovy中都包含了當前版本的viso2,然而這兩個版本中都需要使用catkin編譯系統。我們已經介紹了rosmake經典的編譯系統,在此我們為基於catkin安裝的viso2進行詳細的指導,執行如下命令:

$ cd ~
$ mkdir ros
$ cd ros
$ mkdir -p catkin_ws/src
$ cd catkin_ws/src/

References:
[1]. Aaron Martinez Enrique Fern andez, ROS機器人程式設計[B], P126-160, 2014.
http://wiki.ros.org/gscam
http://wangsx.cn/?p=604
https://www.cnblogs.com/Jessica-jie/p/6520061.html

相關文章