Скажем, у меня есть один или несколько черепах роботов, каждый с левым и правым колесами, кодер на левом и правом колесах. Колеса могут иметь двигатель с ПИД-регулированием. В системе, такой как ROS, можно получить доступ к системам и подсистемам через иерархическую систему именования: ie/turtle_1/lwheel/pid/kp, чтобы установить параметр Kp для ПИД-регулятора левого колеса или/turtle_3/lwheel/encoder для извлечения считывание кодера колеса. Черепахи будут узлами в локальной сети.Иерархия процессов и регистрация имен
Поскольку Erlang имеет пространство имен для регистрации процессов, как реализовать такой иерархический вид? Я предполагаю, что для каждого уровня в иерархии можно было зарегистрировать процесс, так как его имя - полное имя подсистемы, как в (/ turtle_1 для верхнего процесса,/turtle_1/lwheel для процесса, который управляет колесами,/turtle_1/lwheel_1/PID и т.д. есть некоторые лучшие практики для поддержания иерархического представления, используя глобальный модуль?
Вы предпочитаете кэшировать поиск pid при использовании gproc или fecth pid для каждого вызова gen_xxxx? – niahoo
Я редко их кеширую. Обычно поиск занимает несколько микросекунд. Есть так много других вещей, которые будут иметь гораздо более высокую цену в настройке. –
Спасибо. Я тоже это делаю, модуль API экспортирует функции, которые передают идентификатор, и каждая функция ищет Pid, поэтому передайте gen_server: call или другие «gen calls»; но я не знал, было ли все в порядке. Кажется, что :) – niahoo