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


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

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

言归正传,
我主要参考的是 

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

通读
此教程
在catkin目录的src文件夹下创建包cv_projects
catkin_create_pkg cv_projects sensor_msg cv_bridge roscpp std_msgs image_transport

关于CMakeList.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);

这里我在cv_projects目录下新建launch目录,添加cv_test.launch文件
<launch>
     <node name="cv_test" pkg="cv_projects" type="cv_test">
          <remap from="camera/image_raw" to="image_raw"/>
     </node>
</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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章