ROS学习笔记(五) ROS通信架构(三)

本文深入解析了ROS(Robot Operating System)的四大通信机制:Topic、Service、ParameterService及Actionlib,对比了它们的通信方式、实现原理及应用场景,详细阐述了srv文件的使用及参数服务器的维护方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS通信架构(三)

ROS的通信方式有以下四种:

Topic 主题
Service 服务
Parameter Service 参数服务器
Actionlib 动作库

Service

topic是单向异步通信方式,当一些节点只是临时而非周期性的需要某些数据,topic会消耗大量内部资源,效率低。此时就需要请求-查询式通信的service(服务)。
service通信是双向的,接收消息同时有反馈。Service包括请求方(Client),应答方/服务提供方(server)。Client发送一个request,server处理,反馈一个reply,/Service类似于Server提供的一个服务接口,一般用string类型来定义service名称(类似于topic)。
在这里插入图片描述
service是同步通信方式,Client发布request后会原地等待reply,直到server处理完请求并反馈reply,Client接受到reply才会继续执行,是一种阻塞状态的通信,请求-应答通信模型只有请求时才执行服务,没有频繁的消息传递。

名称TopicService
通信方式异步通信同步通信
实现原理TCP/IPTCP/IP
通信模型Publish-SubscribeRequest-Reply
映射关系Publish-Subscribe(多对多)Request-Subscribe(多对一)
特点接受者收到数据会回调(Callback)远程过程调用(RPC)服务器端的服务(一个进程里调用另一个进程的函数)
应用场景连续、高频的数据发布偶尔使用的功能/具体的任务
举例激光雷达、里程计发布数据开关传感器、拍照、逆解计算

操作命令

rosservice 命令作用
rosservice list显示服务列表
rosservice info打印服务信息
rosservice type打印服务类型
rosservice uri打印服务ROSRPC uri
rosservice find按服务类型查找服务
rosservice call使用所提供的args调用服务
rosservice args打印服务参数

在这里插入图片描述

在这里插入图片描述

srv

srv文件用于描述service的数据类型,service的数据格式定义在.srv中,类似msg文件,声明了一个服务,包括请求(request)和响应(reply)。
例如
package/srv/A.srv

bool start
---
my_pkg/Human_pose[] pose

my_pkg/msg/Himan_pose.msg

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

my_pkg/msg/JointPose.msg

string joint_name
geometry_msgs/Pose pose
floar32 confidence

srv文件格式固定,—前是request数据,—后是reply的数据。srv可以嵌套msg(如上例),但是
msg不能嵌套srv。

操作命令

rossrv 命令作用
rossrv show显示服务描述
rossrv list列出所有服务
rossrv md5显示服务md5sum
rossrv package列出包中的服务
rossrv packages列出包含服务的包

添加依赖

定义完msg、srv文件后,需要在CMakeLists.txt 和 package.xml 中添加依赖。
package.xml

...
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run)depend>
...

CMakeLists.txt

find_package(...message_generation)
catkin_package(
...
CATKIN_DEPENDS message_runtime
...
)
add_message_file(
FILES
自定义msg文件
)
add_service_file(
FILES
自定义msg文件
)
...
generate_message(DEPENDENCIES std_msgs)

Parameter Server

parameter server:参数服务器,储存参数的地方,用于配置参数,全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。参数服务器维护着一个数据字典,字典里存储着各种参数和配置。

参数服务器的维护方式有三种:

命令行维护
launch文件内读写
node源码

命令行维护

rosparam 命令作用
rosparam set param_key param_value设置参数
rosparam get param_value显示参数
rosparam load file_name从文件加载参数
rosparam dump file_name保存参数到文件
rosparam delete删除参数
rosparam list列出参数名称

load和dump文件为YAML格式:

name:'Zhangsan'
age:20
gender:'M'
score{Chinese:80,Math:90}
score_history:[85,82,88,90]

名称+:+值

key : value
launch文件内读写
<rosparam>操作一个.YAMLw=文件
<param>一般只设置一个参数

常见的srv类型

srv类型相当于两个message通道,一个发送,一个接收

AddTwoInts.srv

#求和,---前是输入量,后是返回量
#文件位置:自定义srv文件
int32 a
int32 b
---
int32 sum

Empty.srv

#文件位置:std_srvs/Empty.srv
#代表一个空的srv类型

---

GetMap.srv

#文件位置:nav_msgs/GetMap.srv
#获取地图,注意请求部分为空

---
nav_msgs/OccupancyGrid.map

GetPlan.srv

#文件位置:nav_msgs/GetPlan.srv
#得到一条从当前位置到目标点的路径
geometry_msgs/PoseStamped start	#起始点
geometry_msgs/POseStamped goal	#目标点
float32 tolerance	#到达目标点的x,y方向的容错距离
---
nav_msgs/Path plan

SetBool.srv

#文件位置:std_msgs/SetBool.srv
bool data #启动或者关闭硬件
---
bool success	# 标示硬件是否成功运行
string message	# 运行信息

SetCameraInfo.srv

#文件位置:sensor_msgs/SetCameraInfo.srv
#通过给定的CameraInfo相机信息,来对相机进行标定
sensor_msgs/CameraInfo camera_info
---
bool success	#如果调用成功,则返回true
string status_message	#给出调用成功的细节

SetMap.srv

#文件位置:nav_msgs/SetMap.srv
#以初始位置为基准,设定新的地图
nav_msgs/OccupancyGrid map
geometry_msgs/PoseWithCovarianceStamped initial_pose
---
bool success

TalkerListener.srv


#文件位置:自定义srv文件

---
bool success	# 标示srv是否成功运行
string message	# 信息,如错误信息等

Trigger.srv

# 文件位置:std_srvs/Trigger.srv

---
bool success   # 标示srv是否成功运行
string message # 信息,如错误信息等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值