Nomes anônimos
Além desses três tipos principais de nomes, o ROS fornece mais um mecanismo de nomeação chamado nomes anônimos, que são usados especificamente para nomear nós. O objetivo de um nome anônimo é tornar mais fácil obedecer à regra de que cada nó deve ter um nome exclusivo. A ideia é que um nó possa, durante sua chamada a ros::init
, solicitar que um nome único seja atribuído automaticamente.
Para solicitar um nome anônimo, um nó deve passar ros::init_options::AnonymousName
como o quarto parâmetro do ros::init:
ros::init(argc, argv, base_name,ros::init_options::AnonymousName);
O efeito dessa opção extra é acrescentar algum texto extra ao nome base fornecido, garantindo que o nome do nó seja único.
⏩ Embora os detalhes de qual texto específico é adicionado não sejam particularmente importantes, é interessante notar que
ros::init
usa o relógio de parede atual para formar nomes anônimos.
A Lista 5.1 mostra um trecho de programa que usa esta funcionalidade.
Lista 5.1
Um programa chamado anon.cpp
cujos nós têm nomes anônimos. Nós podemos iniciar quantas cópias deste programa quisermos, sem conflitos quanto ao nome dos nós.
// This program starts with an anonymous name, which
// allows multiple copies to execute at the same time ,
// without needing to manually create distinct names
// for each of them .
#include <ros/ros.h>
int main (int argc, char ∗∗ argv) {
ros::init (argc, argv, " anon ",
ros::init_options::AnonymousName);
ros::NodeHandle nh;
ros::Rate rate(1);
while(ros::ok()) {
ROS_INFO_STREAM( " This ␣message ␣ i s ␣ from ␣"
<< ros::this_node::getName());
rate.sleep();
}
}
Ao invés de simplesmente serem nomeados como anon
, os nós iniciados a partir deste programa recebem nomes do tipo:
/anon_1376942789079547655
/anon_1376942789079550387
/anon_1376942789080356882
O comportamento do programa é bastante normal, mas como ele solicita um nome anônimo, temos a liberdade de executar quantas cópias simultâneas quisermos desse programa, sabendo que a cada uma será atribuído um nome exclusivo quando for iniciada.