Acessando parâmetros da linha de comando
Vamos começar com alguns comandos para ver como os parâmetros funcionam.
Sumário
- Parâmetros de Listagem
- Parâmetros de consulta
- Parâmetros de configuração
- Criação e carregamento de arquivos de parâmetro
Parâmetros de Listagem
Para ver uma lista de todos os parâmetros existentes, use este comando:
rosparam list
No sistema do autor, sem nós em execução, a saída é:
/rosdistro
/roslaunch/uris/host_donatello__38217
/rosversion
/run_id
Cada uma dessas strings é um nome - especificamente, um nome de recurso de gráfico global (consulte o Capítulo 5) - que o servidor de parâmetro associou a algum valor.
⏩ Na versão atual do ROS, o servidor de parâmetroa é na verdade parte do mestre, então ele é iniciado automaticamente por
roscore
ouroslaunch
. Em quase todos os casos, o servidor de parâmetros funciona corretamente nos bastidores e não há razão para pensar sobre isso explicitamente. Lembre-se, entretanto, de que todos os parâmetros são “propriedade” do servidor de parâmetros, e não de qualquer nó específico. Isso significa que os parâmetros - mesmo aqueles criados com nomes privados - continuarão a existir mesmo depois que o nó para o qual eles se destinam for encerrado.
Parâmetros de consulta
Para solicitar ao servidor de parâmetros o valor de um parâmetro, use o comando rosparam get
:
rosparam get parameter_name
Por exemplo, para ler o valor do parâmetro /rosdistro
, use este comando:
rosparam get /rosdistro
A saída é a string indigo
, o que não é uma grande surpresa. Também é possível recuperar os valores de cada parâmetro em um namespace:
rosparam get namespace
No computador do autor, a saída é:
rosdistro: indigo
roslaunch:
uris: host_donatello__38217: http://donatello:38217/
rosversion: 1.11.9
run_id: e574a908-70c5-11e4-899e-60d819d10251
Parâmetros de configuração
Para atribuir um valor a um parâmetro, use um comando como este:
rosparam set parameter_name parameter_value
Este comando pode modificar os valores dos parâmetros existentes ou criar novos. Por exemplo, esses comandos criam parâmetros de string que armazenam as preferências de guarda-roupa de um determinado grupo de patos de desenho animado:
rosparam set /duck_colors/huey red
rosparam set /duck_colors/dewey blue
rosparam set /duck_colors/louie green
rosparam set /duck_colors/webby pink
⏩ Como alternativa, podemos definir vários parâmetros no mesmo namespace de uma vez:
rosparam set namespace values
Os valores devem ser especificados como um dicionário YAML que mapeia nomes de parâmetros para valores. Aqui está um exemplo que tem o mesmo efeito que os quatro comandos acima:
rosparam set /duck_colors "huey: red dewey: blue louie: green webby: pink"
Observe que essa sintaxe requer caracteres de nova linha no próprio comando. Isso não é um problema porque a aspa inicial “marca” sinaliza para o bash que o comando ainda não está completo. Pressionar
Enter
quando um argumento entre aspas é aberto insere um caractere de nova linha, conforme desejado, em vez de executar o comando.
⚠️ Os espaços após os dois pontos são importantes, para garantir que
rosparam
trate isso como uma coleção de parâmetros no namespace/duck_colors
, ao invés de um parâmetro de string único chamadoduck_colors
no namespace global.
Criação e carregamento de arquivos de parâmetro
Para armazenar todos os parâmetros de um namespace, no formato YAML
, em um arquivo, use rosparam dump
:
rosparam dump filename
O oposto de dump
é load
, que lê os parâmetros de um arquivo e os adiciona ao servidor de parâmetros:
rosparam load filename namespace
Para ambos os comandos, o argumento do namespace é opcional e o padrão é o namespace global (/
). A combinação de dump
e load
pode ser útil para teste, porque fornece uma maneira rápida de obter uma captura instantânea dos parâmetros em vigor em um determinado momento e recriar esse cenário mais tarde.