RPC(远程过程调用)
Remote Procedure CallRPC常用像调用本地函数一样,调用另一个进程或另一台机器上的函数
RPC 是一种程序间通信方式:代码里像平常一样调用一个函数,真正执行它的却是另一个进程,通常在另一台机器上。客户端把函数名和参数打包发给服务端,服务端执行完把返回值或报错传回来。gRPC、zerorpc 是常见实现,ROS 的服务也是这种一问一答。它和发布/订阅不同:发布/订阅是一对多的单向数据流,发送方不等回复,适合持续的传感器数据;RPC 是一对一的请求-应答,调用方要拿到结果,适合下发指令、查询状态。机器人系统里常见两种用法:笔记本调用控制机上的机器人接口,如 DROID 用 zerorpc 调 NUC 上读状态、发指令的函数;以及远程策略推理,把观测发给 GPU 服务器、取回动作。远程调用比本地慢几个数量级,还可能因网络出错,所以 1 kHz 级的底层控制环要留在控制机本地。
例子机器人端调用 openpi 客户端的 policy.infer(obs),写法和调用本地模型一样;实际上观测被打包发到 GPU 服务器,推理出的动作块再传回来。这就是 RPC 的思路,只是 openpi 底层用 WebSocket 实现。
- 也叫
- 远程过程调用、远程调用
- 相关
- 发布/订阅、服务、gRPC、zerorpc、策略服务器、中间件
- 来源
- Remote procedure call - Wikipedia
ROS Wiki: Services(发布/订阅与 RPC 式请求-应答的区别)
DROID 代码:droid/misc/server_interface.py(zerorpc 客户端)