1

比方说,我有一个或多个机器人海龟,每个都有一个左右轮,左右轮上都有一个编码器。车轮可能有一个 PID 控制的电机。在像 ROS 这样的系统中,可以通过分层命名系统访问系统和子系统:即 /turtle_1/lwheel/pid/kp 设置左轮 PID 控制器的 Kp 参数或 /turtle_3/lwheel/encoder 获取车轮的编码器读数。海龟将是 LAN 上的节点。

既然 Erlang 有一个用于注册进程的平面名称空间,那么应该如何实现这样的分层视图呢?我想可以为层次结构中的每个级别注册一个进程,其名称为子系统的完整限定名称,如(/turtle_1 为顶级进程,/turtle_1/lwheel 为控制轮子的进程,/turtle_1/ lwheel_1/pid 等。是否有一些使用全局模块维护分层视图的最佳实践?

4

1 回答 1

3

解决这个问题的最简单方法是引入一个路由过程或路由映射,它可以将层次结构绑定到Pid. 你有几个选择:

  • gproc提供不错的基于 ETS 的注册表
  • 实现层次结构并最终在 LAN 上转发的过程
  • 全局 - 它采用任意术语作为名称,因此可以在命名空间中注册一个元组,这相当于拥有一个树形命名空间。
  • 更新 ETS 表的过程,因此路由决策本身在消息发送者中。

什么是最好的取决于您在分布式设置中对共识的需求和/或路由查找所需的速度。此外,无论您是否可以缓存路由查找。

于 2013-09-23T10:52:22.190 回答