1

たとえば、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

The simplest way to solve this is to introduce a routing process or a routing map which can bind a hierarchy to a Pid. You have several options:

  • gproc provides nice ETS based registry tables
  • A process implementing the hierarchy with eventual forwarding on the LAN
  • Global - it takes arbitrary terms as a name, so one could register a tuple in the namespace which would amount to having a tree-ordered namespace.
  • A process updating an ETS table so the routing decision itself is in the message sender.

最適なものは、分散設定でのコンセンサスの必要性や、ルーティング ルックアップに必要な速度によって異なります。また、ルーティング ルックアップをキャッシュできるかどうかに関係なく使用できます。

于 2013-09-23T10:52:22.190 に答える