写一个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);
关于roslaunch的介绍:
http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch
这里我在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>
<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