您的位置:首页 > 运维架构 > Linux

Llinux+ROS+OpenCV开发环境配置笔记

2015-09-01 14:35 926 查看
ROS中的三个重要计算机视觉的包分别为:OpenCV,(OpenNI2+OpenKinect) 和 PCL。OpenCV主要负责2D图像处理,OpenNI2和OpenKinect则是以Kinect为摄像头的深度视觉库,PCL是用于处理3D粒子群的库。

1.首先配置好ROS,若还没配置好ROS,参见ROS和Android的配置笔记
2.然后安装上面提及的这些包:
     $ sudo apt-get install ros-indigo-openni-* ros-indigo-openni2-* \ros-indigo-freenect-*
     $ rospack profile

3.安装摄像头的驱动,这里有很多方法,一个简易的方法(不一定适用于所有摄像头),是使用usb_cam包:
     $ cd ~/catkin_ws/src
     $ git clone https://github.com/bosch-ros-pkg/usb_cam.git      $ cd ~/catkin_ws
     $ catkin_make
     $ rospack profile

免Linux的驱动摄像头最好,可以通过 ls dev/ 看目录下有无检测到video0(一般为摄像头)。
如果usb_cam包无效,可以试一下Linux UVC包。
可以使用luvcview去测试linux下摄像头的安装是否正确。

4.安装rbx1包,这是ROS by Example的源代码:
     $ cd ~/catkin_ws/src
     $ git clone https://github.com/pirobot/rbx1.git
     $ cd rbx1
     $ git checkout indigo-devel
     $ cd ~/catkin_ws
     $ catkin_make
     $ source ~/catkin_ws/devel/setup.bash
     $ rospack profile

5.先测试连接Kinect(没有Kinect可以跳过):
     $ roslaunch freenect_launch freenect-registered-xyzrgb.launch
如果没有Kinect,可以在初始化结束之后ctrl+C退出。

6.测试
     VMWare Workstation 虚拟机对摄像头支持不好。如果摄像头不支持,好像目前无解!

     $ roslaunch rbx1_vision usb_cam.launch video_device:=/dev/video0
这会让摄像头publish图像到/camera/rgb/image_raw话题。
若提示没有找到包,试一下如下:

$ cd ~/catkin_ws
$ source ~/catkin_ws/devel/setup.bash

然后用image_view订阅该话题,即可显示摄像头的输入。
在新的terminal中:
     $ rosrun image_view image_view image:=/camera/rgb/image_raw
若能看到摄像头输入,说明ROS已经能够正确读取摄像头输入。

7.下面我们安装OpenCV。

     $ sudo apt-get install ros-indigo-vision-opencv libopencv-dev \python-opencv
     $ rospack profile #查看已经安装的包

8.测试python是否能调用OpenCV:

     $ python
     >>> from cv2 import cv
     如果能够import说明安装成功
     >>> quit()

9. ROS与OpenCV之间的图像格式转换由 cv_bridge 包负责,我们看下这个包怎么运作:

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

     Github的代码已经更新,这里面我们需要手动改一些这个python script的语句,注意,这个文件的路径在:catkin_ws/src/rbx1/rbx1_vision/nodes下。

     将其中的 input_rgb_image,input_depth_image全部改为/camera/rgb/image_raw。以上两个是jade里的更新的主题名,但在indigo里,还是以/camera/rgb/image_raw为主题名。
     
这个python script里面几个关键的语句:
     
     # 创建CvBridge对象
     self.bridge = CvBridge()
     # 将ros_image通过蓝绿红8位色空间转换为OpenCV图像,结果返回给frame
     frame = self.bridge.imgmsg_to_cv2(ros_image,"bgr8")
     # 最后将frame用numpy转换成numpy数列,OpenCV这样大部分的函数才能够处理
     frame = np.array(frame,dtype = np.uint8)
     
到这一步,ROS和OpenCV的配置基本完成,接下来OpenCV的开发可以基于ros2opencv2.py(catkin_ws/src/rbx1/rbx1_vision/src/rbx1_vision/ros2opencv2.py),改写其中的process_image()和process_depth_image()函数即可。在订阅主题的同时,这个节点也会发布信息到/roi(关注域,region
of interest)主题下。

其具体的格式为:

uint32 x_offset
uint32 y_offset
uint32 height
uint32 width
bool do_rectify



具体请参考这个script。

References:

《ROS by Example》Chapter 10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器人 opencv ROS