开山第一篇笔记+教程(发给热爱ROS的童鞋)——ROS下读取摄像头图像 图像转换


写一个node节点,接收图像,并将处理后的图像发布出去。

关于(不注意Note 的童鞋在这上面浪费好多时间)
http://wiki.ros.org/cv_bridge_redesign 是针对于 diamondback版本的。
http://wiki.ros.org/image_transport/Tutorials 是针对老版本  / CvBridge.h>类型的教程。但publish 和cubscribe 的形式值得学习。

言归正传,
我主要参考的是 
http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages
http://wiki.ros.org/uvc_camera
http://ninghang.blogspot.com/2011/11/tutorial-1-use-ros-to-get-image-with.html

工具: uvc_camera
安装 uvc_camera, 打开 https://github.com/ktossell/camera_umd
选择最右边的,选择到Ubuntu命令行输入
git clone  https://github.com/ktossell/camera_umd.git
rosdep install uvc_camera 查看依赖是否满足
进入目录查看哪种编译方式,rosmake还是catkin。发现是package.xml用catkin_make -j8编译(-j8针对4核以上电脑),安装完成。

通读
http://wiki.ros.org/cv_bridge/Tutorials/UsingCvBridgeToConvertBetweenROSImagesAndOpenCVImages
此教程
在catkin目录的src文件夹下创建包cv_projects
catkin_create_pkg cv_projects sensor_msg cv_bridge roscpp std_msgs image_transport

关于CMakeList.txt文件的编写参照之前的教程 
http://wiki.ros.org/image_transport/Tutorials/PublishingImages#Building_your_node
和 http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)#roscpp_tutorials.2BAC8-Tutorials.2BAC8-WritingPublisherSubscriber.Building_your_nodes-1
和 http://wiki.ros.org/catkin/CMakeLists.txt

我在最后添加
add_executable(cv_test src/cv_test.cpp)
target_link_libraries(cv_test ${catkin_LIBRARIES})

由于例子中的节点是从 " /camera/image_raw "  中订阅消息,为了保证源码的完整性,这里要通过launch文件将其路径remap一下。
image_sub_ = it_.subscribe("/camera/image_raw", 1,  &ImageConverter::imageCb, this);
关于roslaunch的介绍: http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch 

这里我在cv_projects目录下新建launch目录,添加cv_test.launch文件

    
         
    


这里将"camera/image_raw"路径改为了"image_raw"是因为我们运行
启动摄像头节点:$rosrun uvc_camera uvc_camera_node
查看话题: $rostopic list 
发现如下列表
/camera_info
/image_raw
/image_raw/compressed
/image_raw/compressed/parameter_descriptions
/image_raw/compressed/parameter_updates
/image_raw/compressedDepth
/image_raw/compressedDepth/parameter_descriptions
/image_raw/compressedDepth/parameter_updates
/image_raw/theora
/image_raw/theora/parameter_descriptions
/image_raw/theora/parameter_updates
因此改为接收/image_raw  topic

至此代码完毕。

运行:
首先启动ROS核:$roscore

启动摄像头节点:$rosrun uvc_camera uvc_camera_node

启动程序:$roslaunch cv_projects cv_test.launch





你可能感兴趣的:(ROS机器人系统)