## page was copied from ROS/Tutorials/UnderstandingServicesParams #################################### ##FILL ME IN #################################### ## links to any required tutorials ## note.0= [[ROS/Tutorials/UnderstandingTopics|understanding ROS topics]] ## descriptive title for the tutorial ## title = Entendendo Serviços e Parâmetros ROS ## multi-line description to be displayed in search ## description = Esse tutorial introduz Serviços e Parâmetros ROS, bem como o uso das ferramentas de linha de comando [[rosservice]] e [[rosparam]]. ## the next tutorial description ## next = ## links to next tutorial ## next.0.link= [[pt_BR/ROS/Tutorials/UsingRqtconsoleRoslaunch|Using rqt_console and roslaunch]] ## next.1.link= ## what level user is this tutorial for ## level= BeginnerCategory #################################### <> <> Assumindo que o nó `turtlesim_node` do útimo tutorial ainda está rodando, vamos dar uma olhada em quais serviços o turtlesim tem. === Serviços ROS === Serviços são outra maneira com a qual os nós podem se comunicar entre si. Um serviço permite que um dado nó envie '''requisições (requests)''' e receba '''respostas (responses)'''. === Usando rosservice === `rosservice` possui vários comandos que podem ser utilizados, como é mostrado abaixo: Uso: {{{ rosservice list mostra informações sobre serviços ativos rosservice call chama o serviço com os argumentos dados rosservice type mostra o tipo do serviço rosservice find procura serviços pelo tipo rosservice uri mostra a uri do serviço ROSRPC }}} ==== rosservice list ==== {{{ $ rosservice list }}} O comando `list` mostra que o nó turtlesim contém 9 serviços: `reset`, `clear`, `spawn`, `kill`, `turtle1/set_pen`, `/turtle1/teleport_absolute`, `/turtle1/teleport_relative`, `turtlesim/get_loggers`, e `turtlesim/set_logger_level`. Há também 2 serviços relacionados a outro nó, o `rosout`: `/rosout/get_loggers` e `/rosout/set_logger_level`. . {{{ /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level }}} Vamos dar uma olhada melhor no serviço `clear` usando `rosservice type`: ==== rosservice type ==== Uso: {{{ rosservice type [service] }}} Vamos descobrir de que tipo é o serviço clear: {{{ $ rosservice type clear }}} . {{{ std_srvs/Empty }}} Esse serviço é vazio, o que quer dizer que quando ele é chamado, não recebe nenhum argumento (ou seja, não envia dado nenhum quando faz uma requisição nem recebe dado nenhum quando recebe uma resposta). Vamos chamar esse serviço usando `rosservice call`: ==== rosservice call ==== Uso: {{{ rosservice call [service] [args] }}} Aqui, nós vamos chamá-lo sem nenhum argumento pois ele é do tipo vazio: {{{ $ rosservice call /clear }}} Isso faz o que se espera, ou seja, apaga o fundo da tela do nó `turtlesim_node`. . {{attachment:turtlesim.png}} Vamos dar uma olhada no caso onde o serviço tem argumentos, como é o caso do serviço spawn: {{{ $ rosservice type spawn| rossrv show }}} . {{{ float32 x float32 y float32 theta string name --- string name }}} Esse serviço permite que se instancie uma nova tartaruga em um dado local e com uma dada orientação. O campo name é opcional, então vamos não dar nome nenhum à nossa nova tartaruga e deixar o turtlesim nomeá-la. {{{ $ rosservice call spawn 2 2 0.2 "" }}} A chamada desse serviço retorna o nome da tartaruga criada: . {{{ name: turtle2 }}} Agora, o nosso turtlesim deve parecer assim: . {{attachment:turtle(service).png|turtle(service).png}} === Usando rosparam === `rosparam `permite que você armazene e manipule dados no Servidor de Parâmetros do ROS, o ROS [[Parameter Server]]. O Servidor de Parâmetros pode armazenar inteiros, pontos flutuantes, booleanos, dicionários e listas. rosparam usa sintaxe de linguagem de marcação YAML. Em casos simples, YAML parece bem natural: `1` é um inteiro, `1.0` é ponto flutuante, `one` é uma string, `true` é um booleano, `[1, 2, 3]` é uma lista de inteiros e `{a: b, c: d}` é um dicionário. `rosparam` tem muitos comandos que podem ser utilizados com parâmetros, como mostrado abaixo: Uso: {{{ rosparam set escreve no parâmetro rosparam get lê o parâmetro rosparam load carrega parâmetros de um arquivo rosparam dump grava parâmetros em um arquivo rosparam delete deleta o parâmetro rosparam list mostra nos nomes dos parâmetros }}} Vamos dar uma olhada quais parâmetros estão agora no Servidor de Parâmetros: ==== rosparam list ==== {{{ $ rosparam list }}} Aqui nós podemos ver que o nó turtlesim tem 3 parâmetros no Servidor de Parâmetros que são utilizados para a cor do plano de fundo: . {{{ /background_b /background_g /background_r /roslaunch/uris/aqy:51932 /run_id }}} Vamos mudar um desses parâmetros usando `rosparam set`: ==== rosparam set e rosparam get ==== Uso: {{{ rosparam set [nome_do_parametro] rosparam get [nome_do_parametro] }}} Vamos mudar o canal vermelho do plano de fundo: {{{ $ rosparam set background_r 150 }}} Isso muda o valor do parâmetro. Agora, nós temos que chamar o serviço clear para que a mudança no parâmetro tenha efeito: {{{ $ rosservice call clear }}} Agora o nosso turtlesim deve parecer assim: . {{attachment:turtle(param).png|turtle(param).png}} Agora vamos dar uma olhada nos outros parâmetros do Servidor de Parâmetros. Vamos ler o valor do canal verde do plano de fundo: {{{ $ rosparam get background_g }}} . {{{ 86 }}} Nós também podemos usar `rosparam get /` para mostrar o todo o conteúdo do Servidor de Parâmetros. {{{ $ rosparam get / }}} . {{{ background_b: 255 background_g: 86 background_r: 150 roslaunch: uris: {'aqy:51932': 'http://aqy:51932/'} run_id: e07ea71e-98df-11de-8875-001b21201aa8 }}} Você pode querer armazenar esses valores em um arquivo para recarregá-los em outro momento. É fácil fazê-lo usando `rosparam`: ==== rosparam dump e rosparam load ==== Uso: {{{ rosparam dump [nome_do_arquivo] [namespace] rosparam load [nome_do_arquivo] [namespace] }}} Aqui nós escrevemos todos os parâmetros no arquivo params.yaml {{{ $ rosparam dump params.yaml }}} Você pode até mesmo carregar esses arquivos yaml em novos ''namespaces'', por exemplo `copy`: {{{ $ rosparam load params.yaml copy $ rosparam get copy/background_b }}} . {{{ 255 }}} Agora que você entende como Serviços e Parâmetros no ROS funcionam, vamos [[pt_BR/ROS/Tutorials/UsingRqtconsoleRoslaunch|tentar usar rqt_console e roslaunch]] ## AUTOGENERATED DO NOT DELETE ## TutorialCategory ## ROSTutorialCategory ## TutorialTurtlesim