Ultima Versão - TCC Robotica
Ultima Versão - TCC Robotica
Ultima Versão - TCC Robotica
SISTEMAS DE INFORMAÇÃO
CAMPUS DIVINÓPOLIS
DIVINÓPOLIS - MG
2020
GABRIELA LANNA DE ALMEIDA
DIVINÓPOLIS - MG
2020
GABRIELA LANNA DE ALMEIDA
A robótica móvel é uma área em constante evolução, com constantes pesquisas. Neste
aspecto, é comum a necessidade de uma plataforma robótica para averiguar hipóteses de uma
pesquisa científica na prática. Assim sendo, faz-se necessária a aquisição ou montagem de um
robô. Contudo, a construção pode ser complexa ou não estar diretamente relacionada ao
escopo do estudo (como a implementações de funcionalidades de software), o que acarreta em
perda significativa de tempo, enquanto que a compra pode ser frustrada pelos altos preços.
Ademais, encontrar robôs móveis de baixo custo e bem documentados que possibilitem a
reprodução não é algo trivial. O presente trabalho procurou preencher estas lacunas, a partir
de uma plataforma robótica móvel, denominada SciCoBot (Science, Coffee e Robot), de baixo
custo, open source, modular e expansiva, baseada em ROS 2, micro-ROS, Arduino Due e
Raspberry Pi. Sendo a plataforma idealizada como ferramenta de pesquisa para temas
relacionados a robótica cooperativa, principalmente para emprego na Faculdade Pitágoras,
campus Divinópolis. Para isso, uma versão inicial com alguns sensores foi montada e uma
arquitetura de código modular para o Arduino e o Raspberry foi desenvolvida. Procurando
validar a versão construída, aplicações de software com os sensores foram exemplificadas e
documentadas no GitHub. Com a plataforma robótica pronta e funcional, foi possível
compará- la com outras estruturas, onde a SciCoBot se destaca para uso especifico na
Faculdade, já que dispõe de dispositivos disponíveis no laboratório, o que potencializa o baixo
custo e possibilita que projetistas da Faculdade utilizem seus conhecimentos prévios para
compreensão do robô. Além disso, este trabalho fornece uma boa revisão de estruturas
robóticas disponíveis na comunidade open source.
Mobile robotics is an area in constant evolution, with constant research. In this regard, it is
common to need a robotic platform to investigate hypotheses of scientific research in practice.
Therefore, the acquisition or assembly of a robot is necessary. However, the construction can
be complex or not be directly related to the scope of the study (such as the implementation of
software features), which leads to reduced time loss, while that the purchase can be frustrated
by the high prices. Furthermore, finding low-cost, well-documented mobile robots that make
reproduction possible is not trivial. Seeking to fill these gaps, the present work proposes the
development of a mobile robotic platform, called SciCoBot (Science, Coffee and Robot), of
low cost, modular and expansive, based on ROS 2, micro-ROS, Arduino Due and Raspberry
Pi. The platform is idealized as a research tool for topics related to a robotic cooperative,
mainly for employment at Faculdade Pitágoras, Divinópolis campus. For this, an initial
version with some sensors was assembled and a modular code architecture for Arduino and
Raspberry was developed. Seeking to validate the built version, software applications with the
sensors were exemplified and documented on GitHub. With the robotic platform ready and
functional, it was possible to compare it with other structures, where SciCoBot stands out for
specific use in the Faculdade, since it has devices available in the laboratory, which enhances
the low cost and allows Faculdade designers to use their previous knowledge to understand
the robot. Furthermore, this work provides a good review of robotic structures available in the
open- source community.
Tabela 1.1 - Alguns robôs usados na educação e/ou pesquisa. Conversão para real com uma
Libra equivalente a R$ 7,16, um Euro R$ 5,66 e um dólar R$ 5,33 16
Tabela 2.1: Pesquisa e número de resultados para recursos de robôs móveis..........................31
Tabela 2.2: Característica de alguns Arduino...........................................................................35
Tabela 2.3: Características de alguns modelos de Raspberry Pi...............................................36
Tabela 2.4: Distribuições ROS.................................................................................................46
Tabela 3.1: Materiais e o custos estimados...............................................................................59
Tabela 4.1: Robôs com propostas semelhantes ao Scicobot.....................................................68
Tabela 4.2: Ligações elétricas entre os componentes...............................................................73
Tabela 5.1: Comparação entre estruturas robóticas..................................................................85
Tabela 5.2: Resumo dos objetivos e realizações deste trabalho...............................................86
LISTA DE ABREVIATURAS
LISTA DE FIGURAS...............................................................................................................6
LISTA DE TABELAS..............................................................................................................9
LISTA DE ABREVIATURAS...............................................................................................10
1 INTRODUÇÃO...............................................................................................................14
2.1 ROBÓTICA...............................................................................................................29
2.1.1 Robótica Móvel..................................................................................................30
2.1.2 Multi-robôs........................................................................................................33
2.2 ARDUINO.................................................................................................................34
2.3 RASPBERRY.............................................................................................................35
2.3.1 LINUX................................................................................................................36
2.4 ENCODER.................................................................................................................37
2.5 SENSORES DE OBSTÁCULO.................................................................................38
2.6 PONTE H...................................................................................................................39
2.7 GITHUB E GIT..........................................................................................................39
2.8 LICENÇAS OPEN SOURCE.....................................................................................41
2.9 ROBOT OPERATING SYSTEM..............................................................................42
2.9.1 Exemplos de Trabalhos Baseados em ROS....................................................46
2.9.3 Ferramentas.......................................................................................................49
2.9.5.1 Micro-Ros....................................................................................................51
2.9.5.2 Ros-serial.....................................................................................................53
2.9.5.3 Ros2arduino.................................................................................................53
2.9.6 Ros1_bridge.......................................................................................................54
2.10 PROGRAMAÇÃO.......................................................................................................54
2.11 ACESSO REMOTO...................................................................................................55
2.12 CONSIDERAÇÕES FINAIS.....................................................................................57
3 MATERIAIS E MÉTODOS...........................................................................................58
3.1 MATERIAIS..............................................................................................................59
3.2 METODOLOGIA......................................................................................................59
3.3 CONSIDERAÇÕES FINAIS.....................................................................................61
4 DESENVOLVIMENTO..................................................................................................62
4.1.2 Hadabot..............................................................................................................64
4.1.3 Linorobot...........................................................................................................65
4.1.4 Contribuições.....................................................................................................66
REFERÊNCIAS......................................................................................................................90
14
1 INTRODUÇÃO
Figura 1.2 - Quantidade de resultados ao pesquisar termos relacionados a robótica no IEEE Xplore.
de Robótica, na Coreia do Sul o número de robôs para cada 10 mil operários ultrapassa 500, já
em Cingapura, Japão e Alemanha a média é superior a 300. Enquanto isso, no Brasil, avalia-
se que sejam cerca de 10 robôs para cada 10 mil operários. Além disso, a quantidade de robôs
instalados no Brasil equivale a 0,6% dos instalados no mundo, número muito inferior à China
e EUA. Sendo que, no Brasil, o setor automobilístico sozinho possui mais de 50% da
quantidade total de robôs utilizados no país (FENERICK; VOLANTE, 2020).
Os robôs móveis são uma categoria de robôs que possuem a capacidade de se
locomover, podendo ser aéreos, aquáticos ou terrestres (HENRIQUE, 2019; JAHN et al.,
2020). Os robôs terrestres podem ser subdivididos de acordo com o dispositivo de locomoção
utilizado: rodas, esteiras e pernas, sendo os robôs sobre rodas os mais simples e populares.
Neste contexto, a robótica móvel tem sido objeto de constante pesquisa, a Figura 1.3
apresenta o número de publicações na IEEE Xplore ao pesquisar por mobile robot e mobile
robotics, onde, percebe-se um crescente aumento desde 2016 (JAHN et al., 2020).
Figura 1.3 - Quantidade de resultados ao pesquisar termos relacionados a robótica móvel no IEEE Xplore.
Tabela 1.1 - Alguns robôs usados na educação e/ou pesquisa. Conversão para real com uma Libra equivalente a
R$ 7,12, um Euro R$ 5,93 e um dólar R$ 5,27, realizada 01/02/2022.
Robô Ano Custo [R$]
Pioneer 3DX 1995 19171,69
Amigobot 2001 18679,5
E-puck 2009 4984,00
Turtlebot 2 2012 9920,89
Rice r-one 2013 1424,00
Colias 2014 178,00
Edison 2014 305,87
Khepera IV 2016 17784,07
MicroMVP 2017 498,40
Turtle 3 (burger) 2017 3474,68
Turtle 3 (waffle) 2017 8296,07
Rosbot 2.0 2018 9849,73
Husky A200 - 163370,00
Summit-XL - 76415,00
Robotino - 44795,00
E-puck2 - 5270,00
Turtlebot 2i - 11594,00
Fonte: Modificado (AMSTERS; SLAETS, 2019; ARVIN et al, 2019; MARÍN, 2018).
Um dos componentes mais importantes de qualquer sistema robótico é a arquitetura do
software, isso é ainda mais evidente ao usar uma equipe de robôs. No entanto, o projeto de
uma arquitetura de software é uma área completa de estudo. Diante disso, projetistas recorrem
a arquiteturas existentes para estruturar seus projetos. Dentre as arquiteturas de software
robóticos existentes, Robot Operating System (ROS) é um dos mais populares, sendo utilizado
tanto na comunidade acadêmica quanto na indústria (GARZÓN, 2017; LEMOS;
MENDONÇA, 2020; SANTOS; CUNHA; MACEDO, 2019). Em suma, ROS possui um
conjunto de ferramentas de software, bibliotecas e convenções, com o objetivo de simplificar
a tarefa de desenvolver softwares para um robô. Isso facilita e agiliza a implementação, não
sendo necessário recomeçar a cada novo trabalho (TSARDOULIAS; MITKAS, 2017). Um
dos diferenciais do ROS é que ele possui uma comunidade ativa, que compartilha inúmeros
módulos reutilizáveis (ALVARO; KOZIOL, 2020). Atualmente, tem-se uma nova versão do
17
ROS, denominada ROS 2, com foco em operações descentralizadas, podendo ser um marco
para as pesquisas em sistemas multi-robôs.
A constituição eletrônica de um robô pode variar muito. Sabe-se que o hardware
influencia diretamente no desempenho do robô, pois permite a aplicação de algoritmos
complexos em uma dada qualidade (DE SOUSA et al., 2018). Dentre os diversos eletrônicos
utilizados destaca-se aqui o Raspberry Pi e Arduino, estruturas abertas bastante difundidas
(BENTO, 2018; MORENO; PAEZ, 2017; VAUTIER et al., 2018). O Arduino é uma
plataforma de hardware e software que roda em Mac, Windows e Linux; ele possui baixo
custo; dispõe de fácil acesso e implementação; comunidade ativa; é facilmente adaptável e
extensível (ARDUINO, 2018; BENTO, 2018). Por outro lado, o Raspberry Pi, é um mini
computador de baixo custo, suas principais características são: grande quantidade de
exemplos publicados na Internet, o que auxilia o desenvolvimento de projetos; suporte de
sensores essenciais para direção autônoma, como Light Detected And Ranging (LiDAR) e
possibilidade de instalação do sistema operacional Ubuntu, oficialmente compatível com ROS
(BENTO, 2018; NAKAMOTO; KOBAYASHI, 2019).
Raspberry, Arduino e ROS são peças convenientes para aplicações robóticas, inclusive
em casos envolvendo grupos de robôs cooperativos de até média complexidade com recursos
limitados de hardware, como em: ESCOBAR et al. (2020); KASSAWAT e CERVERA
(2019); SAYED, AMMAR e SHALABY (2020); e VERMA (2019). Ou seja, em situações
onde é necessária uma intensa e correta interação entre robôs para executar uma tarefa
de certa complexidade, como transporte de carga, busca, resgate e exploração de área
(VERMA, 2019). Neste contexto, a padronização da plataforma é vital para redução dos
custos e da complexidade de manutenção. Nota-se, também, a importância do
desenvolvimento da robótica em nosso país, de forma a acompanhar as transformações dessa
tecnologia. Neste sentido, para desenvolver métodos e algoritmos para solucionar problemas
nessa área, é preciso validar o procedimento de alguma forma, seja via simulação, teoria ou
robô real. É desejável que esta validação seja feita em um robô real, sendo os resultados
potencializados se este for parte de um framework padronizado, tanto de software quanto
de hardware, evitando retrabalhos e
facilitando a aprendizagem do usuário.
de utilizar o sistema ROS 2 em conjunto com Arduino e Raspberry, além disso, deve atender a
requisitos de ser de fácil acesso, ser de uso indoor e, sobretudo, apresentar software modular e
ser viável para implementação em pesquisas com robótica cooperativa, realizadas na
Faculdade Pitágoras – Campus Divinópolis.
1.2 PROBLEMATIZAÇÃO
Na ciência é comum haver comparações entre trabalhos similares, como quando quer-
se destacar certos progressos. Um problema que pode ocorrer nesse sentido, é quando
necessita- se comparar implementações de software, como: técnicas de controle, navegação
ou cooperação, mas a comparação é inviável devido à grande discrepância entre hardwares
utilizados. Logo, a padronização entre as plataformas utilizadas pode facilitar este processo.
Dentre as plataformas robóticas existentes comercialmente, têm-se as de projeto
fechado, sendo difícil a modificação ou a substituição dos elementos de hardware e software,
onde as alterações estão geralmente limitadas às fornecidas pelo fabricante (HENRIQUE,
2019). Além disso, têm estruturas robóticas com proposta semelhante à deste trabalho, porém,
a maioria não considera a realidade financeira brasileira, Tabela 1.1. Já no que diz respeito as
propostas brasileiras, que poderiam ser uma boa alternativa, encontraram-se dificuldades nas
que se teve conhecimento, como as de: DE SOUSA (2018), HENRIQUE (2019) e REZECK
et al. (2017), geralmente envolvendo descontinuidade ou falta de informações para
reprodução.
Tendo em vista a criação do Laboratório de Robótica, Comunicação e Controle
(LARCC) na UFU campus Patos de Minas, onde uma das áreas de pesquisa será a utilização
de robôs cooperativos e a influência da rede de comunicação na conclusão de suas tarefas,
deseja- se a criação de uma plataforma padronizada para pesquisa, onde os discentes
consigam desenvolver soluções que possam ser reaproveitadas em projetos futuros. Nesta
consideração, o custo é um dos fatores mais relevantes, junto com a utilização de tecnologias
disponíveis no laboratório.
A utilização do protótipo proposto neste trabalho pode possibilitar que pesquisadores
da UFU e externos, foquem e aprofundem em temas robóticos da atualidade, como robótica
cooperativa, mapeamento de ambiente desconhecidos, Simultaneous Localization And
Mapping (SLAM) e autonomia robótica. Além disso, o uso de uma estrutura padronizada nos
projetos pode facilitar a comparação de desempenho entre as soluções desenvolvidas. Para tal,
neste projeto, será avaliada a disponibilidade e preço dos materiais a serem utilizados,
considerando o cenário brasileiro e do curso de Engenharia Eletrônica e de Telecomunicações
da UFU, campus Patos de Minas. Ainda, por se tratar de um projeto aberto (do termo em
inglês
19
open source), existe uma ampla comunidade de usuários que podem, com o tempo, contribuir
com sugestões de melhorias. Ou seja, a modularidade proposta pode possibilitar a otimização
e inserção de novas funcionalidades e estilos de estrutura, tanto a nível de software quanto de
hardware.
Outro ponto importante é a utilização do ROS 2 Foxy Fritzing como arquitetura de
software, que, devido seu recente desenvolvimento, ainda não possui muitos materiais
disponíveis, especialmente em português, o que dificulta sua ampla utilização por discentes de
graduação.
1.3 HIPÓTESE
1.4 OBJETIVOS
Figura 1.5: Alguns resultados do Google Shopping para: robot ros, em 29 de abril de 2021.
PyBullet. Tem-se, ainda, o Stanford Doggo (KAU et al., 2019; KAU, 2018) e Spot Micro
(MIKE4192, 2020), estruturas similares ao SpotMicro e aparentemente promissoras, porém,
com alto custo e complexidade. O Doggo, por exemplo, custa cerca de R$ 15810,00 (KAU et
al., 2019).
sincronizar ações a fim de movimentar um cubo o mais longe possível de sua posição inicial
(ALKILABI; NARAYAN; TUCI, 2017). O e-puck possui alguns modelos, dentre eles
destaca- se o Pi-puck, que dispõe de um Raspberry Pi zero W com suporte para ROS 2
(CYBERBOTICS, 2020).
e a interface web disponibilizada pelo projeto. No entanto, trata-se de uma estrutura de nível
básico, em termos de funcionalidade, onde, inicialmente, tem-se apenas a função de
locomoção, com a adição de sensores a estrutura adquire mais funcionalidades e
possibilidades de aplicação, mas, ainda, com pouco potencial para aplicações que demandam
maior poder de processamento (HADABOT, 2021).
instruções de montagem (MARÍN, 2018; YU et al., 2017), por exemplo. Neste contexto, as
principais contribuições deste trabalho são: fornecer material explicativo online sobre cada
etapa de desenvolvimento e construção, visto que, a documentação fornecida pelos
desenvolvedores é muitas vezes confusa, insuficiente e/ou em outra língua; considerar a
realidade brasileira para escolha dos componentes físicos do robô; e cogitar possíveis
modificações, como acréscimo de componentes de hardware e software para projetos mais
complexos. Sendo que, o escopo do trabalho tem como principal foco o
software/comunicação utilizando ROS 2.
Dessa forma, o presente trabalho irá fornecer um robô especialmente planejado para o
campus, para influenciar e auxiliar novas pesquisas. Em um segundo momento, espera-se que
esta plataforma seja continuamente desenvolvida, podendo ser usada como meio educacional,
como em matérias relacionadas a programação, controle e eletrônica.
2 REFERENCIAL TEÓRICO
2.1 ROBÓTICA
medições da posição da garra ou de algum objeto importante para o sistema, sendo esta
medição enviada ao computador para auxiliar no controle (KURDILA; BEM-TZVI, 2020).
Um robô móvel pode ser definido como um sistema mecânico capaz de se mover em
um ambiente de forma autônoma (JAULIN, 2019). A classificação de um robô móvel pode
ser realizada conforme vários fatores, um deles é quanto a anatomia, ou seja, construção
física, onde tem-se três tipos: aéreo, aquáticos e terrestres. Logo, tem-se, por exemplo, os
Unmanned Aerial Vehicle (UAVs), também conhecidos como drones, que são basicamente
aeronave remotamente pilotada. Outro exemplo são os Autonomous Underwater Vehicle
(AUVs), robôs autônomos que viajam embaixo da água, são frequentemente usados como
plataformas de pesquisa para mapear o fundo do mar ou caracterizar propriedades físicas,
químicas ou biológicas da água (COCHRAN et al., 2019). E, por último, tem-se os robôs
terrestres, que são subdivididos em outros três grupos, conforme o dispositivo utilizado para
locomoção, sendo eles: rodas, esteiras ou pernas. Destacam-se especialmente os robôs com
rodas, foco deste trabalho, que em comparação com os demais, necessitam de hardware de
menor complexidade, o que os tornam mais simples (HENRIQUE, 2019).
Uma revisão de temas relacionados à robótica móvel é realizada no trabalho de JAHN
et al. (2020), onde foram pesquisados temas importantes da área na biblioteca digital IEEE
Xplore, a fim de analisar o cenário no contexto do tema e da robótica como um todo. A
Tabela
2.1 mostra parte dos tópicos abordados, onde navegação e autonomia são os que apresentam
maior quantidade de resultados. Além disso, o trabalho de JAHN et al. (2020) apresenta
gráficos
31
temporais com a quantidade de resultado de pesquisa para cada termo, sendo que, para os
termos apresentados na Tabela 2.1, menos modularidade e computação em nuvem, há uma
tendência de crescimento mais acentuada a partir de 2016.
Fonte: Autor.
Um robô móvel também pode ser analisado quanto a sua dinâmica de controle, como
para movimentar de um ponto para outro. Para tal, pode-se considerar três etapas: primeiro o
sistema de percepção fornece informações sobre o ambiente, o próprio robô e a relação entre
eles a partir dos dados fornecidos pelos sensores. Posteriormente, essas informações são
processadas e o nível cognitivo (código) determina qual ação deve ser executada, para então,
33
2.1.2 Multi-robôs
2.2 ARDUINO
2.3 RASPBERRY
Figura 2.5: Modelos Raspberry Pi. (1) Raspberry Pi 4B. (2): Raspberry Pi Zero. (3): Raspberry Pi 3B+. (4):
Raspberry Pi Zero W.
(1) (2)
(3) (4)
Fonte: Modificado (EHRMANN; EHRMANN, 2020).
36
2.3.1 LINUX
Linux é um Sistema Operacional (SO) de código aberto criado por Linus Torvalds
(PALAKOLLU, 2021). Esse sistema é usado como base para distribuições populares, como
Debian, Android, Fedora e Ubuntu. O Android é o sistema mais utilizado em smartphones,
por isso, pode-se dizer que o Linux tem a maior base instalada de todos os sistemas
operacionais de uso geral. Ademais, o Linux é um SO com destaque em aplicações
relacionadas a servidores e sistemas embarcados. Os principais diferenciais do Linux são
estabilidade, performance e segurança, dado que o código é constantemente revisado por um
grande número de desenvolvedores (UFSC, 2000).
Além disso, o Ubuntu, SO construído a partir do núcleo Linux, tem sido a principal
plataforma para ROS. No qual, para uma dada versão de ROS tem-se uma determinada versão
do Ubuntu, como por exemplo, para ROS 2 Foxy Fitzroy utilizada neste trabalho, onde a
versão recomendada é o Ubuntu Focal Fossa (20.04) 64-bit.
37
2.4 ENCODER
Fonte: Autor.
38
som, utiliza luz infravermelha. A Figura 2.9 (a), mostra o funcionamento padrão, onde a luz
que incide sobre uma superfície lisa e brilhante é refletida e captada pelo receptor. Diferente
do sensor ultrassónico, o sensor IR pode não detectar um objeto a sua frente se este tiver uma
cor preta (Figura 2.9 (b)), isso acontece porque a onda infravermelha é absorvida pelo objeto
(MANZOOR, 2020).
Figura 2.9: Sensor IR. Incidência sobre (a) superfície lisa e brilhante. (b) superfície preta.
2.6 PONTE H
Por outro lado, as licenças strong copylefts possuem uma natureza viral, que exige que
quando um software contém parte de código strong copyleft, o software como um todo deve
ser distribuído sobre a mesma licença strong copyleft.
Em geral, uma licença pode ser alternada para uma licença mais restritiva, mas não
para uma mais permissiva. Além disso, apenas o tipo de licença permissiva pode ser
modificado para proprietário (ALAMOUDI, 2019).
Algumas das licenças mais usadas são (ALAMOUDI, 2019):
MIT: é uma licença permissiva, permite que as pessoas façam qualquer coisa com o
código com atribuições próprias e sem garantias (ESCOLHAUMALICENCA, 2022);
Licença Apache 2.0: também é uma licença permissiva, no entanto, inclui cláusulas de
rescisão e indenização de patentes (GNU, 2022).
GNU General Public License (GPL) 3.0: a principal característica desta licença é a
imposição de que quaisquer trabalhos derivados ou modificações sejam publicados
sob as mesmas licenças GPL, garantindo que o projeto nunca seja convertido em um
produto proprietário. De acordo com a Black Duck KnowledgeBase, cerca de 30% de
todos as OSS são lançadas sob diferentes versões GPL (ALAMOUDI, 2019)
GNU Affero General Public License v3 (AGPL): é semelhante à GPL v3, com um
parágrafo adicional para permitir que os usuários que interagem com o software
licenciado em uma rede recebam a fonte desse programa (GNU, 2022).
O ROS é um framework de software robótico que se tornou uma interface padrão para
robôs no mundo acadêmico. Dentre as principais características do ROS tem-se: integração de
robôs às redes; comunidade de usuários grande e ativa; e facilidade de integração com visão
computacional, ferramentas de modelagem e simulação 3D, como: OpenCV, RViz, Gazebo e
Matlab (LOPEZ-RODRIGUEZ; CUESTA, 2021). A ideia de construir ROS veio quando se
percebeu que inúmeras pessoas que pretendiam inovar em softwares robóticos gastaram cerca
de 90% do tempo reescrevendo códigos que outros já haviam escrito antes e construindo um
protótipo para teste. Ou seja, apenas 10% do tempo eram gastos efetivamente em inovação
(WYROBEK, 2017).
ROS pode ser complicado de entender quanto ao seu uso e importância, portanto,
considere uma situação hipotética onde um desenvolvedor quer trabalhar no desenvolvimento
de software de um robô, neste caso, há algumas alternativas: o desenvolvedor pode
desenvolver
44
uma lógica nova, de sua autoria, ou seguir a estrutura (framework) de um projeto já existe.
Porém, na criação se gasta muito tempo tentando implementar elementos e lógicas de
comportamento (como uma maneira de realizar a comunicação) e para o aproveitamento de
projetos existentes tem-se soluções que usam uma lógica diferente, prevista para uma
aplicação em particular, com pouca documentação e padrão complicado de entender. Ainda,
se cada um desenvolve uma estrutura para validar alguma implementação, sem haver
reaproveitamento, as pesquisas ficam ineficientes, atrasando o desenvolvimento da robótica.
Nesta perspectiva, ROS vem como proposta de solução. Ele permite que os desenvolvedores
se concentrem em sua aplicação, usando uma base existente em vez de tentarem reinventar
recursos a cada nova pesquisa. Além disso, ROS pode ser usado em qualquer robô, seja ele
um robô móvel, braço robótico, drone ou barco (ROBOTICS BACK-END, 201X). Em suma,
tem-se os seguintes benefícios ao utilizar ROS:
Todos os robôs do sistema conversando em um mesmo padrão;
Facilidade para reaproveitar código;
Possui fácil de integrar com algumas ferramentas importantes para a robótica, como o
Gazebo;
Facilidade na compreensão de projetos, já que utiliza uma lógica relativamente
simples, de assinante e editor, e bem documentada;
Facilidade de comparação entre projetos a nível de comunicação.
ROS apresenta abstração de hardware, controle de dispositivo de baixo nível,
implementação de funcionalidades comuns, troca de mensagens entre processos e
gerenciamento de pacotes. Ao comparar sistemas operacionais com ROS, pode-se dizer que o
Ubuntu, por exemplo, se difere de ROS por ser completo, com alto grau de independência
(ROBERT, 2020; YU et al., 2017).
Em termos gerais, ROS proporciona uma estrutura de comunicação de alto nível, que
fornece um padrão organizado, fácil e relativamente confiável de troca de informação baseado
em assinante, mensagem e publicador, semelhante ao MQTT. As definições para os três
elementos citados anteriormente são apresentadas a seguir (ROS, 201X):
Nós (Nodes): um executável que usa ROS para se comunicar com outros nós. Os nós
também podem fornecer ou usar um serviço;
Mensagens (Messages): tipo de dados ROS usado ao assinar ou publicar um tópico;
Tópicos (Topics): os nós podem publicar mensagens em um tópico, bem como
se inscrever em um tópico para receber mensagens.
45
Um exemplo simples da arquitetura ROS é mostrado na Figura 2.13, onde há dois nós
(node_1 e node_2) e um tópico (position), nesse sistema, o node_1 publica e o node_2 está
inscrito no tópico position, dessa forma, quando node_1 publica uma mensagem em position,
é como se o node_1 estivesse mandando uma mensagem para node_2.
LIAO (2019) apresenta um robô, Figura 2.17 (a), para SLAM. O sistema executa ROS
dentro de uma placa Raspberry Pi 3B e possui controlador Arduino Mega2560, laser Neato
XV-11 e dois motores DC com encoders integrados. A arquitetura ROS utilizada está disposta
na Figura 2.17 (b), os nós são:
move_base: esse nó assina os tópicos /tf e /scan e publica em /cmd_vel, para controle
de movimento conforme o caminho planejado;
arduino: recebe os comandos de velocidade por /cmd_vel para efetuar o controle dos
motores e publica os dados de odometria, como do encoder, em /odom;
base_frame_laser: recebe os dados de odometria através de /odom. Os dados recebidos
são transformados para, então, serem publicados no tópico /tf;
xv_11_node: os novos dados do laser são processados e publicado em /scan;
gmapping_slam: este nó assina /tf e /scan para receber dados de odometria e do laser.
Esses dados são publicados em /map e usados para corrigir a posição do robô no
mapa;
rviz: posição do robô e o mapa construído são exibidos no PC dinamicamente via
RViz, uma ferramenta gráfica do ROS.
48
Figura 2.17: Robô para prática SLAM. (a) Robô proposto. (b) Arquitetura ROS, em azul os nós e em verde os
tópicos.
Figura 2.18: Sistema para monitoramento de estufas. (a) UGV e UAV implementados. (b) Arquitetura de
software utilizada.
2.9.3 Ferramentas
ROS Visualization (RViz) é um visualizador tridimensional para ROS usado para ver
o mundo através dos olhos dos robôs (NOORI et al., 2017). Ele permite que o usuário
visualize o modelo do robô simulado, Figura 2.21 (a), reproduza as informações dos
sensores do robô, como câmeras, lasers, Kinect e outros dispositivos 3D ou 2D, na
forma de nuvens de pontos, Figura 2.21 (b), ou imagens (FAIRCHILD; HARMAN,
2016).
51
A biblioteca cliente ROS para C++ (ROS Client Library for C++ - RCLCPP) e a
biblioteca cliente ROS para Python (ROS Client Library for the Python - RCLPY) são
bibliotecas cliente suportadas oficialmente, elas permitem aos usuários implementar seu
código ROS a partir de um núcleo comum, denominado biblioteca cliente (ROS Client
Library - RCL) (ROS2, 2022a).
Para aqueles que necessitam implementar projetos em alguma biblioteca cliente é
recomendável um estudo aprofundado, neste caso, os exemplos de ROS2 (2022a),
denominados “Writing a simple publisher and subscriber (C++)” e “Writing a simple
publisher and subscriber (Python)”, fornecem um bom auxilio inicial. Esses exemplos,
definem uma arquitetura ROS 2 simples, com um editor e assinante, escritos a partir de
RCLCPP ou RCLPY, respectivamente. Além disso, é altamente aconselhável o estudo da
documentação oficial (RCLCPP, 2022; RCLPY, 2022) junto com os exemplos.
2.9.5.1 Micro-Ros
2.9.5.2 Ros-serial
2.9.5.3 Ros2arduino
Ros2arduino é uma biblioteca similar a micro-ROS, ela foi criada para que placas de
microcontroladores possuíssem comunicação do padrão ROS2 (Dashing e Crystal) via serial
ou protocolo de datagramas do usuário (User Datagram Protocol – UDP). Para isso, mais
uma
55
2.9.6 Ros1_bridge
2.10 PROGRAMAÇÃO
Os computadores são utilizados para as mais diversas tarefas, por causa disso, há uma
diversidade de linguagens de programação com objetivos diferentes (SEBESTA, 2018). Para
este trabalho, em especial, destacam-se as linguagens C e C++, devido à utilização em
sistemas embarcados (VIARHEICHYK, 2020), como pela Arduino IDE, e por ROS 2, através
de RCLCPP. Onde C++ é uma linguagem baseada em C, originada na Bell Labs, sendo uma
de suas características marcantes a Programação Orientada a Objetos (POO) (SEBESTA,
2018).
Em C e C++ é comum a utilização de arquivos de cabeçalho (por padrão .h ou .hpp),
são arquivos que contém as estruturas de dados, como as declarações de funções, tipos de
dados e macros. Esses arquivos são, então, importados, via diretiva #include, em arquivos
56
.cpp, que
57
2016). Quando uma conexão SSH é estabelecida, uma sessão shell é iniciada, possibilitando
que o cliente digite comandos que serão executados no servidor.
Fonte: Autor.
O Virtual Network Computing (VNC) é outra forma de acesso remoto, só que com
interface gráfica. A Figura 2.28 mostra um exemplo, onde o cliente VNC visualiza a tela do
servidor VNC. Sendo assim, eventos de teclado e mouse, por exemplo, são transmitidos do
cliente para o servidor e, posteriormente, as atualizações gráficas ocorridas no servidor são
enviadas para o cliente, que visualiza quase que em tempo real as mudanças. Caso necessário,
vários clientes podem se conectar a um servidor VNC ao mesmo tempo (RICHARDSON et
al., 1998).
59
3 MATERIAIS E MÉTODOS
Figura 3.1: Componentes Scicobot. (a) Raspberry Pi 3B+. (b) HC-SR04. (c) Step Down AMS1117. (d) Encoder.
(e) Driver de motor Ponte H dupla. (f) Cabo Ttl Rs232. (g) Conversor de Nível Lógico.
Fonte: Google.
61
3.1 MATERIAIS
Jumpers ~15,00 -
Conversor de Nível Lógico 16,99 1
Bidirecional I2C - 4 canais
Driver de motor Ponte H dupla 9,80 1
Step Down 12V / 5V / 3.3V DC 5,00 2
AMS1117
Bateria Lipo 1500mah 7.4v 174,90 1
Velcro (3 m) 25,00 -
Conversor Usb Serial Cabo Ttl 22,90 1
Rs232
Cartão SD 32 GB 27,70 1
Adaptador cartão SD para USB 11,75 1
Total: R$ 1408,64
Fonte: Mercadolivre e Aliexpress, 21/01/2022.
3.2 METODOLOGIA
As estruturas avaliadas na etapa 1 foram utilizadas como referência para definição dos
componentes utilizados. Dessa forma, a partir do panorama interpretado das referências e as
modificações pendentes da etapa 2, foi realizado o levantamento de componentes a serem
empregados no Scicobot. Para isso, considerou-se, ainda, os componentes disponíveis no
laboratório da UFU, campus patos de Minas.
Cada componente escolhido foi testado a partir de exemplos e/ou implementações
próprias, procurando interpretar o funcionamento e possíveis implementações de abstração de
funcionalidades.
4) Software Arduino
Nesse ponto, tinha-se uma boa perspectiva da implementação de cada parte do robô,
de forma separada, e a comunicação já havia sido selecionada e testada. Foi, então, que os
conceitos fragmentados foram encapsulados em várias bibliotecas Arduino. Isso possibilitou
que o Arduino do robô realizasse a leitura dos sensores, enviasse comandos de movimento
para o motor e iniciasse a comunicação serial com o Raspberry.
5) Software Raspberry
Com a aplicação Arduino elaborada, partiu-se para o Raspberry, onde pacotes ROS 2
C++ foram criados para enviar, receber e manipular as informações ROS 2. A partir desse
63
estágio, o Scicobot estava funcional, podia-se utilizar os exemplos montados para o Arduino e
o Raspberry a fim de execução algumas funcionalidades, como se locomover e manipular
dados dos sensores no Raspberry.
4 DESENVOLVIMENTO
Inicialmente, o projeto possuía esquema como o apresentado pela Figura 4.1. Onde os
robôs possuem um Raspberry como componente de alto nível do sistema e um Arduino Nano
como controlador e leitor de sensores. Nesta arquitetura, o Raspberry é o hardware
responsável pela comunicação entre os dispositivos da rede. Para isso, o Pi possui um espaço
de trabalho ROS 2 Foxy e Wi-Fi, que possibilitam a interação entre as estruturas que
compõem o sistema.
Fonte: Autor.
O desenvolvimento do projeto seguiu a metodologia definida no capítulo 3. Sendo nas
subseções seguintes apresentados os detalhes para cada etapa.
4.1.1 Nanosaur
Fonte: Autor.
4.1.2 Hadabot
a partir de ROS. Já RangeSensorSet, é uma classe criada para definir os procedimentos para o
sensor de distância, como Encoder e EncoderSet fazem. Ademais, a classe Controller é usada
como uma ponte das outras classes com Hadabot. Nela é implementada parte da dinâmica de
trabalho geral, como pode ser verificado pela definição da função run_once(self), onde os
valores dos sensores são acessados e publicados. Por fim, tem-se a classe Hadabot, que abstrai
ainda mais as implementações das classes anteriores, iniciando o objeto Ros, que é passado
como parâmetro para as outras classes, e um objeto Controller, além de atribuir os inscritos
que são utilizados para receber comandos de movimento.
Fonte: Autor.
4.1.3 Linorobot
disso, esse projeto também disponibiliza pacotes para um possível computador host, com lauchs
para a simulação 3D no aplicativo Gazebo.
Para o microcontrolador, JIMENO (2022b) descreve a instalação de PlatformIO,
plataforma utilizada para desenvolver, configurar e carregar o firmware na placa. Como
Linorobot2 suporta versões diferentes de cada componentes, as bibliotecas são montadas de
forma generalista, a partir do uso de várias diretivas de pré-processador para compilação
condicional e arquivos para configuração de parâmetros. Especificamente, o projeto possui
bibliotecas para o encoder, IMU, cinemática, motor, odometria e PID. No arquivo principal
do projeto, firmware.ino, as bibliotecas são carregadas e utilizadas para executar o pipeline de
trabalho, iniciado um nó ROS, os editores para o IMU e odometria, e um inscrito para receber
comandos de movimento. Ainda, em (JIMENO, 2022b), são apresentados os diagramas de
conexões elétrica para montagem do robô.
4.1.4 Contribuições
IR, para medir distância de obstáculos, mesma função geralmente atribuída ao IR (consulte
seção 2.5). Além disso, a preferência quanto a esses sensores se deve, principalmente, à
disposição deles no laboratório e ao conhecimento prévio sobre eles.
Com os componentes do sistema definidos, testes foram realizados com cada um. Sendo
que, parte da lógica implementada foi facilmente encontrada no Google, em alguns casos em
sites de vendedores.
4.4 MONTAGEM
A Figura 4.5 mostra a estrutura adquirida, ele vem com um chassi, que dispõe de dois
discos de acrílico; duas rodas laterais; e dois rodízios giratórios, frontal e traseiro. Onde mais
discos podem ser obtidos para a adição de mais níveis na estrutura. Para o Scicobot deste
trabalho três níveis foram utilizados, sendo que, não foi encontrado à disposição no mercado o
disco de acrílico sozinho, foi necessário a compra de outra estrutura completa como forma de
adquirir o disco.
Fonte: Autor.
No primeiro nível do chassi encontram-se os encoders, Figura 4.6 (a). Para isso,
colocou-se primeiro os discos dos encoders na parte de baixo do chassi, Figura 4.6 (b),
conectados aos eixos dos motores. Já em cima, os sensores foram facilmente posicionados, já
que o disco disponibiliza duas entradas para encaixe dos mesmos.
72
Figura 4.6: Encoder do Scicobot. (a) vista superior. (b) vista de baixo.
Fonte: Autor.
Colocando mais um disco, progrediu-se para o segundo nível. Nele foram alocados a
ponte H, o Arduino Due, conversor de nível lógico e os conversores de tensão 12V / 5V /
3.3V, Figura 4.7 (a) e (b). Sendo o conversor de nível lógico utilizado para converter a tensão
de saída e entrada de alguns componentes para níveis adequados, já que o Due opera em 3.3 V
e esses componentes em 5 V. Para organizar os fios utilizou-se de velcro, apesar de não ser
necessário é altamente recomendável essa prática, já que auxilia a visualizar os componentes
e a fazer alterações nas conexões sem grandes problemas.
Figura 4.7: Nível dois. (a) vista traseira. (b) vista lateral.
Fonte: Autor.
Ainda no segundo nível, destaca-se o componente conectado na porta digital 13 do
Due, utilizado para debug. Trata-se de um LED e resistor 330 ohms, Figura 4.8. Para
construção desse componente parte dos conectores do LED e do resistor foram cortadas e,
depois, soldou- se os dois para ficar mais compacto.
73
Fonte: Autor.
Por outro lado, o ultrassônico foi posicionado entre os níveis um e dois, utilizando-se
de uma abertura no chassi para encaixe dos jumpers, como destacado na Figura 4.9, sendo
utilizada cola quente para fixação do mesmo no disco de acrílico.
Fonte: Autor.
Assim como para organização dos fios, foi utilizado velcro para fixação dos
componentes no chassi, como mostra a Figura 4.10 para a ponte H de Scicobot. Isso se tornou
uma solução muito interessante, já que é barata, fácil de colocar e satisfaz as necessidades.
Fonte: Autor.
Por fim, foi adicionado o último nível, que inclui em seu espaço superior e inferior um
Raspberry Pi 3B+ e bateria. Dessa forma, tem-se a plataforma robótica Scicobot montada,
74
Figura 4.11. Ademais, destaca-se que o fio azul que liga o Arduino e o Raspberry se estende
de forma desagradável, mas não crítica, necessitando atenção do operador para não atrapalhar
durante locomoção.
Fonte: Autor.
O esquema de ligação entre os componentes do robô é apresentado na Figura 4.12,
onde os fios cinzas que conectam a bateria e o Arduino ao Raspberry são representações
simbólicas. Destaca-se que no esquema os dois conversores Step Down de 12V para 5 V e 3.3
V. Esse componente é utilizado para converter a tensão da fonte para valores de 5 V e 3.3 V,
já que componentes do circuito trabalham nessas tensões. Ainda, após alimentar os
componentes, tinha-se o problema de alguns componentes operando em 5 V e o Due em 3.3
V, logo, a ligação desses componentes em portas digitais do Due poderia danificar a placa ou
reduzir sua vida útil, sendo assim, um conversor de nível lógico foi usado para converter 5 V
em 3.3 V e 3.3 V em 5 V.
Fonte: Autor.
75
um Scicobot 1, desenvolvido neste trabalho, e o robô à direita uma nova versão, que possui
um LiDAR, tecnologia a laser comumente utilizada para mapear ambientes. Logo, tem-se
certas limitações quanto à expansão física, já que a adição de muitos níveis pode
comprometer, por exemplo, a estabilidade e a capacidade de locomoção, visto que o balançar
da estrutura pode derrubar o robô e o peso exacerbado pode não ser suportado pelos motores.
Fonte: Autor.
Arduino core: local onde as funções básicas incorporados pela Arduino IDE estão
definidas, como pinMode() e analogRead();
serial_debug: geralmente usa-se o monitor serial como forma de depuração no
Arduino. Neste aspecto, a serial_debug é uma biblioteca que fornece macros e funções
para auxiliar na depuração serial;
led_debug: é inspirada em exemplos disponibilizados pela micro-ROS. Tem como
objetivo fornecer funções e macros para debug utilizando um LED, que pisca quando
um erro crítico acontece. A princípio, as implementações realizadas constam apenas
com a lógica de depuração para micro_ros_arduino;
differential_drive: biblioteca que implementa a lógica de controle diferencial;
77
Fonte: Autor.
Com o hardware encapsulado, partiu-se para a modularização do middleware, nesse
caso, encapsulado pela micro_ros_arduino. Após análise dos exemplos disponibilizados por
essa biblioteca, como (MICRO-ROS, 2021a) e (MICRO-ROS, 2021b), percebeu-se um certo
padrão no fluxo de implementação. A Figura 4.15 exemplifica uma típica implementação de
micro_ros_arduino, nela são destacados cinco pontos cruciais, tem-se: 1 - as entidades ROS
são declaradas sem suas respectivas atribuição; 2 - as funções callbacks são definidas; 3 -
transporte, nó, allocator e o support são definidos, sendo as duas últimas entidades utilizadas
para criar e manipular nós, inscritores e editores; 4 - inscritores, editores e timers são
definidos conforme estrutura ROS desejada, além disso, o executor também é definidos e o(s)
timer(s) e/ou inscritor(es) são adicionados a ele; 5 - um spin é definido para o executor de
antes.
78
Fonte: Autor.
Dessa forma, decidiu-se estabelecer a arquitetura de software conforme mostrado na
Figura 4.16. Em suma, o conteúdo do retângulo é um encapsulamento da micro_ros_arduino
para as aplicações implementadas, ou seja, para comunicação dos sensores escolhidos e o
controle de movimento do robô via teclado. As bibliotecas criadas nesta etapa são descritas a
seguir, onde a primeira implementa o ponto 1 e 3 e as demais 1 e 4 da Figura 4.15. Já os
pontos 2 e 5 são estabelecidos no código principal, onde fica o main. Além disso, as
bibliotecas fornecem, funções get que retornam as entidades declaradas para uso posterior.
Logo, tem-se:
ros_init: responsável pela declaração e atribuição de allocator, support e nó. Para isso,
considerou-se que a estrutura teria apenas um nó, denominado scicobot_arduino;
ros_motor_control: incumbido da declaração e atribuição de um inscritor ROS, usado
para receber os comandos diferencias que são utilizados no controle do robô;
ros_ultrasonic: responsável por declarar e definir um editor ROS, útil para publicar as
medidas realizadas pelo sensor ultrassônico;
ros_encoder: utilizado para declarar e definir dois editores ROS, esses editores
publicam a quantidade de pulsos contados por cada sensor encoder;
ros_move_on: declara e define um inscrito ROS, empregado para definir a locomoção
do robô.
79
Fonte: Autor.
Com a base de bibliotecas do lado do Arduino finalizadas, desenvolveu-se um
repositório GitHub (CRUZ, 2022d) que contém exemplos de implementação com os sensores
e atuadores. Esses exemplos são, em suma, variações mescladas das bibliotecas criadas para
micro-ROS e hardware.
A Figura 4.17 apresenta os diagramas dos exemplos criados, onde as setas indicam a
dependência. Por exemplo, na biblioteca motor_drive da Figura 4.17 (a) tem-se o #include
para a biblioteca ros_init. Para facilitar o entendimento as setas foram destacadas, sendo as
vermelhas referentes ao middleware (Figura 4.16) e as laranjas ao hardware (Figura 4.14).
Em suma, os exemplos são para: movimentar o motor via teclado, Figura 4.17 (a);
movimentar o robô via teclado e realizar publicações dos dados dos sensores encoders, Figura
4.17 (b); publicar as medidas realizadas pelo sensor ultrassônico, Figura 4.17 (c); movimentar
o robô a partir de comandos do teclado enquanto publica dados dos sensores ultrassônico e
encoders, Figura 4.17 (d). Para a averiguação destes exemplos é necessário executar
comandos ROS no Raspberry, como o pacote que publica os comandos do teclado, pode-se
verificar CRUZ (2022d) para mais detalhes.
80
Figura 4.17: Exemplos Arduino. (a) moveTwist. (b) encoder_moveTwist. (c) ultrasonic. (d)
moveTwist_encoder_ultrasonic.
Fonte: Autor.
4.6 SOFTWARE RASPBERRY
No Raspberry do robô é possível utilizar ROS 2 via linha de comando, a partir de uma
conexão SSH com o computador. Nesta situação, é comum o uso de comandos como: ros2
run, para executar algum pacote e ros2 topic echo, para visualizar os dados de um
determinado tópico. No entanto, esta não é uma forma otimizada de se trabalhar, é preferível
que haja alguma aplicação que rode automaticamente, com necessidade mínima de
intervenção. Seguindo este viés, montaram-se pacotes ROS 2 (CRUZ, 2022a) que executam
determinadas dinâmicas de trabalho, como acessar dados de tópicos de sensores, manipulá-los
e publicar o resultado. Além disso, utiliza-se de um projeto externo para envio de comandos
diferenciais via teclado (ROS- INDEX, 2021).
Fonte: Autor.
5 RESULTADOS E DISCUSSÕES
Nesta etapa, com a plataforma física montada, foram executados testes procurando
validar as implementações desenvolvidas para os componentes do Scicobot, sendo eles:
Controle do robô por teclado: carregou-se o exemplo moveTwist de scicobot_arduino
(CRUZ, 2022d) no Arduino e o pacote teleop_twist_keyboard (ROS-INDEX, 2021)
no Raspberry. Isto fez com que no Arduino um inscrito recebesse os comandos
publicados por um editor do Raspberry, fazendo com que os motores se movessem
conforme o conjunto de parâmetros recebidos no Arduino;
Encoder: para testar o encoder, utilizou-se do exemplo encoder_moveTwist, de
scicobot_arduino (CRUZ, 2022d); do pacote scicobot_encoder, de scicobot_rasp
(CRUZ, 2022a); e do pacote teleop_twist_keyboard (ROS-INDEX, 2021). Neste teste
o robô foi movimentado via comando do teclado enquanto as medições do encoder
eram realizadas e publicadas pelo Due. No Raspberry um inscrito acessava essas
informações e as escrevia no Terminal;
Ultrassônico: utilizou o exemplo ultrasonic de scicobot_arduino (CRUZ, 2022d) no
Due e o pacote scicobot_ultrasonic (CRUZ, 2022a) no Raspberry. Essas execuções
fizeram com que fossem criados um editor ROS no Due, que publicava as medições de
distância, e um inscrito no Raspberry, utilizado para obtenção dos dados do sensor,
sendo as medições recebidas mostradas no Terminal do Raspberry.
Destaca-se a dinâmica necessária para aferição dos testes, onde precisou-se carregar
um projeto no Due e utilizar um dos pacotes ROS 2 no Raspberry, sendo essa prática
essencial para qualquer tarefa que se pretende realizar utilizando as duas plataformas em
conjunto com a estrutura de software montada. Logo, tem-se que os testes realizados com as
implementações elaboradas (CRUZ, 2022a, 2022d) foram bem sucedidos e fornecem bons
exemplos de implementação.
Espera-se que para novas implementações de software os usuários usem a base
estabelecida, implementando novas funcionalidades. A título de exemplo, digamos que se
pretende adicionar um IMU no robô Scicobot 1, para isso, poder-se-ia adicionar uma
biblioteca
83
para leitura dos dados do IMU e uma ros_imu para implementação ROS 2 no Arduino, ou
seja, ter-se-ia mais uma biblioteca na estrutura mostrada pela Figura 4.14 e Figura 4.16. Já no
Raspberry, seria necessário montar um projeto que se inscrevesse no tópico criado, para que
fosse possível acessar as informações publicadas. Sendo que o processo descrito foi destacado
em vermelho na Figura 5.1.
Fonte: Autor
A cooperação entre robôs pode ser simples, como compartilhar dados de sensores, ou
complexo, como planejamento e atuação conjunta de movimentos (SIEFKE, 2020). Sendo
que, qualquer aplicação cooperativa exige a comunicação entre os dispositivos do sistema.
Nesta perspectiva, simulou-se uma aplicação cooperativa simples, onde tinha-se um Scicobot,
um Raspberry e um computador. O Scicobot utilizado é indicado na Figura 5.2 (b), sendo ele
responsável por envia os valores de leitura do sensor encoder para o Raspberry. Já o
Raspberry, Figura 5.2 (a), envia informações de sua temperatura para o Scicobot, formando
assim, uma comunicação bidirecional. Além disso, o teste contou com o auxílio de um
computador, utilizado apenas como forma de acesso SSH para execução e visualização dos
comandos no Raspberry e no Scicobot.
84
Figura 5.2: Estrutura utilizadas na simulação de sistema multi-robôs. (a) Raspberry. (b) Scicobot.
Fonte: Autor.
A Figura 5.3 mostra a arquitetura de nós implementada no teste multi-robôs, onde os
dados do encoder direito do Scicobot são acessados pelo Raspberry a partir de um inscrito em
/rasp_encoder_right, enquanto informações de temperatura do Raspberry são publicadas no
tópico /rasp_temp.
Fonte: Autor.
Usou-se de projetos do Scicobot e projetos externos para efetuar o teste multi-robôs.
Sendo para isso carregado no Arduino o exemplo denominado encoder_moveTwist,
responsável por publicar os dados do encoder e fornecer um inscrito para recebimento de
comandos de movimento. Ainda no Scicobot, mas agora no Raspberry, executou-se os
seguintes pacotes:
micro_ros_agent: pacote externo que executa um agente micro-ROS para a
comunicação serial entre Due e Raspberry. A Figura 5.4 (a) apresenta a tela dessa
parte, onde foram destacadas algumas trocas de mensagem que ocorrem entre o
servidor (Raspberry) e o cliente (Arduino);
85
Figura 5.4: Saída dos Terminais para os pacotes. (a) micro_ros_agent. (b) teleop_twist_keyboard. (c)
test_cooperation_scicobot. (d) test_cooperation_rasp.
87
Fonte: Autor.
5.3 DISCUSSÕES
6 CONSIDERAÇÕES FINAIS
Este trabalho teve como tema o desenvolvimento de uma plataforma robótica de baixo
custo e modular, principalmente para uso em pesquisas na UFU, campus Patos de Minas. Ao
longo do trabalho foram descritos os principais conceitos teóricos, capítulo 2, onde o
conteúdo relacionado a ROS foi introduzido. Posteriormente, no capítulo 3, os materiais para
montagem do robô e a metodologia usada foram definidos, sendo os procedimentos
metodológico descritos no capítulo 4, Desenvolvimento. Por fim, os resultados foram
expostos e discutidos no capítulo 5, onde conclui-se que a proposta de implementação de um
robô móvel, de baixo custo, modular, amplamente documentado e expansivo, para uso em
pesquisas relacionadas a robótica cooperativa, foi atingido.
Para o desenvolvimento do Scicobot aproveitou-se de conceitos prévios e informações
extraídas de outras estruturas existentes para definição do software e dos componentes. Então,
montou-se a plataforma, criando exemplos de implementações a partir da estrutura de
software imaginada. Por fim, validou-se o software e a comunicação entre dispositivos através
de experimentos. Com a plataforma pronta e testada, comparou-se Scicobot com estruturas
robóticas existentes, onde Scicobot se destaca ao ser considerada a aplicação na UFU, já que
possibilita que alunos dessa instituição utilizem de conhecimentos prévios e componentes a
disposição no laboratório, potencializando o baixo custo e facilitando o aprendizado.
Como uma plataforma nova, Scicobot tem muito o que modificar, por isso, como
trabalhos futuros, sugere-se:
Otimizar o uso da bateria: avaliar se ao retirar os LEDs das placas o robô tem
economia significativa no uso de energia. Além disso, averiguar a possibilidade de
estabelecer um modo dormir, onde o robô opera com poucos recursos;
Implementar controle PID: o curso de Engenharia Eletrônica e de Telecomunicações
possui uma disciplina denominada Sistemas Realimentados, nesta disciplina aprende-
se o controle realimentado PID, sendo assim, pode ser interessante implementar um
controlador PID para o robô, possibilitando a utilização de Scicobot nas aulas e,
posteriormente, caso seja do interesse do aluno, em uma pesquisa de iniciação
cientifica ou em um trabalho de conclusão de curso;
Avaliar a utilização de um Sistema Operacional em Tempo Real, essa categoria de
sistema fornece maior confiabilidade na execução de tarefas em prazos compatíveis
com a ocorrência de eventos externos, um exemplo atraente nesse aspecto é Zephyr
(FINOCCHIARO, 2020);
91
Docker: Nanosaur e micro-ROS utilizam Docker para construir seus projetos, esta
dinâmica parece possuir menor potencial de erro, isto posto, seria importante a
avaliação e, talvez, implementação dessa dinâmica;
Simulação 3D: a simulação é uma ferramenta prazerosa e importante no meio
robótico, por isso, a criação de pacotes para simular Scicobot em aplicativos como
CoppeliaSim e Gazebo é atrativo para novos projetistas;
Avaliar a implementação de outras versões: apesar de Scicobot 1 ser um robô terrestre
com rodas, é possível adequar as ferramentas utilizadas, principalmente ROS 2 e
micro- ROS, para outras estruturas, como um robô esteira e um drone.
92
REFERÊNCIAS
ABUKHALIL, T. et al. Power Optimization in Mobile Robots Using a Real-Time Heuristic. Journal of
Robotics, 2020. Disponível em: https://downloads.hindawi.com/journals/jr/2020/5972398.pdf. Acesso em: 11 de
abril de 2021.
ACORNEJO, Alex. GitHub. Kilobot. 2013. Disponível em: https://github.com/acornejo/kilolib. Acesso em: 11
de abril de 2021.
ACS LABORATORY. Github Pages. Pheeno Construction Guide. 2017. Disponível em:
https://acslaboratory.github.io/pheeno-v1/pheeno_construction_content/. Acesso em: 12 de maio de 2021.
ACS LABORATORY. Github. Pheeno ROS. 2017. Disponível em: https://github.com/ACSLab
oratory/pheeno_ros. Acesso em: 12 de maio de 2021.
ALAMOUDI, Emad et al. Open Source and Open Data Licenses in the Smart Infrastructure Era: Review and
License Selection Frameworks. 2019. (eds) Smart Infrastructure and Applications. EAI/Springer Innovations in
Communication and Computing. Springer, Cham. https://doi.org/10.1007/978-3-030-13705-2_22
ALATISE, Mary B.; HANCKE, Gerhard P. A Review on Challenges of Autonomous Mobile Robot and Sensor
Fusion Methods. IEEE Access, 2020. Disponível em: https://ieeexplore.ieee.org/document/9007654. Acesso em:
12 de maio de 2021.
ALIEXPRESS. Chegada nova programável ros robô automático navegação slam carro Turtlebot3-Burger pi3
peças a granel. 2021. Disponível em: https://pt.aliexpress.com/item/1005001608418400.html?spm=a2g0o.pr
oductlist.0.0.5da03344owtBYk&algo_pvid=b37f5b34-d759-4,9cb-be32-488c2ce6fa20&algo_expid=b37f5b34-
d759-49cb-be32-488c2ce6fa20-0&btsid=0bb0623d16188804690946353eba85&ws_ab_test=searchweb0_0
,searchweb201602_,searchweb201603_. Acesso em 19 de abril de 2021.
ALKILABI, Muhanad H. Mohammed; NARAYAN, Aparajit; TUCI, Elio. Cooperative object transport with a
swarm of e-puck robots: robustness and scalability of evolved collective strategies. Swarm Intell, 2017
ALMEIDA, Rodrigo. Ponte H com bootstrap para acionamento de motores DC. 2014. Embarcados. Disponível
em: https://www.embarcados.com.br/ponte-h-bootstrap-acionamento-motores-dc/. Acesso em 23 de janeiro de
2021.
ALONSO-MORA, Javier. YouTube. Multi-robot formation control and object transport. 2017. Disponível em:
https://www.youtube.com/watch?v=sDNqdEPA7pE&ab_channel=JavierAlonso-Mora. Acesso em: 12 de maio de
2021.
ALVARO, Diego; KOZIOL, Scott. Special Project: Husky Robot Navigation with ROS. 2020. Baylor
University. Disponível em: https://repositorio.unican.es/xmlui/bitstream/handle/10902/19030/426030
.pdf?sequence=1&isAllowed=y. Baylor University. Acesso em: 11 de abril de 2021.
AMSTERS, Robin; SLAETS, Peter. Turtlebot 3 as a Robotics Education Platform. Robotics in Education, 2019.
Advances in Intelligent Systems and Computing, v. 1023. Springer, Cham.
ANOOP, A. S.; KANAKASABAPATHY P.. Review on swarm robotics platforms. 2017. International Conference
on Technological Advancements in Power and Energy, 2017, pp. 1-6. doi:
10.1109/TAPENERGY.2017.8397275.
ARDUINO. About. 2018. Disponível em: https://www.arduino.cc/en/Guide/Introduction. Acesso em: 11 de abril
de 2021.
ARDUINO. Arduino Products. 2021. Disponível em: https://www.arduino.cc/en/Main/Products. Acesso em: 11
de abril de 2021.
ARDUINO. Arduino Style Guide. 2022c. Disponível em:
https://docs.arduino.cc/hacking/software/ArduinoStyleGuide. Acesso em: 26 de janeiro de 2022.
ARDUINO. Placas Arduino. 2022a. Disponível em: https://store-usa.arduino.cc/collections/core-family. Acesso
em: 22 de janeiro de 2022.
ARDUINO. Writing a Library for Arduino. 2022b. Disponível em:
https://www.arduino.cc/en/Hacking/libraryTutorial. Acesso em: 26 de janeiro de 2022.
93
ARVIN, F. et al. Mona: an Affordable Open-Source Mobile Robot for Education and Research. Journal of
Intelligent & Robotic Systems, 2019. Disponível em: https://link.springer.com/article/10.1007/s10846-018-
0866-9. Acesso em: 11 de abril de 2021.
ARVIN, Farsahd; LENNOX, Barry; WATSON, Simon. ROS Integration for Miniature Mobile Robots. 2018.
Conference: 19th Towards Autonomous Robotic Systems (TAROS) Conference. Disponível em:
https://www.researchgate.net/publication/325499148_ROS_Integration_for_Miniature_Mobile_Robots. Acesso
em: 23 de janeiro de 2022.
AUFRANC, Jean-Luc. Know the Differences between Raspberry Pi, Arduino, and ESP8266/ESP32. 2020. CSN.
Disponível em: https://www.cnx-software.com/2020/03/24/know-the-differences-between-raspberry-pi-arduino-
and-esp8266-esp32/. Acesso em: 11 de abril de 2021.
BENTO, Antonio Carlos. Internet of Things: An Experiment with Residential Automation for Robotics Classes.
International Research Journal of Management, IT & Social Sciences, 2018. Disponível em:
https://core.ac.uk/download/pdf/230598106.pdf. Acesso em: 11 de abril de 2021.
BERNAL, Manuel; CIVERA, Javier. LoCoQuad: A Low-Cost Arachnoid Quadruped Robot for Research and
Education. ArXiv, 2020. Disponível em: https://arxiv.org/abs/2003.09025. Acesso em: 9 de maio de 2021.
BLACKROAD, Tom. GitHub. LoCoQuad: A Low-Cost Arachnoid Quadruped Robot for Research and
Education. 2019. Disponível em: https://github.com/TomBlackroad/LoCoQuad. Acesso em: 11 de abril de 2021.
BONGHI, Raffaello. Bill of Materials. 2022c. Disponível em: https://nanosaur.ai/bill-of-materials/. Acesso
em:02 de fevereiro de 2022.
BONGHI, Raffaello. Nanosaur. 2022a. Disponível em: https://github.com/rnanosaur. Acesso em: 22 de janeiro
de 2022.
BONGHI, Raffaello. ROS2 packages to drive nanosaur. 2022b. Disponível em:
https://github.com/rnanosaur/nanosaur_robot. Acesso em: 30 de janeiro de 2022.
BOSTON DYNAMICS. GitHub. Spot SDK. 2020. Disponível em: https://github.com/boston-dynamics/spot-sdk.
Acesso em: 11 de abril de 2021.
BOSTON DYNAMICS. Spot. 2021. Disponível em: https://www.bostondynamics.com/spot. Acesso em: 11 de
abril de 2021.
CARRILLO, M. et al. A Bio-inspired Approach for Collaborative Exploration with Mobile Battery Recharging
in Swarm Robotics. Bioinspired Optimization Methods and Their Applications, 2018.
CASAS BAHIA. Jetson Nano 2gb Developer Kit Atualizado 2021. Disponível em:
https://www.casasbahia.com.br/jetson-nano-2gb-developer-kit-atualizado-2021- 1520218055/p/1520218055?
utm_medium=Cpc&utm_source=GP_PLA&IdSku=1520218055&idLojista=120336
&utm_campaign=3P_ACES_SSC&gclid=Cj0KCQiAraSPBhDuARIsAM3Js4pPrujTcIdNvo2JVv8Ay_VyEHN
CCfct681s5LydlOxXOoKDUMidZgMaAiKcEALw_wcB. Acesso em: 22 de janeiro de 2021.
CHEN, Pengpeng et al. SpotMicro. 2020. Disponível em: https://spotmicroai.readthedocs.io/en/latest/. Acesso em:
12 de maio de 2021.
CHENG, Xiufeng et al. Open collaboration between universities and enterprises: a case study on GitHub.
Internet Research, 2020. ISSN: 1066-2243.
CHO, HanCheol. GitHub: ros2arduino. This library helps the Arduino board communicate with the ROS2 using
XRCE-DDS. 2020. Disponível em: https://github.com/ROBOTIS-GIT/ros2arduino. Acesso em: 23 de janeiro de
2021.
CICOLANI, Jeff. Beginning Robotics with Raspberry Pi and Arduino. 2018. Apress, Berkeley, CA. doi:
https://doi.org/10.1007/978-1-4842-3462-4. ISBN: 978-1-4842-3462-4.
CLEARPATH ROBOTICS. Intro To ROS. 2015. Disponível em: http://www.clearpathrobotics.com
/assets/guides/kinetic/ros/Intro%20to%20the%20Robot%20Operating%20System.html. Acesso em: 13 de maio
2021.
COCHRAN, J. K., BOKUNIEWICZ, H., YAGER, P. Encyclopedia of Ocean Sciences. Academic Press, 2019,
ed. 3ª. ISBN: 9780128130827
94
GARZÓN, Mario et al. Using ROS in Multi-robot Systems: Experiences and Lessons Learned from Real-World
Field Tests. In: Koubaa A. (eds) Robot Operating System (ROS), 2017. Studies in Computational Intelligence,
vol 707. Springer, Cham.
GAZEBO. Tutorial: ROS integration overview. 2014. Disponível em:
http://gazebosim.org/tutorials?tut=ros_overview. Acesso em: 13 de maio 2021.
GITHUB. About GitHub Pages.2021. Disponível em: https://docs.github.com/en/pages/getting-started-with-
github-pages/about-github-pages. Acesso em: 11 de abril de 2021.
GNU. Software Licenses. 2022. Disponível em: https://www.gnu.org/licenses/license-list.html. Acesso em: 22 de
janeiro de 2022.
GUSE, Rosana. Filipeflop. O que é Raspberry Pi?. 2020. Disponível em: https://www.filipeflop.com/blog/o-que-
e-raspberry-pi/. Acesso em: 11 de abril de 2021.
HADABOT. hadabot_main. 2022. Disponível em:
https://github.com/hadabot/hadabot_main/tree/master/firmware/uhadabot. Acesso em: 30 de janeiro de 2022.
HADABOT. Learn ROS2 robotics by building a Hadabot robot. 2021. Disponível em:
https://www.hadabot.com/. Acesso em: 22 de janeiro de 2022.
HADABOT. Purchase a Hadabot ROS 2 Robot Kit. 2022. Disponível em:
https://www.hadabot.com/purchase.html. Acesso em: 02 de fevereiro de 2022.
HENRIQUE, Luiz. Projeto e concepção de uma plataforma robótica móvel integrada com o ROS. 2019.
UFSC, Blumenau.
HU, He. An educational Arduino robot for visual Deep Learning experiments. International Journal of
Intelligent Robotics and Applications, 2019.
IEEE. About. Disponível em: https://www.ieee.org/about/at-a-glance.html. 2021. Acesso em: 11 de abril de 2021.
INTEL ISL. GitHub. OpenBot. 2020. Disponível em: https://github.com/intel-isl/OpenBot. Acesso em: 11 de
abril de 2021.
JAHN, Uwe et al. A Taxonomy for Mobile Robots: Types, Applications, Capabilities, Implementations,
Requirements, and Challenges. Robotics, 2020. Disponível em: https://www.mdpi.com/2218-6581/9/4/109#cite.
Acesso em: 12 de maio de 2021.
JALIL, Abdul. Robot Operating System (ROS) Dan Gazebo Sebagai Media Pembelajaran Robot Interaktif.
Journal Ilmiah, 2018. Disponível em: http://jurnal.fikom.umi.ac.id/index.php/ILKOM/article/view/365/160.
Acesso em: 11 de abril de 2021.
JAULIN, Luc. Mobile Robotics. ISTE Ltd e John Wiley & Sons, 2019, ed. 2ª. London, UK
JIMENO, Juan et al. GitHub Linorobot. 2021. Disponível em: https://github.com/linorobot/linorobot. Acesso
em: 20 de janeiro de 2022.
JIMENO, Juan et al. GitHub Linorobot. 2022a. Disponível em: https://github.com/linorobot/linorobot2. Acesso
em: 30 de janeiro de 2022.
JIMENO, Juan et al. GitHub Linorobot. 2022b. Disponível em:
https://github.com/linorobot/linorobot2_hardware. Acesso em: 30 de janeiro de 2022.
KAMAL, A. M.; HEMEL, S. H.; AHMAD, M. U. Comparison of Linear Displacement Measurements Between
A Mems Accelerometer and Hc-Sr04 Low-Cost Ultrasonic Sensor. 1st International Conference on Advances in
Science, Engineering and Robotics Technology (ICASERT), 2019.
KARAMAN, Sertac et al. GitHub. Racecar - A Powerful Platform for Robotics Research and Teaching. 2017.
Disponível em: https://mit-racecar.github.io/. Acesso em: 11 de abril de 2021.
KARLSSON ROBOTICS. Scanse Sweep. 2021. Disponível em: https://www.kr4.us/Scanse-Sweep.html. Acesso
em: 11 de abril de 2021.
KASSAWAT, M.; CERVERA, E. del Pobil A.P. Multi-robot User Interface for Cooperative Transportation
Tasks. In: Bioinspired Systems and Biomedical Applications to Machine Learning. IWINAC, 2019. Springer,
Cham.
96
KAU, Nathan et al. Stanford Doggo: An Open-Source, Quasi-Direct-Drive Quadruped. IEEE, 2019.
KAU, Nathan. GitHub. Stanford Doggo Project. 2018. Disponível em:
https://github.com/Nate711/StanfordDoggoProject. Acesso em: 11 de abril de 2021.
KRONAUER, Tobias et al. Latency Overhead of ROS2 for Modular Time-Critical Systems. ArXiv, 2021.
Disponível em: https://arxiv.org/pdf/2101.02074.pdf. Acesso em: 11 de abril de 2021.
KURDILA, Andrew J.; BEM-TZVI, Pinhas. Dynamics and Control of Robotic Systems. John Wiley & Sons Ltd:
2020.
KURNIAWAN, Agus. Cap. Introduction to Raspberry Pi. In: Raspbian OS Programming with the Raspberry Pi.
Apress, Berkeley, CA. 2019.
KURNIAWAN, Agus. Introduction to Raspberry Pi. Raspbian OS Programming with the Raspberry Pi, 2018.
KÜSTER, Dennis; SWIDERSKA, Aleksandra; GUNKEL, David. I saw it on YouTube! How online videos
shape perceptions of mind, morality, and fears about robots. New Media & Society, 2020. Disponível em:
https://journals.sagepub.com/doi/pdf/10.1177/1461444820954199. Acesso em: 11 de abril de 2021.
LANGE, Ralph. Micro-ROS – bringing the most popular robotics middleware onto tiny microcontrollers. 2021.
Disponível em: https://www.bosch.com/stories/bringing-robotics-middleware-onto-tiny-microcontrollers/.
Acesso em: 23 de janeiro de 2022.
LEMOS, Ana C. R.; MENDONÇA, Kennya R. Plataforma Robótica Móvel para Estudos de Localização,
Mapeamento, Navegação e Percepção 3D Baseados em um Sensor RGB-D. In: XXII Congresso Brasileiro de
Automática, 2020. ISSN 2525-8311.
LI, Yunwang et al. Modeling and Kinematics Simulation of a Mecanum Wheel Platform in RecurDyn. Journal
of Robotics, 2018. Disponível em: https://downloads.hindawi.com/journals/jr/2018/9373580.pdf. Acesso em: 11
de abril de 2021.
LIAO, M.; WANG, D.; Yang, H. Deploy Indoor 2D Laser SLAM on a Raspberry Pi-Based Mobile Robot. 11th
International Conference on Intelligent Human-Machine Systems and Cybernetics (IHMSC), 2019, pp. 7-10, doi:
10.1109/IHMSC.2019.10097.
LOPEZ-RODRIGUEZ, Francisco M.; CUESTA, Federico. An Android and Arduino Based Low-Cost
Educational Robot with Applied Intelligent Control and Machine Learning. Applied Sciences, 2021. Disponível
em: https://www.mdpi.com/2076-3417/11/1/48/htm. Acesso em: 11 de abril de 2021.
MANZOOR, Mariam. Arduino with Infrared Sensor. Medium, 2020. Disponível em:
https://medium.com/illumination/arduino-with-infrared-sensor-48ad4415f320. Acesso em: 12 de maio de 2021.
MARÍN, Leonardo. Modular Open Hardware Omnidirectional Platform for Mobile Robot Research. IEEE, 2018.
MARTIN, Robert C. Arquitetura Limpa. Alta Books, 2019, ed. 1ª. ISBN: 978-8550804606.
MARUYAMA, Yuya; KATO, Shinpei; AZUMI, Takuya. Exploring the performance of ROS2. 13th International
Conference on Embedded Software, 2016. https://doi.org/10.1145/2968478.2968502
MATHWORKS. Get Started with ROS. 2021. Disponível em: https://www.mathworks.com/help/ros/ug/get-
started-with-ros.html. Acesso em: 13 de maio 2021.
MICRO XRCE-DDS. eProsima Micro XRCE-DDS. 2018. Disponível em: https://micro-xrce-
dds.docs.eprosima.com/en/latest/. Acesso em: 9 de maio de 2021
MICRO_ROS_ARDUINO. Micro-ros library for arduino. Última modificação em 2022. Disponível em:
https://github.com/micro-ROS/micro_ros_arduino. Acesso em: 23 de janeiro de 2022.
MICRO-ROS. Example publisher. Última modificação em 2021a. Disponível em: https://github.com/micro-
ROS/micro_ros_arduino/blob/foxy/examples/micro-ros_publisher/micro-ros_publisher.ino. Acesso em: 26 de
janeiro de 2022.
MICRO-ROS. Examples subscriber. 2021b. Última modificação em Disponível em: https://github.com/micro-
ROS/micro_ros_arduino/blob/foxy/examples/micro-ros_subscriber/micro-ros_subscriber.ino. Acesso em: 26 de
janeiro de 2022.
97
MICRO-ROS. Home: micro-ROS puts ROS 2 onto microcontrollers. 2022. Disponível em:
https://micro.ros.org/. Acesso em: 23 de janeiro de 2022.
MICROSOFT. Arquivos de header (C++). 2021. Disponível em: https://docs.microsoft.com/pt-br/cpp/cpp/header-
files-cpp?view=msvc-170&viewFallbackFrom=msvc-170%5B. Acesso em: 27 de janeiro de 2022.
MIKE4192. GitHub. Spot Micro Quadruped. 2020. Disponível em: https://github.com/mike4192/spotMicro.
Acesso em: 11 de abril de 2021.
MILLARD, Alan G. et al. The Pi-puck extension board: a Raspberry Pi interface for the e-puck robot platform.
International Conference on Intelligent Robots and Systems (IROS), 2017.
MONDADA, F et al. E-puck: Main Menu. 2010. Disponível em: http://www.e-puck.org/index.php?option=com
_content&view=article&id=2&Itemid=8. Acesso em: 12 de maio de 2021.
MORENO, Andrés; PAEZ, Daniel. Performance evaluation of ROS on the Raspberry Pi platform as OS for
small robots. 2017. Tekhnê da Universidad Distrital Francisco José de Caldas. ISSN 1692-8407.
NAKAMOTO, Naohiro; KOBAYASHI, Hiroyuki. Development of an Open-source Educational and Research
Platform for Autonomous Cars. IEEE, 2019.
NASA. GitHub. Rover Based on the Rovers on Mars. 2018. Disponível em: https://github.com/nasa-jpl/open-
source-rover. Acesso em: 11 de abril de 2021.
NEDJAH, Nadia; JUNIOR, Luneque Silva. Review of methodologies and tasks in swarm robotics towards
standardization. Swarm and Evolutionary Computation, 2019.
NIKU, Saeed B. Introduction to Robotics. 3. ed. John Wiley & Sons Ltd: 2020.
NOORI, Farzan M et al. On 3D simulators for multi-robot systems in ROS: MORSE or Gazebo?. IEEE
International Symposium on Safety, Security and Rescue Robotics (SSRR), 2017.
NOTT, Christopher. SSH Remote Access. Study. 2016. Disponível em: https://study.com/academy/lesson/ssh-
remote-access.html. Acesso em: 12 de maio de 2021.
NUNES, Guilherme. Controle de Iluminação e Temperatura pela Plataforma Arduino via Celular. 2015.
Universidade Tecnológica Federal do Paraná. Disponível em:
http://repositorio.utfpr.edu.br/jspui/bitstream/1/16893/1/PG_COAUT_2015_2_04.pdf. Acesso em: 11 de abril de
2021.
PALAKOLLU, S.M. (2021) Introduction to the Linux Environment. In: Practical System Programming with C.
Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4842-6321-1_1
PANDEY, Anish; PANDEY, Shalini; DR, Parhi. Mobile Robot Navigation and Obstacle Avoidance Techniques:
A Review. International Journal of Robotics and Automation, 2017. Disponível em:
https://www.researchgate.net/publication/317101750_Mobile_Robot_Navigation_and_Obstacle_Avoidance_Tec
hniques_A_Review. Acesso em: 12 de maio de 2021.
PETITTI, Antonio et al. Decentralized Motion Control for Cooperative Manipulation with a Team of Networked
Mobile Manipulators. In: 2016 IEEE International Conference on Robotics and Automation (ICRA). 2016.
RASPBERRY PI. Products. 2021. Disponível em: https://www.raspberrypi.org/products/. Acesso em: 11 de abril
de 2021.
RCLCPP. C++ ROS Client Library API. 2022. Disponível em: https://docs.ros2.org/latest/api/RCLCPP/. Acesso
em: 23 de janeiro de 2022.
RCLPY. RCLPY provides the canonical Python API for interacting with ROS 2. 2022. Disponível em:
https://docs.ros2.org/latest/api/RCLPY/index.html. Acesso em: 23 de janeiro de 2022.
REALPARS. YouTube. What is the Difference between Absolute and Incremental Encoders?. 2019. Disponível
em: https://www.youtube.com/watch?v=-Qk--Sjgq78&ab_channel=RealPars. Acesso em: 11 de abril de 2021.
REZECK, Paulo et al. HeRo: An open platform for robotics research and education. 2017. Disponível em:
https://www.verlab.dcc.ufmg.br/hero/. Acesso em: 12 de maio de 2021.
98
RHOADES, Benjamin B.; SABO, Jeremy P.; CONRAD, James M. Enabling a National Instruments DaNI 2.0
Robotic Development Platform for the Robot Operating System. 2017. IEEE, 2017. ISSN: 1558-058X.
Disponível em: https://ieeexplore.ieee.org/document/7925293/authors#authors. Acesso em: 11 de abril de 2021.
RIBEIRO, A., LOPES, G. Learning Robotics: a Review. Curr Robot Reports, 2020. Disponível em:
https://link.springer.com/article/10.1007/s43154-020-00002-9#citeas. Acesso em: 12 de maio de 2021.
RICHARDSON, Tristan et al. Virtual Network Computing. IEEE Internet Computing. Volume 2, 1998.
Disponível em: https://quentinsf.com/publications/virtual-network-computing/vnc-ieee.pdf. Acesso em: 12 de
maio de 2021.
ROBERT, John. Hands-On Introduction to Robot Operating System (ROS). 2020. Disponível em:
https://trojrobert.github.io/hands-on-introdution-to-robot-operating-system(ros)/. Acesso em: 13 de maio 2021.
ROBOTICS BACK-END. What is ROS?. 201X. Disponível em: https://roboticsbackend.com/what-is-ros/.
Acesso em: 12 de maio de 2021.
ROLDÁN, Juan Jesús et al. Heterogeneous Multi-Robot System for Mapping Environmental Variables of
Greenhouses. Sensors, 2016. Disponível em: https://www.mdpi.com/1424-8220/16/7/1018/htm. Acesso em: 12
de maio de 2021.
ROMADON, Z. T. et al. Pose Estimation on Soccer Robot using Data Fusion from Encoders, Inertial Sensor,
and Image Data. IEEE, 2019.
ROMÁN, David Pérez. Mobile Robot Powered by ROS. 2017. Disponível em:
https://zaguan.unizar.es/record/106412/files/TAZ-TFG-2021-2176.pdf?version=1. Acesso em: 25 de janeiro de
2022.
ROS. ROS developer's guide. 201X. Disponível em: http://wiki.ros.org/DevelopersGuide. Acesso em: 12 de
maio de 2021.
ROS. Understanding ROS Nodes. 201X. Disponível em: http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes.
Acesso em: 13 de maio 2021.
ROS. Understanding ROS Services and Parameters. 2020. Disponível em:
http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams. Acesso em: 13 de maio 2021.
ROS. Understanding ROS Topics. 2019. Disponível em: http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics.
Acesso em: 11 de abril de 2021.
ROS1_BRIDGE. Pacote ROS 2 que fornece comunicação bidirecional entre ROS 1 e ROS 2. Última
modificação em 2022. Disponível em: https://github.com/ros2/ros1_bridge. Acesso em: 23 de janeiro de 2022.
ROS2. ROS 2. Documentation. 2022a. Disponível em: https://docs.ros.org/en/foxy/index.html. Acesso em: 22 de
janeiro de 2021.
ROS2. ROS 2. Tutorial. 2022b. Disponível em: https://docs.ros.org/en/foxy/Tutorials.html. Acesso em: 31 de
janeiro de 2021.
ROS-INDEX. Repository teleop_twist_keyboard. 2021. Disponível em:
https://index.ros.org/r/teleop_twist_keyboard/#foxy. Acessado em: 26 de janeiro de 2022.
RUBIO, Francisco; VALERO, Francisco; LLOPIS-ALBERT, Carlos. A review of mobile robots: Concepts,
methods, theoretical framework, and applications. International Journal of Advanced Robotic Systems, 2019.
Disponível em: https://journals.sagepub.com/doi/10.1177/1729881419839596. Acesso em: 12 de maio de 2021.
SALAROLLI, Pablo; MATTA V. da R.; CUADROS, M. A. de S. L. Fusão dos Dados do Dead Reckoning e do
Giroscópio Usando o Filtro de Kalman Estendido Aplicado à Localização de uma Cadeira de Rodas Motorizada.
XIII Simpósio Brasileiro de Automação Inteligente, 2017. Disponível em:
https://www.ufrgs.br/sbai17/papers/paper_445.pdf. Acesso em: 11 de abril de 2021.
SANTOS, André; CUNHA, Alcino; MACEDO, Nuno. Static-Time Extraction and Analysis of the ROS
Computation Graph. Third IEEE International Conference on Robotic Computing (IRC), 2019. Disponível
em: https://ieeexplore.ieee.org/abstract/document/8675667. Acesso em: 11 de abril de 2021.
SANTOS, Henrique A. Uma Avaliação da Precisão do Sistema de Localização de Robôs Móveis com Aplicação
da Técnica de Fusão Sensorial. III Brazilian Humanoid Robot Workshop and IV Brazilian Workshop on Service
99
VAIDYA, Neerad; RUGHANI, Parag. A forensic study of Tor usage on the Raspberry Pi platform using open
source tools. Computer Fraud & Security, 2020.
VALVANO, Jonathan W. Introduction to Arm(r) Cortex -M Microcontrollers: Introduction to Arm(r)
Cortex(tm)- M Microcontrollers. Createspace, 2014. ISBN: 9781477508992.
VAUTIER, Ulysse et al. Development and test of an open source autonomous sailing robot with accessibility,
generality and extendability. International Robotic Sailing Conference, 2018. Disponível em:
https://www.researchgate.net/publication/328289438_Development_and_Test_of_an_Open_Source_Autonomou
s_Sailing_Robot_with_Accessibility_Generality_and_Extendability. Acesso: 12 de maio 2021.
VERLAB. GitHub. HeRo: An Open Platform for Robotics Research and Education. 2017. Disponível em:
https://github.com/verlab/hero_common. Acesso em: 11 de abril de 2021.
VERMA, Pulkit et al. Loosely Coupled Payload Transport System with Robot Replacement. ArXiv, 2019.
Disponível em: https://arxiv.org/pdf/1904.03049.pdf. Acesso em 12 de maio de 2021.
VERMA, Pulkit. YouTube. Loosely Coupled Payload Transport System with Robot Replacement. Disponível
em: https://www.youtube.com/watch?v=-6ivGT3dOQw&ab_channel=PulkitVerma. 2019. Acesso em: 12 de
maio de 2021.
VIARHEICHYK, Igor. Embedded Programming with Modern C++. Packt Publishing, 2020. ISBN:
9781838821043
WILLOWGARAGEVIDEO. YouTube. Rviz. 2010. Disponível em: https://www.youtube.com/watch?v=i--
Sd4xH9ZE&t=27s&ab_channel=WillowGaragevideo. Acesso em: 13 de maio 2021.
WILSON, Sean et al. Pheeno, A Versatile Swarm Robotic Research and Education Platform. IEEE Robotics
and Automation Letters, 2015.
WYROBEK, Keenan. IEEE Spectrum. The Origin Story of ROS, the Linux of Robotics. 2017. Disponível em:
https://spectrum.ieee.org/automaton/robotics/robotics-software/the-origin-story-of-ros-the-linux-of-robotics.
Acesso em: 12 de maio de 2021.
XBOT. RoboDeck. 2017. Disponível em: http://www.xbot.com.br/educacional/robodeck/. Acesso em: 11 de
abril de 2021.
YOUTUBE. Do You Love Me?. 2020. Disponível em: https://www.youtube.com/watch?
v=fn3KWM1kuAw&ab_channel=BostonDynamics. Acesso em: 11 de abril de 2021.
YOUTUBE. Hey Buddy, Can You Give Me a Hand?. 2018. Disponível em: https://www.youtube.com/ watch?
v=fUyU3lKzoio&ab_channel=BostonDynamics>. Acesso em: 11 de abril de 2021
YU, Xinguo et al. Design and Implementation of Platform of Educational Mobile Robots Based on ROS. Recent
Developments in Mechatronics and Intelligent Robotics, 2017.
ZHANG, Yun et al. Detecting similar repositories on GitHub. IEEE 24th International Conference on Software
Analysis, Evolution and Reengineering (SANER), 2017.
ZHMUD, V. A et al. Application of ultrasonic sensor for measuring distances in robotics. Journal of Physics:
Conference Series, Volume 1015, Issue 3, 2018. Disponível em: https://iopscience.iop.org/article/10.1088/1742-
6596/1015/3/032189. Acesso em: 12 de maio de 2021.