【ROS – Robot Vision】cv_bridge

教材: ROS by Example -Indigo – V1 – Chapter 10

Task :

  1. 利用 ROS 連上 Webcam
  2. 將影像用 cv_bridge 傳遞給 OpenCV (Canny Edge Filter)

Task1 :利用 ROS 連上 Webcam

安裝 Packages:

  1. $ sudo apt-get install ros-indigo-image-view
    • $ source /opt/ros/indigo/setup.bash
  2. $ cd ~/catkin_ws/src
    $ git clone https://github.com/bosch-ros-pkg/usb_cam.git
    $ cd ~/catkin_ws
    $ catkin_make
    $ rospack profile

Test :

$ roslaunch rbx1_vision usb_cam.launch video_device:=/dev/video0   // 也有可能是/dev/video1

$ rosrun image_view image_view image:=/camera/rgb/image_raw

Task2 :利用 cv_bridge 連上 OpenCV 應用(Canny Edge Filter)

Test :

$ roslaunch rbx1_vision usb_cam.launch video_device:=/dev/video0

$ roslaunch rbx1_vision cv_bridge_demo.launch

程式碼拆解:

Step 0. 導入需要的 Library / msg 類型 / ROS Package

3. import rospy

4. import sys

5. import cv2                                                                   // import opencv.cv2 library

6. import cv2.cv as cv                                                     // 一些古董,還是抓近來用

7. from sensor_msgs.msg import Image, CameraInfo   // image msg type 要認得阿!

8. from cv_bridge import CvBridge, CvBridgeError     // 架橋跟架不了橋

9. import numpy as np                                       // image 為矩陣型態,怎能不請 numpy 呢?

Step 1. 創建 CvBridge Object

30. self.bridge = CvBridge()                                          // 進入重點啦!新建一個 cv.bridge

Step 2. Subscribe Camera Image Topic and sent it to the callback function.

# Subscribe to the camera image and depth topics and set  the appropriate callbacks

34. self.image_sub = rospy.Subscriber(“input_rgb_image", Image, self.image_callback, queue_size=1)

Step 3. “self.image_callback" 要轉給 OpenCV 啦!

41.def image_callback(self, ros_image):
       # Use cv_bridge() to convert the ROS image to OpenCV format
         try:
               frame = self.bridge.imgmsg_to_cv2(ros_image, “bgr8″)
         except CvBridgeError, e:
                print e

以 ros_image 名稱進入 function →" imgmsg_to_cv2″ 將其轉成 blue/green/red 8-bit OpenCV 格式。

50. frame = np.array(frame, dtype=np.uint8)

用 numpy array 形式儲存,方便 OpenCV 運算。

接下來就是 OpenCV 的事了…

Note :

  • The default camera launch files distributed with ROS use a 640×480 resolution.
    • you can use rqt_reconfigure or the camera’s launch
      file to change resolution modes
廣告
本篇發表於 未分類 並標籤為 , 。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

w

連結到 %s