Note: This tutorial assumes that you have completed the previous tutorials: Gerando um pacote no ROS. |
Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags. |
Um pouco mais sobre nós(''nodes'') no ROS
Description: Este tutorial apresenta os conceitos introdutórios sobre os componentes básicos do ROS (também referenciados como ROS Graph) e discute o uso das ferramentas utilizadas via terminal: roscore, rosnode e rosrun.Tutorial Level: BEGINNER
Next Tutorial: Entendendo tópicos no ROS
Contents
Pré-requisitos
Nesse tutorial, utilizaremos um simulador relativamente simples, para isso é necessário a instalação das seguintes dependências:
$ sudo apt-get install ros-<distro>-ros-tutorials
Sendo que '<distro>' deve ser substituído pela sua atual distribuição do ROS (hydro, groovy, electric, fuerte, kinetic, lunar ou morenia)
Rápida Revisão Sobre Conceitos do ROS
Nó: Um nó(node) consiste em um executável (aplicação gerada por meio de um código fonte) que utiliza o ROS para realizar a comunicação com outros nó(node).
Menssagens: Tipos de dados no ROS usados quando se publica ou sobrescreve de tópico.
Tópicos: Nós(node) podem publicar menssagens em tópicos assim como podem subescrever menssagens de tópicos.
Master: Service de gerenciamento do sistema do ROS (ex: ajuda os nós a se encontrarem no sistema.)
rosout: Equivalente do ROS ao stdout/stderr
roscore: Comando para inicializar o Master + rosout + servidor de parâmetros (o conceito de servidos de parâmetros será explicado posteriormente). É um dos comandos para inializar o "sistema" do ROS.
Nós(''node'')
Um nó(node) na verdade é apenas um arquivo executável dentro de um pacote do ROS. Nós(node) no ROS usam bibliotecas clientes (client librarys) para se comunicar com outros nós(node). Nós(node) podem publicar e/ou subscrever em tópicos, além de poderem prover serviços(services) também.
As bibliotecas clientes( rospy = bibliotecas clientes( roscpp = bibliotecas clientes(
roscore é o comando para inicializar o Master e deve ser a primeira coisa a ser inicializada no ROS Dando o comando no terminal: Deve ser visto algo similiar a isso: Se o roscore não inicializar, provavelmente existe um problema de configuração de rede. Dê uma olhada em Network Setup - Single Machine Configuration Se o roscore não inicializar e enviar uma menssagem sobre falta de permissão, provavelmente a pasta ~/.ros pertence ao root, mude recurssivamente o usuário "dono" da pasta com:
Abra um novo terminal e use o rosnode para visualizar o que esta rodando no roscore: Note: Quando um novo terminal é inicializado, seu ambiente é resetado e seu arquivo ~/.bashrc é inicializado novamente. Se estiver ocorrendo problemas rodando os comandos como rosnode, provavelmente é necessário colocar as configurações de ambiente no seu arquivo ~/.bashrcou manualmente reinicializar o arquivo. O comando rosnode mostra as informações dos nós( Se for visto: Isso mostra que tem apenas um nó( O comando rosnode info retorna informações sobre um nó( Nos retorna mais informações sobre rosout, como o fato de publicar no /rosout_agg. Agora, vamos ver mais informações sobre os nós(
rosrun permite que seja usado o nome do pacote( Uso: Agora podemos rodar o nó( Então, num novo terminal: A janela do turtlesim irá aparecer: NOTE: A tartaruga pode ser diferente na sua janela. Não se preocupe - existem vários modelos de tartarugas e a sua é uma suspresa! Em um novo terminal: Você deve ver algo similar a isso: Uma ferramenta poderosa do ROS é a possibilidade de redefir nomes através da linha de comando. Feche a janela do turtlesim para parar o nó( Agora, se for usado o comando rosnode list: Você deve ver algo como: Note: Se você ainda esta vendo /turtlesim na lista, pode significar que você parou o nó(node) no terminal usando ctrl-C ao invés de fechar a janela, ou que você não tem a variável de ambiente $ROS_HOSTNAME definida como descrito em Network Setup - Single Machine Configuration. Você pode tentar limpar o rosnode list com: $ rosnode cleanup Agora vemos o novo nó(
O que foi abordado: rosnode = ros+node : Ferramenta do ROS para obtenção de informações sobre os nós( rosrun = ros+run : rodam os nós( Agora que você entende de como os nós(Bibliotecas Clientes (''client librarys'')
client librarys) em Python roscore
$ roscore
... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://machine_name:33919/
ros_comm version 1.4.7
SUMMARY
========
PARAMETERS
* /rosversion
* /rosdistro
NODES
auto-starting new master
process[master]: started with pid [13054]
ROS_MASTER_URI=http://machine_name:11311/
setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]
$ sudo chown -R <your_username> ~/.ros
Using rosnode
$ rosnode list
/rosout
$ rosnode info /rosout
------------------------------------------------------------------------
Node [/rosout]
Publications:
* /rosout_agg [rosgraph_msgs/Log]
Subscriptions:
* /rosout [unknown type]
Services:
* /rosout/set_logger_level
* /rosout/get_loggers
contacting node http://machine_name:54614/ ...
Pid: 5092
Usando rosrun
$ rosrun [nome_do_pacote] [nome_do_nó]
$ rosrun turtlesim turtlesim_node
$ rosnode list
/rosout
/turtlesim
$ rosrun turtlesim turtlesim_node __name:=my_turtle
$ rosnode list
/rosout
/my_turtle
$ rosnode ping my_turtle
rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/ time=1.152992ms
xmlrpc reply from http://aqy:42235/ time=1.120090ms
xmlrpc reply from http://aqy:42235/ time=1.700878ms
xmlrpc reply from http://aqy:42235/ time=1.127958ms
Revisão
nodes).