1. 程式人生 > >關於怎樣把普通usb攝像頭影象釋出到ros的topic

關於怎樣把普通usb攝像頭影象釋出到ros的topic

前言:一個人搞某個領域的東西,沒個人帶真不行,整天糾結於各種小毛問題

  這是一個很容易提出的問題,ORB_SLAM做線上單目必須牽扯到怎樣把usb_cam(這裡指筆記本自帶攝像頭)的資料釋出到ros的topic供使用,這裡給出方法如下:

Step2:新建build cmake+make大家都懂得

Step3:這一步我犯傻逼了,去可執行檔案目錄進行./usb_cam_node後報錯:
[ERROR] [1467341521.830460517]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying…
可能是大家都沒我這麼二所以沒Google到有人問過,只搜到一個再stackoverflow問過但是和我不一樣情況,所以我就先扔這了,我就記住這個11311這個數字了,過了一會我再跑其他ros程式時先執行roscore後偶然瞥見這個視窗名稱:

看到這個數字沒,11311,泥煤的,沒啟動roscore就想釋出到topic我真是醉了。

  至此,我們成功運行了cv_camera_node,但是正規情況下不該這麼玩的,其實這也是因為自己還不理解ros的本質:我們把cv_camera放進catkin_ws/src下面,然後在catkin_ws下面執行catkin_make,這時候就在catkin_ws/devel/cv_camera下面生成了ros識別的(也就是可以rosrun的)可執行檔案,我們就可以簡單執行 rosrun cv_camera cv_camera_node了

Step4:好,現在我們可以看見usb_cam指示燈亮了,究竟topic裡有沒有影象呢,現在開啟rviz:
rosrun rviz rviz
  按照topic新增一個image,現在就可以看到影象了。

  當然,科研的道路上必然存在艱辛,別問我為什麼有此感慨,就剛才,剛寫好部落格,又運行了一次報錯:

醉了

  執行cheese後發現是攝像頭壞了,估計被剛才一連番的攻擊攻陷了,沒事咱重啟電腦,然而還是不行,那咱換程式,usb_cam官網http://wiki.ros.org/usb_cam最下面給出了cv_camera的包,用的opencv的介面,按原來方法執行,ok,可以。
  這裡總結一下這兩個包,在我的筆記本上usn_cam驅動自帶攝像頭提示上面錯誤,驅動外接usb沒問題,而cv_camera兩者都沒問題,還有一個要注意的,一般外接usb攝像頭啟動系統時video0就不一定是自帶攝像頭了,要重新修改原始檔再生成二進位制,參考下面

  這裡我有個疑問,為什麼rviz裡新增image可以但是新增camera不行?

  接下來還有個問題,比如在用cv_camera的時候我想用外接的usb攝像頭不想用筆記本自帶的怎麼辦?這時我們開啟cv_camera的官網說明:

滑鼠選中處

  所以我們知道程式有個引數device_id是選擇攝像頭的,一般筆記本自帶的是0,其他的是1,2….往後排,具體怎麼看哪個攝像頭對應哪個值最簡單的辦法就是開啟/etc/下面搜尋video,一個攝像頭對應一個檔案,把攝像頭拔了對應哪個檔案就沒了,以此確定攝像頭與videox的對應關係。
  好,現在我們開啟下載的cv_camera包,進入src下面開啟driver.cpp,為什麼是這個原始檔我只能告訴你我是一個一個開啟找的,看到裡面有個

滑鼠選中處

  我們把他的引數改為1,重新進入build目錄cmake+make,然後按照上文方法啟動cv_camera_node,這時候usb攝像頭的資料就進入cv_camera_node/image_raw了,同理我們在/home/kylefan/catkin_ws/src/usb_cam/nodesusb_cam_node.cpp裡面發現以下語句
  

我們把0改為1,就實現了usb攝像頭的啟動。
:ORB_SLAM2單目線上,注意把程式裡面的topic改為以上topic名稱