Robot Operating System (ROS) Walter Fetter Lages fetter@ece.ufrgs.br Universidade Federal do Rio Grande do Sul Escola de Engenharia Departamento de Sistemas Elétricos de Automação e Energia ELE228 Robótica A Copyright (c) Walter Fetter Lages p.1
Introdução ROS é um pseudo sistema operacional com ferramentas para desenvolvimento de software para robôs: Gerenciamento de pacotes Abstração de hardware Bibliotecas com algoritmos comumente utilizados Simuladores Mecanismos de comunicação scripts úteis Copyright (c) Walter Fetter Lages p.2
Porque ROS? Código aberto Centralização das informações Reuso de código Desenvolvimento em grupo Processamento inerentemente distribuído Nodos fracamente acoplados Parar de reinventar a roda Copyright (c) Walter Fetter Lages p.3
Histórico Sistema desenvolvido em Stanford em 2000 para o robô STAIR 1 Aperfeiçoado em 2007 pela Willow Garage para o robô PR2 e denominado ROS Copyright (c) Walter Fetter Lages p.4
Versões do ROS Lunar Loggerhead - 23 de maio de 2017 Kinetic Kame - 23 de maio de 2016 Jade Turtle - 23 de maio de 2015 Indigo Igloo - 22 de julho de 2014 Hydro Medusa - 4 de setembro de 2013 Groovy Galapagos - 31 de dezembro de 2012 Fuerte Turtle - 23 de abril de 2012 Electric Emys - 30 de agosto de 2011 Diamond Back - 2 de março de 2011 C Turtle - 2 de agosto de 2010 Box Turtle - 2 de março de 2010 Copyright (c) Walter Fetter Lages p.5
Sistema Operacional Host Linux é o sistema operacional host A distribuição "oficial" é a Ubuntu Outras distribuição suportadas: Ubuntu ARM OS X Yocto Debian Arch Linux Ângström UDOO Android Código fonte robotpkg Copyright (c) Walter Fetter Lages p.6
Conceitos O ROS é organizado em pacotes Nodos (processo do sistema operacional hospedeiro) programas utilitários Bibliotecas Definições de mensagens Arquivos de configuração Plugins Pacotes podem ser agrupados em metapacotes Copyright (c) Walter Fetter Lages p.7
Pacotes Menor nível na organização do ROS Dedicados a uma única funcionalidade Cada pacote deve ser implementado em um diretório Copyright (c) Walter Fetter Lages p.8
Estrutura de um Pacote catkin_ws/ build/ nome_do_pacote/...temporários devel/ lib/...bibliotecas nome_do_pacote/... Executáveis setup.bash...script de configuração src/ nome_do_pacote/ src/... Códigos-fonte launch/...scripts de carga scripts/...outros scripts include/...arquivos de cabeçalho package.xml... Metadados e dependências CMakelist.txt..Configuração docmake Copyright (c) Walter Fetter Lages p.9
Metapacotes Agrupam pacotes que em conjunto oferecem uma funcionalidade mais abstrata Pacotes não podem depender de metapacotes Copyright (c) Walter Fetter Lages p.10
roscore roscore é um conjunto de nodos e programas que são pré-requisitos para um sistema ROS Deve ser executado para que os nodos do ROS possam se comunicar É lançado com o comandoroscore O comandoroslaunch também lança o roscore, se ele ainda não estiver executando Oroscore inicia os seguintes nodos: ROS master ROS parameter server rosout Copyright (c) Walter Fetter Lages p.11
ROS Master Nodo que provê serviços de registro e consulta de nomes de nodos, tópicos e serviços Ao iniciar, os nodos devem registrar-se com o mestre Ao subscrever um tópico, os nodos consultam o mestre e estabelecem conexão diretamente entre si É lançado pelo comandoroscore O computador onde o ROS Master está executando é especificado através da variável de ambienteros_master_uri Copyright (c) Walter Fetter Lages p.12
Servidor de Parâmetros Nodo que provê um dicionário acessível aos demais nodos É lançado pelo comandoroscore Nodos podem usar o servidor de parâmetros para armazenar e recuperar parâmetros Não projetado para alto desempenho Adequado para parâmetros de configuração Não é um substituto para aplicações de banco de dados Copyright (c) Walter Fetter Lages p.13
Comunicação através de Tópicos Nodo: processo do S.O. hospedeiro Tópico: mecanismo de comunicação entre nodos do tipo publisher/subscriber Mensagem: dados publicados nos tópicos Gráfico de computação: Representa a comunicação entre os nodos através de tópicos Copyright (c) Walter Fetter Lages p.14
Tópicos Nodos podem publicar mensagens em tópicos Cada tópico pode ter vários publicadores e assinantes Cada nodo pode publicar ou assinar vários tópicos Publicadores e assinantes não sabem da existência um dos outros A ordem de execução não é garantida Comunicação assíncrona Copyright (c) Walter Fetter Lages p.15
Serviços Tópicos não são apropriados para solicitação de serviços entre nodos Serviço: mecanismo de comunicação entre nodos do tipo remote procedure call (RPC) Serviços oferecem um mecanismo de requisição/resposta Copyright (c) Walter Fetter Lages p.16
Action Servers Apropriados para serviços exigem longo tempo de execução Permitem o cancelamento da requisição Permitem receber informações sobre o status da execução Copyright (c) Walter Fetter Lages p.17
Rviz Rviz é uma ferramenta do ROS para vizualização Mostra de forma conveniente dados publicados em tópicos Copyright (c) Walter Fetter Lages p.18
Gráfico de Computação A ferramentarqt_graph Permite vizualizar os nodos e tópicos Copyright (c) Walter Fetter Lages p.19
Gazebo Simulador 3D Suporta diversos backends Open Dynamics Engine (ODE) Bullet O modelo do robô é descrito em URDF Copyright (c) Walter Fetter Lages p.20
Barrett WAM no Gazebo Copyright (c) Walter Fetter Lages p.21
URDF Formato XML para descrição de robôs Descreve a geometria e propriedades de massa <robot name="twil" >: definição do nome do robô <link name="chassis" >: define um elo do robô <mass value="6.4923"/>: define a messa do ele <inertia=... >: define a inércia do elo <geometry> <mesh filename="package://twil/meshes/chassis.stl </geometry>: STL com a geometria do elo <joint name="right_wheel_suport_joint"type="fixed" >: define uma junta fixa Copyright (c) Walter Fetter Lages p.22
Exemplo de URDF <robot name="twil"> <link name="chassis"> <inertial> <origin xyz="6.3955e 06 2.1963E 17 0.27338" rpy="0 0 0" / > <mass value="6.4923" /> <inertia ixx="0.67525" ixy="0.0014553" ixz=" 0.00017525" </inertial> <visual> iyy="0.69058" iyz=" 6.3289E 18" izz="0.28611" /> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://twil/meshes/chassis.stl" /> </geometry> </visual> Copyright (c) Walter Fetter Lages p.23
Exemplo de URDF <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://twil/meshes/chassis.stl" /> </geometry> </collision> </link>.. <joint name="right_wheel_suport_joint" type="fixed"> <origin xyz="0 0.161 0.002" rpy="0 0 0" /> <parent link="chassis" /> <child link="right_wheel_suport" /> <axis xyz="0 0 0" /> </joint> </robot> Copyright (c) Walter Fetter Lages p.24
Pacotewam_description wam_description/ launch/ wam.launch wam_sim.launch package.xml meshes/ wam1.stl. wambase.stl xacro/ wam_base.urdf.xacro. wam.urdf.xacro Copyright (c) Walter Fetter Lages p.25
Pacotepid_plus_gravity_controller pid_plus_gravity_controller/ CMakeLists.txt pid_plus_gravity_controller_plugin.xml include/ pid_plus_gravity_controller/ pid_plus_gravity_controller.h package.xml src/ pid_plus_gravity_controller.cpp Copyright (c) Walter Fetter Lages p.26
Pacotecomputed_torque_controller computed_torque_controller/ CMakeLists.txt computed_torque_controller_plugin.xml include/ computed_torque_controller/ computed_torque_controller.h package.xml src/ computed_torque_controller.cpp Copyright (c) Walter Fetter Lages p.27
Pacotewam_simulation wam_simulation/ CMakeLists.txt config/ computed_torque_controller.yaml pid_plus_gravity_controller.yaml package.xml launch/ gazebo.launch scripts/ move_home.sh move_initial.sh move_zero.sh set_home.sh set_initial.sh Copyright (c) Walter Fetter Lages p.28
Gráfico de Computação do WAM Copyright (c) Walter Fetter Lages p.29
Barrett WAM no Gazebo Copyright (c) Walter Fetter Lages p.30