Dissertação de mestrado integrado em Engenharia InformáticaIn robotic applications, it is common to develop several variants of the same system (also known as a software
product line), for example, to support different configurations of a robot. ROS is the most popular framework for
developing robotic applications, where each application is implemented as a distributed system of computation
nodes that communicate through message passing. HAROS is a framework for static analysis of ROS-based
code. It can extract an abstract model of a ROS system’s architecture (called the computation graph) and perform
an analysis on that model. However, it can only analyse one configuration at a time.
In this thesis, we present three different approaches for encoding various ROS computation graphs in a single
variational data structure, which contains the information related to the whole system and not just a configura tion. Additionally, we also define a variational execution algorithm for each approach, along with a small query
language, so that we can query and perform some analysis on said data structures. Lastly, we evaluate these
algorithms and data structures so that we can reach some conclusions on which approaches work best, and in
what conditions.Nas aplicações robóticas, é comum desenvolver diversas variantes do mesmo sistema (também conhecido
como uma software product line) para, por exemplo, suportar diferentes configurações de um robot. O ROS
é a framework mais popular no que toca ao desenvolvimento de aplicações robóticas, onde cada aplicação é
implementada como um sistema distribuído de nós de computação que comunicam entre si através do envio
de mensagens. O HAROS é uma framework de análise estática de código ROS. Consegue extrair um modelo
abstrato de uma arquitetura de um sistema ROS (chamado grafo de computação) e executar nesse modelo uma
análise.
Nesta tese, apresentamos três diferentes abordagens para codificar vários grafos de computação ROS numa
única estrutura de dados variacional, que contém a informação relativa a todo o sistema e não apenas a uma
configuração. Adicionalmente, também definimos um algoritmo de execução variacional para cada abordagem,
juntamente com uma pequena linguagem de query, de forma a que possamos analisar e pesquisar nessas
estruturas de dados. Por fim, avaliámos estes algoritmos e estruturas de dados de modo a que possamos
chegar a algumas conclusões sobre que abordagens funcionam melhor, e em que situações