建设一个网站需要什么技术,连接器零售在什么网站做,seo优化范畴,网站备案收费标准服务通信也是ROS中一种极其常用的通信模式#xff0c;服务通信是基于请求响应模式的#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求#xff0c;B接收处理请求并产生响应结果返回给A#xff0c;用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输… 服务通信也是ROS中一种极其常用的通信模式服务通信是基于请求响应模式的是一种应答机制。也即: 一个节点A向另一个节点B发送请求B接收处理请求并产生响应结果返回给A用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。
2.1 服务通信理论模型 服务通信较之于话题通信更简单些理论模型如下图所示该模型中涉及到三个角色: ROS master(管理者) Server(服务端) Client(客户端) ROS Master 负责保管 Server 和 Client 注册的信息并匹配话题相同的Server与Client 帮助 Server与Client 建立连接连接建立后Client 发送请求信息Server 返回响应信息。 0Server注册Server 启动后会通过RPC在ROS Master中注册自身信息其中包含提供的服务的名称。ROS Master会将节点的注册信息加入到注册表中。1Client注册Client 启动后也会通过RPC在ROS Master中注册自身信息包含需要请求的服务的名称。ROS Master会将节点的注册信息加入到注册表中。2ROS Master实现信息匹配ROS Master 会根据注册表中的信息匹配Server和Client并通过RPC向Client发送Server的TCP地址信息。3Client发送请求Client 根据步骤2响应的信息使用TCP与Server建立网络连接并发送请求数据。4Server发送响应Server接收、解析请求的数据并产生响应结果返回给Client。注意:1.客户端请求被处理时需要保证服务器已经启动2.服务端和客户端都可以存在多个。 2.2 服务通信自定义srv
2.2.1 定义srv文件 服务通信中数据分成两部分请求与响应在 srv 文件中请求和响应使用---分割具体实现如下: 功能包下新建 srv 目录添加 xxx.srv 文件内容
客户端请求时发送的两个数字
int32 num1
int32 num2
---
服务器响应发送的数据
int32 sum 2.2.2 编辑配置文件 package.xml中添加编译依赖与执行依赖
build_dependmessage_generation/build_depend
exec_dependmessage_runtime/exec_depend CMakeLists.txt编辑 srv 相关配置
find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation)
需要加入 message_generation,必须有 std_msgs 配置 msg 源文件
add_message_files(FILESPerson.srv) 生成消息时依赖于 std_msgs
generate_messages(DEPENDENCIESstd_msgs) 执行时依赖
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo02_talker_listenerCATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib)
注意: 官网没有在 catkin_package 中配置 message_runtime,经测试配置也可以 2.2.3 编译
编译后的中间文件查看:C 需要调用的中间文件(.../工作空间/devel/include/包名/xxx.h)Python 需要调用的中间文件(.../工作空间/devel/lib/python3/dist-packages/包名/srv)
后续调用相关 srv 时是从这些中间文件调用的 2.3 服务通信自定义srv调用(C) vscode配置将前面生成的 head 文件路径配置进 c_cpp_properties.json 的 includepath属性 2.4 服务通信自定义srv调用(Python) vscode配置将前面生成的 python 文件路径配置进 settings.json的extraPaths的属性