【ROS實踐入門(八)ROS使用USB視覺傳感器相機】

【ROS實踐入門(八)ROS使用USB視覺傳感器相機】

本內容經官網實例以及一些參考書總結而成,歡迎留言評論交流~

聯繫方式:ziyuanw#foxmail.com(#換成@)

ROS對許多傳感器諸如:遊戲杆,遊戲手柄,IMU,激光測距儀,Kinect(RGBD)傳感器,USB視覺相機等都提供了支持,本文只探討USB相機的使用方式包括:ROS下USB相機驅動安裝, 相機節點編譯執行,單目相機標定方式。

ROS對於圖像處理和計算機視覺提供了攝像機標定過程,畸變矯正,顏色解碼,等其他一些底層操作,更加複雜的圖像處理任務可以藉助OpenCV,cv_bridge和Image_transport庫通過建立連接,訂閱和發佈圖像主題進行交互,另外還提供了物體識別,增強現實,視覺里程計等算法功能包。

一、ROS下USB相機驅動

  • 準備設備:USB相機一個(某寶買一個能用即可)
  • 準備ROS版本USB攝像機驅動:(建議從ROS官網給出的USB驅動源碼進行編譯安裝)
    https://github.com/ros-drivers/usb_cam

    因爲當我們在使用USB相機時需要對其參數進行自行修改,此時從源碼進行安裝就能夠非常方便設定,一般情況不需要對其源碼進行修改。

  • 注意:下面所有步驟都是在我創建好的catkin_ws工作空間裏面進行的,usb_cam驅動下載至catkin_ws/src文件夾下。若不知道如何創建該工作空間可參考我前面的第二篇博客。

1.源碼安裝usb_cam驅動包。

//1.克隆遠程倉庫 
git clone https://github.com/ros-drivers/usb_cam
//2.切換至usb_cam文件夾中
cd usb_cam/
//3.檢查所有分支
git branch -av
//4.在本地建立一個master分支並保持與遠程(remote)master倉庫分支同步(該步驟可選)
git checkout -b master origin/master
//5.檢查此時分支
git branch -av
//6.重新切換至develop分支
git checkout develop
//7.檢查此時分支
git branch -av

2.修改launch文件。(使用筆記本電腦自帶相機之外的usb相機時需要修改)

默認是第三行:"/dev/video0",我的usb相機設備號是2所以將其修改爲video2。(根據個人設備號修改,0爲電腦自帶相機設備號,外置usb相機設備號一般爲1,或2.)

或者查看設備號(把usb相機插拔前後看看哪個設備號變化了):

ls /dev/video*

查看一下usb_cam內部結構,並使用vim編輯launch文件:

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video2" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

3.usb_cam相機驅動編譯:

切換至catkin_ws工作空間,並編譯:

ziyuan@zyub:~/catkin_ws/src/usb_cam$ cd ~/catkin_ws/
ziyuan@zyub:~/catkin_ws$ catkin_make

編譯成功如下:(成功建立相機節點:usb_cam_node)

4.啓動相機節點:

(同樣,和之前博客提到的一樣,source devel/setup.bash更新一下環境配置)

  • 打開第一個終端:
roscore
  • CTRL+Shift+T打開第二個終端:

執行相機usb_cam-test.launch文件(不熟悉launch文件啓動方式可以參考上一篇博客):

source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch

彈出一個小窗,效果如下:

如果相機啓動時如下警告:(那是由於相機沒有進行標定,因此會出警告。)

[ INFO] [1569724530.848204371]: Unable to open camera calibration file [/home/ziyuan/.ros/camera_info/head_camera.yaml]
[ WARN] [1569724530.848223218]: Camera calibration file /home/ziyuan/.ros/camera_info/head_camera.yaml not found.

下面對其進行標定。

二、相機標定方法
 

在ROS中已經集成了對相機完成標定以及畸變矯正的整個流程,用起來非常方便。通常使用張正友相機標定方法,即利用平面座標的單應性關係,流程簡潔。

1.準備黑白棋盤格:

在網上可以找到黑白相機棋盤格的pdf文檔,這裏給一個Matlab官方相機標定黑白棋盤格鏈接:

http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/pattern.pdf

下載之後將其打印在A3或者A4紙張上,然後量出其方格邊長即可(自己量多少就寫多少,單位換爲國際單位m)。我這裏使用的A3紙張,最終尺子量出來是0.03m,A4的是0.028m。

黑白棋盤格是由9×7的黑白格組成,但是使用時僅僅用到內部交點數即8×6的角點。

2.啓動相機:

roscore

roslaunch usb_cam usb_cam-test.launch

3.啓動標定程序:

rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.03 image:=/usb_cam/image_raw

注意標定過程中左右,上下,前後,對角方向前後傾斜標定板,這樣使得右邊X,Y,Size,Skew變成綠色後,CALIBRATE按鈕變爲藍色,然後點擊(等上半分鐘左右)變爲下面三個按鈕都可以點擊,依次點擊SAVE(保存)和COMMIT(提交)到相機配置文件中。即可將標定結果保存至本地。

點擊SAVE之後:('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

如果第三步點擊COMMIT出現:

raise ServiceException("service [%s] unavailable"%self.resolved_name)
rospy.service.ServiceException: service [/camera/set_camera_info] unavailable

那麼只能自行將標定參數移動至:~/.ros/camera_info

1.cd /tmp

2.tar -zxvf calibrationdata.tar.gz

3.將ost.yaml複製到~/.ros/camera_info

4.打開並重命名爲head_camera.yaml

camera_name:head_camera

再次打開相機節點就不會出現如下警告:

[ INFO] [1569724530.848204371]: Unable to open camera calibration file [/home/ziyuan/.ros/camera_info/head_camera.yaml]
[ WARN] [1569724530.848223218]: Camera calibration file /home/ziyuan/.ros/camera_info/head_camera.yaml not found.

至此相機使用過程以及完成,後面將會實踐ORB-SLAM的ROS版本。

 

上一篇:【ROS實踐入門(七)launch文件和動態參數使用】

下一篇:【ROS實踐入門(九)ROS編譯ORB-SLAM2運行】

 

參考資料:

【1】ROS官網

【2 】ROS上基於usb_cam相機使用: https://blog.csdn.net/pengrui18/article/details/88958487

【3】ROS機器人高效編程。

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