Nomes privados

Nomes privados, que começam com um caractere til (), são a terceira e última classe de nomes de recursos de gráfico. Assim como os nomes relativos, nomes privados não especificam totalmente o namespace em que eles existem e, em vez disso, contam com a biblioteca cliente ROS para resolver o nome para um nome completo global. A diferença é que, em vez de usar o namespace padrão atual, nomes privados usam o nome de seu nó como um namespace.

Por exemplo, em um nó cujo nome global é /sim1/pubvel, o nome privado ∼max_vel seria convertido em um nome global como este:

nome do nó nome privado tipo de dados global
/sim1/pubvel ∼max_vel /sim1/pubvel/max_vel

A intuição é que cada nó tem seu próprio namespace para coisas que estão relacionadas apenas a esse nó, e que não interessam a mais ninguém. Nomes privados são frequentemente usados para parâmetros — roslaunch tem um recurso específico para definir parâmetros que são acessíveis por nomes privados — e serviços que administram a operação de um nó. Geralmente é um erro usar um nome privado para se referir a um tópico porque, se estivermos mantendo nossos nós fracamente acoplados, nenhum tópico será “propriedade” de qualquer nó em particular.

⚠️Nomes privados são privados apenas no sentido de serem resolvidos em um namespace que provavelmente não será usado por outros nós. Recursos de grafo referidos por nomes privados permanecem acessíveis, por meio de seus nomes globais, a qualquer nó que conheça seu nome. Este é um contraste, por exemplo, com a palavra-chave private em C ++ e linguagens semelhantes, que impede que outras partes de um sistema acessem certos membros da classe.