寫一個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