O que é um sistema operacional de robô (ROS)?

O que é um sistema operacional de robô (ROS)?

Normalmente, quando falamos de robótica, a primeira coisa que vem à mente são manipuladores robóticos equipados com efetores finais, acionados por atuadores, guiados por sensores e controlados por microcontroladores. O hardware mecânico sempre impressiona os espectadores, mas é o software robótico subjacente que dá vida a essas máquinas magníficas. A maioria dos pequenos robôs é programada do zero, o que pode ser entediante quando uma aplicação robótica é grande ou multifacetada. No desenvolvimento de software, grandes aplicativos de software são gerenciados com a ajuda de um kit de desenvolvimento de software. Da mesma forma, o desenvolvimento de software robótico extensivo requer uma estrutura – o Robot Operating System (ROS) é uma iniciativa de código aberto que fornece essa estrutura.

Bot Tartaruga ROS

Apesar do nome, ROS não é um sistema operacional. É uma estrutura de software para o desenvolvimento de software robótico que inclui um conjunto de diferentes ferramentas e bibliotecas úteis no desenvolvimento de aplicações robóticas. Desde o seu início, o ROS foi ajustado para funcionar no Ubuntu Linux. A maioria das ferramentas de desenvolvimento, drivers, bibliotecas e algoritmos foram projetados para operar em sistemas do tipo Unix. Ainda assim, muitas bibliotecas ROS e ferramentas de desenvolvedor podem ser usadas no Mac OSX e no Microsoft Windows. Ubuntu tem sido uma escolha natural para ROS porque a estrutura depende principalmente de dependências de código aberto.

Neste artigo, definiremos o Sistema Operacional do Robô (ROS), como ele funciona e por que é útil.

O que é ROS?
A estrutura de desenvolvimento de software RO é um projeto de código aberto iniciado em 2007 na Universidade de Stanford sob o título “Switchyard”. Em 2008, o projeto foi realizado por uma start-up, Willow Garage. Em 2013, Willow Garage formou a Open Source Robotic Foundation (OSRF) e tornou o ROS um projeto de código aberto.

A robótica envolve teoria de controle, visão computacional, aprendizado de máquina, eletrônica embarcada e inteligência artificial. Os aplicativos de robôs são softwares complexos que envolvem múltiplas disciplinas. O ROS organiza uma aplicação robótica em pacotes e fornece uma camada de abstração de hardware que permite desenvolver software robótico independentemente do hardware subjacente. A estrutura também fornece um middleware de passagem de mensagens onde dados robóticos podem ser comunicados entre diferentes processos e até mesmo outras máquinas. Sendo uma estrutura flexível, o ROS pode programar qualquer funcionalidade robótica. A vantagem mais significativa do ROS é que as aplicações ROS com todas as funcionalidades robóticas possíveis podem ser executadas em qualquer robô, independentemente dos seus componentes de hardware.

Por que ROS?
Havia um grande vazio para uma estrutura genérica de software robótico. O ROS preencheu essa lacuna e apresentou uma abordagem modular e independente de plataforma para o desenvolvimento de aplicações robóticas. Por ser gratuito e de código aberto, qualquer pessoa pode usar, modificar, depurar e contribuir com o ROS. Também pode ser usado em qualquer aplicação industrial sem quaisquer taxas de licença. Muitas universidades estão ativamente envolvidas em pesquisas robóticas envolvendo ROS. Sendo um projeto conduzido pela comunidade, o ROS está crescendo e evoluindo continuamente, e o suporte da comunidade garante que o ROS seja livre de bugs, robusto e inclusivo de todos os recursos e funcionalidades emergentes.

A estrutura oferece suporte a linguagens de programação populares, incluindo C, Python, Java e Lisp. Já possui interface para diversas bibliotecas de terceiros, incluindo Open-CV, Open-NI, OpenRAVE e PCL. Os pacotes ROS operam em uma camada de abstração de hardware, de modo que o ROS independente de plataforma e seus pacotes podem ser usados ​​para qualquer hardware. Por ser muito flexível, os desenvolvedores podem personalizá-lo e escolher quais componentes da estrutura ROS incorporar em um projeto robótico e quais bibliotecas desejam interfacear.

O ROS permite que os engenheiros criem, testem e implantem rapidamente software robótico agnóstico que pode ser reutilizado em qualquer outro robô. O ROS é integrado a simuladores de código aberto como Gazebo e outros simuladores proprietários, incluindo V-REP. O código ROS pode ser facilmente testado usando uma estrutura integrada chamada “rostest”. O código do aplicativo permanece modular, bem organizado, reutilizável, escalável e independente de hardware.

Como funciona o ROS
Uma aplicação ROS é organizada em metapacotes – uma coleção de pacotes para funcionalidades específicas. Por exemplo, um robô móvel pode ter um sistema de navegação para manipulação de metapacotes. Os pacotes são os blocos de construção de qualquer software ROS e consistem em nós/processos associados a conjuntos de dados e arquivos de configuração. Um nó é simplesmente um processo que usa a API ROS para se comunicar dentro do sistema robótico e é criado com a ajuda de bibliotecas clientes. O software robótico em ROS é uma coleção de nós onde cada nó é responsável por uma função específica. Por exemplo, um nó pode ser responsável pela navegação, outro pode ser responsável pela coleta de dados de sensores e outro pode ser responsável pela interface de hardware.

