ROS服务通信机制原理及示例代码

ROS服务通信:节点间直接通信并获得应答.服务需要用户自己开发,可在功能包下创建srv文件夹并编写源代码,服务类型是功能包名称和.srv文件名称的组合,比如python中引入srv类型为,from gqcnn.srv import IMAGEprocess,其中gqcnn为功能包,srv为gqcnn下的文件夹.

 

1. 在srv文件夹下创建 IMAGEprocess.srv文件,在里面写上请求参数和应答参数,其中 --- 上面是request的参数,下方是response参数

ROS服务通信机制原理及示例代码_第1张图片

2. 编写IMAGEprocess.srv文件后,需要编译生成c++/python等语言的库,以便后面调用,此时需配置package.xml以及CmakeLists.txt文件,在package.xml文件中加上如下图两行代码

ROS服务通信机制原理及示例代码_第2张图片

在CmakeLists.txt文件中加上如下几个模块,若有模块,则直接加上没有的代码,若无,则加上模块并编写代码,由于我这边使用的是bool和float32数据类型,所以代码中使用的是std_msgs,若你使用了自定义数据类型或其它数据类型需进行更换.

find_package(catkin REQUIRED COMPONENTS
  rospy
  message_generation
  std_msgs
)

add_service_files(
   FILES
   IMAGEprocess.srv
)

generate_messages(
   DEPENDENCIES
   std_msgs
)

catkin_package(
  CATKIN_DEPENDS message_runtime
)

3. 此时对工作空间进行编译,则在下图中路径则会生成相应的编程语言库,我使用的是python,所以是在python文件夹下

ROS服务通信机制原理及示例代码_第3张图片

同时也可执行rossrv show IMAGEprocess查看服务类型是否定义成功,如下图

ROS服务通信机制原理及示例代码_第4张图片

4. 服务类型定义成功,则可在程序中进行引用,由于我使用的是python,所以在Python命令行中测试,测试结果如下图,由于中间有些提示信息,故省略了中间部分截图,import时没有提示或报错则成功

 

Tip: 编写完 .srv文件以及修改package.xml和CmakeLists.txt文件后需要重新编译工作空间,直接catkin_make可能不会马上起效,需要rebuild或者把原先工作空间下的devel和build文件夹删除再catkin_make.

你可能感兴趣的:(ROS服务通信机制原理及示例代码)