Kamo Ros学习笔记——Service

Service

-ros中的同步通信方式
-Node间可以通过request-reply方式通信

Node A -----请求------> Service -----请求------>Node B --------发送------->Service-------发送------->Node A

Topic Service
通信方式 异步通信 同步通信
实现原理 TCP/IP TCP/IP
通信模型 Publish-Subscrible Request-Reply
Publisher-Subscribler(多对多) Client-Server(多对一)
接收者收到数据会回调(Callback) 远程过程用(RPC)服务器端的服务
应用场景 连续、高频的数据发布 偶尔调用的功能/具体的任务
举例 激光雷达、里程计发布数据 开关传感器、拍照、逆解运算

srv

-Service通信的数据格式
-定义在*.srv文件中
举例
  my_pkg/srv/DetectHuman.srv

bool   start_delect  //请求服务遵守的格式

my_pkg/HumanPose[]  pose_data  //回答函数的遵守的格式 回调数组 可以返回给多个Node

srv文件智能嵌套msg文件 msg文件这里作为一种数据类型
my_pkg/msg/HumanPose.msg

std_msgs/Header header
string uuid
int32 number_of_joints
my_pkg/JointPos[] joint_data

msg文件也可以嵌套msg文件

string joint_name
geometry_msgs/Pose pose
floar32 confidence

设定好msg之后

修改package.mxl,添加依赖

message_generation
message_runtime

修改CMakeList.txt,添加

find_package(××× roscpp rospy std_msgs message_generation)

catkin_package(
  ×××
  CATKIN_DEPEND message_runtime ...
  ×××)

add_message_files(
  FILES
  DetectHuman.srv
  HumanPose.msg
  JointPos.msg)

generate_messages(DEPENDENCIES std_msgs)

常用代码

列出当前所有活跃的service
$ rosservice list
显示某个service的属性信息
$ rosservice info service_name
调用某个service
$ rosservice call service_name args

列出系统上所有的srv
$ rossrv list
显示某个srv的内容
$ rossrv show srv_name

你可能感兴趣的:(Kamo Ros学习笔记——Service)