Uma aplicação ROS, portanto, pode ser considerada uma coleção de nós. Esses nós devem se comunicar entre si e trocar dados ou prestar serviços para o funcionamento robótico. Existe um nó intermediário chamado ROS Master que conecta todos os nós e estabelece comunicação de dados entre eles. As variáveis ​​utilizadas na comunicação de dados são armazenadas em um servidor de parâmetros acoplado ao mestre ROS. Cada variável possui um escopo e pode ser acessível por um ou mais nós.

Sistema de arquivos ROS

Os dados são comunicados entre os nós na forma de mensagens ROS. Existem duas maneiras de comunicar mensagens entre nós: tópicos e serviços. Os tópicos são um método de publicação e assinatura de transmissão de dados entre nós e são barramentos nomeados nos quais os nós podem se registrar como editores ou assinantes. Quando um nó publica uma mensagem ROS sobre um tópico, ela é enviada ao mestre ROS. Os nós cadastrados como assinantes do mesmo tópico recebem o URI do publicador do mestre ROS e assim recebem a mensagem do publicador assim que ela for publicada. Uma vez que os nós estão conectados ponto a ponto, o mestre ROS não tem mais nenhuma função a desempenhar. Os nós podem comunicar mensagens ROS ponto a ponto entre si sem passar pelo mestre ROS. Isso é um pouco semelhante ao protocolo MQTT, exceto que as mensagens são sempre passadas entre os nós por meio do intermediário no MQTT. Aqui, o papel do mestre ROS é cumprido uma vez que ele conecta todos os nós ponto a ponto.

Os serviços são um método de solicitação-resposta para comunicação de mensagens ROS entre nós. Um nó solicita dados de outro nó. O outro nó atua como um provedor de serviços executando uma rotina de serviço. Ao receber uma solicitação de outro nó, ele executa a rotina de serviço e transfere os resultados por meio de mensagens ROS. As mensagens ROS em um nó são armazenadas em arquivos de mensagens com extensão .msg. As definições de serviço em um nó são armazenadas em arquivos de serviço com extensão .srv. Existe um arquivo de manifesto chamado package.xml dentro do aplicativo que armazena todas as informações sobre o nome do aplicativo, versão, autor, pacotes necessários e dependências.

Gráfico computacional ROS

O ROS inclui utilitários chamados “Bags” que gravam e reproduzem mensagens ROS e são úteis na simulação e inspeção de dados robóticos.

Distribuições ROS
Distribuições ROS são uma coleção versionada de pacotes ROS. Eles são semelhantes às distribuições Linux. Cada distribuição consiste em alguns pacotes principais cujas versões estáveis ​​são mantidas até o fim da vida da distribuição. As distribuições ROS são montadas com compatibilidade com Ubuntu Linux. O versionamento das distribuições ROS também é feito simultaneamente com as versões do Ubuntu Linux porque as distribuições ROS possuem principalmente dependências de código aberto que funcionam e dependem do Linux. Aqui você pode encontrar documentação para algumas das distribuições ativas do ROS1 e ROS2.

Deve-se notar que ROS Noeitc Ninjemys é a versão final do ROS1. Versões futuras de distribuições ROS serão baseadas em ROS2. Se você não está procurando novos recursos nem atualizações significativas, você pode usar a distribuição anterior de suporte de longo prazo (LTS), que neste momento é ROS Melodic Morenia. Se você está procurando novos recursos e também está confortável com atualizações importantes, use o LTS mais recente, ou seja, ROS Noeitc Ninjemys.

Bibliotecas de cliente
As bibliotecas cliente ROS são usadas para escrever nós ROS. Com a ajuda de bibliotecas cliente, você não precisa escrever código do zero; em vez disso, você precisa definir retornos de chamada de serviço e implementar publicação-assinatura para o nó. As bibliotecas clientes estão disponíveis por linguagem de programação: roscpp é a biblioteca cliente para escrever nós em C++; rospy é a biblioteca cliente para escrever nós em Python; e roslisp é a biblioteca cliente para escrever nós em LISP.

Ferramentas ROS
As distribuições ROS incluem várias ferramentas valiosas para resolver problemas comuns de desenvolvimento e automatizar tarefas complexas, como simulação e visualização de dados robóticos. As ferramentas podem ser GUI ou ferramentas de linha de comando. Eles estão incluídos nos pacotes. Algumas das ferramentas ROS populares envolvem o seguinte.

RVIZ: Este é um visualizador 3D útil na criação de gráficos visuais de valores 2D e 3D acessados ​​a partir de dados robóticos. Ajuda a visualizar modelos de robôs, dados de imagens, nuvens de pontos e dados de sensores.

rosbag e rqt_bag: Esta é uma ferramenta de linha de comando para gravar e reproduzir mensagens ROS. É útil na depuração de aplicativos e funciona como um console de linha de comando. Outra ferramenta, rqt_bag, fornece uma interface gráfica para o rosbag.

