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

https://blog.csdn.net/raym0ndkwan/article/details/48157607

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

猜你喜欢

转载自blog.csdn.net/chengde6896383/article/details/82429753