Introduction to Ros (Robot Operating System) for Beginners
Table of Contents
A Robótica evoluiu para um campo dinâmico e acessível, e o Robot Operating System (ROS) se destaca como um kit de ferramentas essencial para desenvolvedores e entusiastas. A ROS fornece um framework flexível e distribuído para escrever softwares de robôs, permitindo que você crie comportamentos complexos, integre diversos componentes de hardware e reuso de código em projetos. Se você é estudante, hobbyista ou engenheiro profissional, entender a ROS desbloqueia a capacidade de criar sistemas robóticos sofisticados com menos sobrecarga e foco na lógica de alto nível. Este guia introduz a ROS desde o início, cobrindo suas ideias principais, etapas práticas de configuração e caminhos para aprofundar sua experiência.
O que é ROS?
O ROS é um sistema de meta- operação de código aberto, desenhado especificamente para o desenvolvimento de software robot. Não é um sistema operacional em tempo real como o FreeRTOS ou uma plataforma completa como o Android; em vez disso, está entre o sistema operativo e o seu código de aplicação, fornecendo serviços que você esperaria de um sistema operacional, como a abstração de hardware, o controlo de dispositivos de baixo nível, a comunicação inter- processo e a gestão de pacotes. O projecto foi originalmente desenvolvido pelo Laboratório de Inteligência Artificial da Universidade de Stanford em 2007 e, mais tarde, assumido pela Willow Garage, uma incubadora para a inovação em robótica. Desde então, a ROS tornou-se o padrão de facto para a investigação e prototipagem em robótica, graças à sua arquitectura modular, contribuições comunitárias extensas e suporte para uma vasta gama de sensores, atuadores e algoritmos.
As principais características da ROS incluem:
- Comunicação de um par para outro – Os nós (processos individuais) comunicam-se utilizando um modelo de publicação/assinatura e requisição/resposta, permitindo arquiteturas descentralizadas e escaláveis.
- Ecossistema baseado em ferramentas – Uma rica coleção de ferramentas de linha de comando, como , , e , para introspecção, depuração e visualização.
- Independência linguística – ROS suporta múltiplas linguagens de programação, principalmente C++ e Python, mas também Java, Lisp, e outros, através de definições de mensagem de linguagem-agnóstico.
- Leve e modular – Todo o sistema é construído em torno de executáveis pequenos e focados que podem ser desenvolvidos, testados e reutilizados individualmente em diferentes robôs.
- Organização baseada em pacotes – O código é organizado em pacotes que agrupam nós, bibliotecas, arquivos de configuração e documentação, tornando o compartilhamento e colaboração simples.
Existem duas versões principais: ROS 1 (a versão clássica, com distribuições como Noetic Ninjemys) e ROS 2 (uma versão redesenhada que aborda restrições em tempo real, segurança e suporte multiplataforma). Para iniciantes, começar com ROS 1 ainda é comum devido a recursos abundantes, mas ROS 2 é o futuro e vale a pena aprender uma vez que os fundamentos são claros.
Conceitos Principais de ROS
Para escrever programas ROS de forma eficaz, você deve internalizar algumas abstrações fundamentais. Esses conceitos formam a espinha dorsal da comunicação e definem como robôs percebem e agem.
Nós
A nó é um processo que executa computação. Num sistema típico de robôs, você poderá ter um nó a lidar com o processamento de imagens da câmara, outro a controlar o braço do robô e um terceiro a publicar dados de odometria. Os nós são independentes e comunicam- se uns com os outros através de tópicos, serviços ou acções. Cada nó é compilado e executado separadamente, de modo que o sistema possa ser distribuído em várias máquinas e processadores. Os nós podem ser escritos em qualquer idioma suportado e são tipicamente definidos num pacote.
Tópicos
Tópicos são chamados ônibus sobre o qual nós trocam mensagens. O padrão editor/assinalista é usado: um nó que deseja enviar dados (por exemplo, leituras de varredura a laser) publica para um tópico como , enquanto nós que precisam que os dados subscrevam o mesmo tópico. Tópicos são assíncronos e muitos-a-muitos, o que significa que vários editores e assinantes podem coexistir. Mensagens têm uma estrutura predefinida definida em , que são compilados em código específico de linguagem. Compreender o sistema tópico é crucial para projetar aplicações robóticas modulares.
Mensagens
As mensagens são as estruturas de dados enviadas através de tópicos. ROS define tipos de mensagens padrão para dados comuns (por exemplo, , , ) mas você também pode criar tipos de mensagens personalizadas para sua aplicação. Uma mensagem contém campos digitados, como inteiros, flutuadores, arrays e mensagens aninhadas. A linguagem de definição de mensagens é simples, mas expressiva, permitindo modelar dados complexos de sensores ou estruturas de comandos.
Serviços
Enquanto os tópicos fornecem streaming unidirecional, os serviços permitem interações de requisição-resposta síncrona. Um serviço é definido por um par de estruturas de mensagem: uma para a requisição e outra para a resposta. Por exemplo, um nó pode oferecer um serviço que, quando chamado, retorna a carga atual. Os serviços são úteis para tarefas que requerem feedback imediato, como definir um parâmetro ou desencadear uma ação de um tiro. Eles são comumente usados para configuração ou para operações que precisam de confirmação.
Servidor de Mestrado e Parâmetro
A Mestre ROS é um registro central que permite que nós encontrem e se conectem uns aos outros. Mantém informações sobre tópicos, serviços e parâmetros disponíveis. Sem o Master, nós não se descobririam. Servidor de Parâmetros faz parte do Master e armazena valores de configuração (como dimensões de robô ou ganhos de PID) que podem ser acessados por qualquer nó em tempo de execução. Parâmetros são globais e podem ser atualizados dinamicamente, tornando-os uma maneira flexível de ajustar o comportamento do robô sem recompilar o código.
Sacos
Um saco é um formato de arquivo usado para gravar e reproduzir dados de mensagens ROS. Durante o desenvolvimento, você pode gravar dados de sensores de um robô real em um arquivo e depois reproduzi-lo como se o robô estivesse rodando novamente. Isto é inestimável para depuração, ajuste de algoritmo e testes offline sem precisar do robô físico. Rosbag também suporta filtragem e conversão, tornando-o uma ferramenta chave para robótica orientada por dados.
Acções
As ações estendem o modelo de serviço para tarefas de execução mais longa que necessitam de feedback periódico. Por exemplo, mover um braço de robô para uma posição alvo pode levar vários segundos e você deseja atualizações de estado intermediárias. As ações usam um objetivo, feedback e protocolo de resultados, permitindo que você cancele ou monitore o progresso. A biblioteca fornece a implementação e é amplamente usada em pilhas de navegação e manipulação.
ROS 1 vs ROS 2: Qual escolher?
ROS 1 (a versão clássica) tem sido a espinha dorsal da pesquisa de robótica por mais de uma década. Sua última distribuição oficial é a Noetic Ninjemys, que será suportada até 2025. ROS 2 foi introduzida para abordar limitações no desempenho em tempo real, segurança e suporte multiplataforma. ConstruÃda em DDS (Serviço de Distribuição de Dados), ROS 2 oferece melhor suporte para sistemas multi-robôs, dispositivos incorporados e ambientes de produção. Para iniciantes, começando com ROS 1 é muitas vezes mais fácil devido à vasta quantidade de tutoriais e pacotes comunitários. No entanto, se você estiver construindo um novo projeto ou esperando trabalhar com hardware moderno, ROS 2 é o caminho recomendado.
Muitos recursos agora cobrem tanto, quanto os conceitos principais, transferência diretamente.
Começando com ROS
O primeiro passo prático é instalar ROS no seu computador. Enquanto ROS suporta macOS, Windows e várias distribuições Linux, a plataforma recomendada para iniciantes é Ubuntu Linux (20.04 para ROS Noetic, a última distribuição ROS 1. O processo de instalação envolve tipicamente configurar as suas fontes, adicionar a chave do repositório ROS e executar um comando como:
Isto instala o conjunto completo de desktop, incluindo bibliotecas, ferramentas e software de visualização como RViz e Gazebo. Após a instalação, você deve obter o script de ambiente ROS (adicionar a ]) para usar as ferramentas de linha de comando:
Para ROS 2, escolha uma distribuição como Humble Hawksbill (Ubuntu 22.04) e siga o guia de instalação oficial.
Criar um Espaço de Trabalho
ROS organiza código em um espaço de trabalho catkin (para ROS 1) ou espaço de trabalho colcon (para ROS 2). Um espaço de trabalho é um diretório onde você constrói e executa seus pacotes. Para criar um para ROS 1:
- Criar uma pasta:
- Navegar até a raiz do espaço de trabalho e executar
- Fonte do arquivo de configuração:
Para ROS 2, use em vez disso. Espaços de trabalho permitem organizar vários pacotes e gerenciar dependências facilmente.
Comandos ROS básicos
Uma vez instalado o ROS, você pode interagir com o sistema usando estes comandos essenciais:
- roscore – Inicia o Mestre ROS, servidor de parâmetros e um nó de registro. Deve estar em execução antes de qualquer outro nó ROS.
- rosrun <pacote> <node> – Executa um único nó de um determinado pacote. Por exemplo, lança um simulador simples de tartarugas que é ótimo para aprender.
- roslaunch <pacote> <launchfile> – Lança vários nós e suas configurações, conforme definido em um arquivo de lançamento. Lançar arquivos simplificam configurações complexas.
- lista rostópica – Lista todos os tópicos ativos.
- ecos rostópicos <topic> – Imprime mensagens sendo publicadas sobre um tópico.
- rostopic pub <topic> <msg type> <data> – Publica uma mensagem para um tópico diretamente da linha de comando.
- rosservice list – Listas de serviços disponíveis.
- rosservice call <service> <args> - Chama um serviço.
- informações sobre rosnode, rosnode list – Obtenha informações sobre nós em execução.
Esses comandos dão uma maneira poderosa de inspecionar, diagnosticar e controlar seu sistema robô sem escrever nenhum código. Passe tempo jogando com o pacote para ficar confortável com as ferramentas de linha de comando.
Construindo uma Aplicação Simples de Robô
Para solidificar a sua compreensão, você irá criar um par mínimo de editor/subscritor. Este exemplo consiste em dois nós: um que publica uma contra- mensagem a cada segundo (talker) e outro que imprime a mensagem (ouster).
Primeiro, crie um novo pacote chamado dentro da sua pasta de trabalho :
[FLT: 22]Dentro do pacote, escreva um script Python :
Então o ouvinte :
Tornar ambos os scripts executáveis () e depois construir o espaço de trabalho com . Finalmente, ligue em um terminal, execute em outro, e em um terceiro. Você verá as mensagens do locutor impressas pelo ouvinte. Esta comunicação simples demonstra o mecanismo de publicação/subscrição do núcleo que potencializa interações robôs muito mais complexas.
Ferramentas essenciais para o desenvolvimento de ROS
ROS fornece várias ferramentas gráficas que aceleram drasticamente o desenvolvimento e depuração:
- RViz – Uma ferramenta de visualização 3D para exibir dados de sensores, modelos de robôs e informações de navegação. Você pode visualizar varreduras a laser, nuvens de pontos, imagens de câmeras e transformar árvores. É indispensável para entender o que seu robô percebe.
- rqt – Uma estrutura baseada em Qt para desenvolvimento de GUI, oferecendo plugins como (visualiza conexões nó/tópico), (parcela dados ao longo do tempo), e (observador de mensagens de log).
- rosbag – Ferramenta de linha de comando para gravar e reproduzir arquivos de saco. Use para capturar todos os tópicos, então para reproduzir. Esta é uma pedra angular da pesquisa de robótica reprodutível.
- tf2 – A biblioteca de transformação que acompanha as coordenadas ao longo do tempo. Você pode usar para inspecionar as transformadas e para verificar as taxas de publicação.
Dominar essas ferramentas cedo vai poupar horas de depuração e deixar você se concentrar em construir funcionalidade.
Aprendizagem e recursos comunitários
A ROS tem uma das comunidades mais ativas e solidárias da robótica. Para acelerar seu aprendizado, aproveite esses excelentes recursos:
- Tutoriais oficiais ROS - A ROS Wiki fornece tutoriais passo a passo para iniciantes, cobrindo tudo, desde a criação de espaço de trabalho até pilhas de navegação avançadas.
- Respostas ROS – Um fórum de perguntas e respostas onde você pode fazer perguntas técnicas específicas e procurar soluções. respons.ros.org.
- Discurso do ROS – O Conselho de Discussão oficial para anúncios, mostras de projetos e conversas mais longas. discurso.ros.org.
- Cursos Online – Plataformas como Udemy, Coursera e EdX oferecem cursos estruturados de ROS. A série "ROS for Principiants" de Anis Koubaa é particularmente popular.
- Livros - Não, não, não. Robots de programação com ROS por Morgan Quigley e Brian Gerkey fornece uma introdução completa, enquanto Sistema de operação de robôs (ROS) para iniciantes absolutos por Lentin Joseph é excelente para os novatos.
- Canais do YouTube – Procure por "Tutorial ROS" – canais como The Construct, Robotis e o laboratório de robótica da IIT Kharagpur oferecem vídeos e demonstrações de projetos.
- Instalando ROS no Ubuntu – O funcionário Guia de instalação ROS é a referência canónica.
Não hesite em experimentar ferramentas de simulação como Gazebo antes de se mover para um robô físico. A comunidade ROS tem pacotes para quase qualquer sensor, atuador ou algoritmo, então você pode muitas vezes evitar reinventar a roda.
Tópicos Avançados para uma Exploração Adicional
Uma vez que você está confortável com o básico, você pode se aventurar em áreas mais avançadas:
- ROS 2 – A próxima geração de ROS, construída com DDS para desempenho em tempo real, segurança e suporte multiplataforma. Muitos novos robôs e projetos estão adotando ROS 2.
- Pilha de navegação – Uma coleção de pacotes para navegação autônoma de robôs, incluindo SLAM (localização simultânea e mapeamento), planejamento global de caminhos e evitação de obstáculos.
- MoverIt – Um poderoso quadro para planejamento e manipulação de movimentos, especialmente para braços robóticos.
- URDF – Unificado Robô Descrição Formato, uma especificação XML para descrever a cinemática de um robô, aparência visual e modelos de colisão.
- Integração com Gazebo – Simulando seus nós ROS em um ambiente de física realista antes de implantar em um robô real.
- Árvores de Comportamento – Uma forma modular de definir comportamentos complexos de robôs, cada vez mais utilizados na ROS 2 para o planejamento de tarefas.
Melhores práticas para o desenvolvimento de ROS
Ao começar a construir projetos reais, tenha em mente essas melhores práticas:
- Usar os ficheiros de lançamento – Em vez de executar vários terminais, defina a configuração do seu nó em um arquivo . Isso torna seu sistema reprodutível e mais fácil de depurar.
- Gerenciar espaços de nomes – Ao executar vários robôs ou componentes, use espaços de nomes para evitar colisões de nomes de tópicos. Isso mantém o sistema modular.
- Registrar significativamente – Use , ] e com níveis de verbosidade adequados. Evite imprimir dados brutos para consolar; use para filtragem.
- Controlo de versões – Use sempre Git para seus pacotes. Inclua um e um com dependências adequadas.
- Ensaio com simulações – Antes de correr em hardware, simular com Gazebo ou estágio. Isso reduz o risco e acelera o desenvolvimento.
- Respeitar os limites dos recursos – Definir as taxas de publicação adequadas e tamanhos de fila. Evite tópicos inundados com dados de alta frequência, a menos que necessário.
Conclusão
ROS não é apenas uma ferramenta; é um ecossistema que continua a evoluir. Ao dominar os seus conceitos fundamentais, você abre a porta para criar tudo, desde robôs de telepresença simples a sistemas autônomos avançados. Comece pequeno, pratique com o turtlesim, construa seu primeiro par de assinantes de editoras e incorpore gradualmente pacotes mais complexos. A jornada para a robótica com o ROS é desafiadora, mas imensamente gratificante. Fique curioso, construa pequenos projetos iterativamente, e engaje-se com a comunidade global.
Seu primeiro robô espera.