如何使用ROS的service读取Kinect图像
我们经常会使用各种ROS包,而如何在ROS程序中导入Kinect图像呢?
1.先写一个service文件
学了挺久了,这个还没有好好整理过。其实步骤很简单:
先在工作空间下创建一个ros package。
$ catkin_create_pkg kinect_srv roscpp rospy std_msgs message_generation sensor_msgs
然后在这个包下,新建一个srv文件夹,并建立srv文件。
$ mkdir srv $ gedit rgbd_image.srv
在srv文件里填写自己需要的srv形式。我需要一个输入一个call信号,就可以输出rgb和depth图像的srv。
bool start --- sensor_msgs/Image rgb_image sensor_msgs/Image depth_image
- 增添以下内容到package.xml里
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
- 修改CMakelists.txt
cmake_minimum_required(VERSION 2.8.3)
project(kinect_srv)
## Compile as C++11, supported in ROS Kinetic and newer
# add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
sensor_msgs
)
add_service_files(
FILES
# Service1.srv
# Service2.srv
rgbd_image.srv
)
generate_messages(
DEPENDENCIES
sensor_msgs
std_msgs
)
catkin_package(
CATKIN_DEPENDS message_runtime
)
include_directories(
${catkin_INCLUDE_DIRS}
)
到这里就可以使用编译了
$ catkin_make
如果一切正确,应该在工作空间的devel/include/kinect_srv文件下找到rgbd_image.h文件。这个会在后面引用。
2.发布Service
在工作空间下再建一个包
$ catkin_create_pkg kinect_driver roscpp rospy std_msgs sensor_msgs cv_bridge image_transport
在src中新建一个get_image.cpp文件,开始设定service内容。
#include "kinect_driver/common