rqt_plot: Esta ferramenta é útil para traçar valores escalares ao vivo publicados em tópicos ROS.

gráfico_rqt: Esta ferramenta ajuda a visualizar nós/processos em execução no ROS e as interconexões entre eles.

Webviz: Esta é uma ferramenta valiosa baseada na web para visualizar dados ROS e arquivos bag ROS.

Estúdio Dedaleira: Disponível como aplicativo web e desktop, este é um ambiente de desenvolvimento integrado (IDE) para visualização e depuração de dados ROS.

ROS Móvel: Este aplicativo Android é útil para o controle dinâmico e visualização de robôs móveis baseados em ROS.

Ferramentas de linha de comando: Várias ferramentas de linha de comando estão disponíveis, desde a instalação do ROS até a execução e depuração do ROS. As ferramentas rosmake, rosinstall, roslocate, rosdep, rospack/roscd e rosstack/roscd são usadas durante a instalação do ROS. As ferramentas roslauch, rosrun e roscore são usadas para executar o ROS. As ferramentas rostopic, rosservice, rosnode, rosparam, rosmsg, rossrv e roswtf são usadas para interagir e depurar ROS.

Simulador ROS
O ROS está integrado ao simulador robótico de código aberto Gazebo. Gazebo, que pode ser integrado ao ROS por meio de um plugin, é capaz de simular uma variedade de modelos de robôs e inclui suporte para um grande número de sensores. Simuladores proprietários como Webots e V-REP também suportam ROS. No entanto, você precisa pagar uma taxa de licença para usá-los. Se você não quiser pagar pela simulação robótica, o Gazebo é suficiente para manter a compatibilidade do ROS.

Nós ROS
Os nós são os blocos de construção da aplicação ROS. O aplicativo está dividido em pacotes. Por exemplo, uma aplicação de robô móvel pode ser dividida em três pacotes: câmera, navegação e controle de hardware. Cada pacote pode conter um ou mais nós, embora cada pacote normalmente contenha apenas um nó. O pacote da câmera pode incluir nós como driver da câmera e processamento de imagem. É possível manter o processamento de imagens em um pacote diferente. O pacote de navegação pode consistir em nós para planejamento de movimento e correção de trajetória. O pacote de controle de hardware pode incluir nós para o circuito de controle principal, publicação de estado do robô e drivers de hardware. Os nós interagem entre si através de tópicos e serviços, comunicando dados necessários para funções robóticas. Por exemplo, os nós para planejamento de movimento e correção de caminho trocarão dados com o nó da malha de controle principal no pacote de controle de hardware para permitir a navegação do robô. Algumas funcionalidades padrão em robótica incluem navegação, percepção, mapeamento e localização, registro de dados, visualização e controle de hardware.

Hardware ROS
Há amplo suporte de hardware para ROS. Muitos sensores, incluindo telêmetro 1D, telêmetro 2D, sensores 3D, câmeras, captura de movimento, força/torque, RFID, entrada/saída, velocidade, toque, estimativa de pose e sensores ambientais, são suportados pelo ROS. Você pode encontrar uma lista completa de sensores suportados por ROS aqui. Uma lista de drivers de motor suportados está disponível neste link. Se você quiser saber mais sobre alguns robôs em destaque rodando em ROS, clique aqui.

Versões ROS
Atualmente, existem duas versões principais ativas do ROS – ROS1 e ROS2. O ROS Noeitc Ninjemys foi a versão final do ROS1. Uma nova versão do ROS2 é lançada a cada seis meses e tem suporte por um ano. Você pode navegar pelas distribuições ROS mais recentes aqui. Observe que as distribuições ROS são instaladas no Ubuntu Linux ou em outros sistemas operacionais suportados usando ferramentas de linha de comando.

Introdução ao ROS
Você pode começar com ROS em qualquer computador Linux, Windows ou Mac. Muitas aplicações robóticas podem ser escritas e testadas com a ajuda do simulador ROS. Para implementação na vida real, você precisará de componentes de hardware específicos para a aplicação automatizada. Por exemplo, você pode precisar de Arduino, motores, drivers de motor e sensores para construir um robô móvel, ou pode precisar de um módulo de câmera para detecção de rosto ou outros recursos.

Conteúdo Relacionado

A Infineon Technologies AG apresenta os novos MOSFETs CoolSiC...
Uma rede de sensores é incorporada em todos os...
O controlador do motor é um dos componentes mais...
ESP32-CAM é um módulo de câmera compacto que combina...
A evolução dos padrões USB foi fundamental para moldar...
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A Sealevel Systems anuncia o lançamento da Interface Serial...
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
Determinar uma localização precisa é necessário em várias indústrias...
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
O mercado embarcado tem uma necessidade de soluções de...
Quando você explora a área de Controle V/F dos...
Você provavelmente já se deparou com o termo 'arrastar'...
Você provavelmente tem um Isolador de suporte Se você...
Voltar para o blog

Deixe um comentário

Os comentários precisam ser aprovados antes da publicação.