Temos que criar ROS para pesquisa / aplicação robótica? Qual é a principal vantagem? Quando ou em que situações o ROS é obrigatório?
Temos que criar ROS para pesquisa / aplicação robótica? Qual é a principal vantagem? Quando ou em que situações o ROS é obrigatório?
Respostas:
Estou de volta ao computador!
Como eu disse neste comentário , o ROS geralmente não é obrigatório. O ROS é uma plataforma entre muitas, famosa principalmente pela Willow Garage que oferece robôs gratuitos em algum momento para quem escreveu a maioria dos módulos de ROS. Dito isto, não é a melhor plataforma possível e certamente não é nada de especial. Particularmente, o referido concurso resultou em muitos módulos de baixa qualidade apenas para aumentar os números.
Com o tempo, a qualidade dos módulos ROS melhorou e há muitos deles também. Portanto, usando o ROS, você tem o benefício de reutilizar muito do que já foi feito. Você pode ler aqui algumas razões pelas quais você pode querer usar o ROS.
Com isso em mente, você também deve observar os efeitos colaterais.
Com o ROS, você tem muitos nós que se comunicam através da rede. Às vezes, isso é bom e fácil, mas geralmente resulta em um atraso muito variável na recepção de mensagens. Como resultado, você teria que ter um grande atraso no controle para garantir que todas as mensagens chegassem, o que significa que você não pode reagir rapidamente aos eventos, o que, por sua vez, significa que você precisa mover o robô em velocidades mais lentas para não perder esses eventos.
Acredite ou não, as pessoas realmente controlam o robô através do ROS ( MoveIt! É o nome do conjunto relevante de componentes). Lento. Inseguro. Mas fácil!
Mesmo quando não distribuído, o ROS não é uma plataforma em tempo real. Isso significa que você está a critério completo do kernel do Linux para agendar suas tarefas a qualquer momento que achar conveniente. Isso é bom para alguns aplicativos, mas não é bom para outros. Então, você precisa examinar seus próprios requisitos. Você precisa ter uma garantia de que sua tarefa seria concluída dentro de um prazo conhecido? Nesse caso, você precisa de um sistema em tempo real.
Outro ponto a considerar é que, embora o ROS seja um protocolo geral de comunicação, ele é essencialmente suportado apenas em ambientes hospedados. Hospedado significa que o código é executado no topo de um kernel, em oposição ao autônomo, o que significa que o código controla diretamente o hardware (por exemplo, em um microcontrolador).
Se o seu aplicativo de robótica for executado próximo ao hardware e, portanto, você exigiria um programa que seja executado em um microcontrolador, o ROS não ajudará você.
Por último, mas não menos importante, o desenvolvimento para ROS resulta em um bloqueio da plataforma. Isso significa que se, no futuro, por um motivo ou outro, você decidir basear seu trabalho em outra plataforma robótica, como OROCOS, YARP, etc., isso seria excruciante.
Você também estaria um pouco bloqueado para o Linux. O Linux é o melhor, sem dúvida, mas um dia você pode ter que suportar outro sistema, como QNX, VxWorks, etc., e você também terá problemas.
Se você está escrevendo para microcontroladores, esqueça o ROS. Se você estiver escrevendo módulos de alto nível, eu recomendo escrever código portátil. Por exemplo, digamos que você tenha desenvolvido um novo sensor e deseje gravar um módulo que adquira dados desse sensor, conectado ao seu computador através do barramento CAN.
O que você poderia fazer nessa situação é escrever uma biblioteca independente, com funções capazes de trabalhar com seu sensor e adquirir dados. Você pode até pensar em gerar um encadeamento na biblioteca que adquire e enfileira dados periodicamente.
Depois de ter essa biblioteca auxiliar, você pode escrever uma CLI, GUI, módulo ROS, módulo OROCOS, módulo YARP, conectar-se ao Matlab ou qualquer outra coisa que desejar usar para interagir com seu sensor.
Nota final: o que eu disse aqui é geralmente aplicável a todas as plataformas de robótica e não apenas ao ROS.
"ROS" é um termo relativo, o APM executa um código personalizado completo projetado especificamente para o controle de quadrocopter, onde um ROS personalizado pode ser desejável para evitar falhas, por outro lado, o Navio + roda em um kernel Linux e executa outro código que não o piloto automático, e ainda consegue não bater. A maioria dos ROSs é realmente um conjunto de funções sobre um sistema operacional existente, em vez de escrever um sistema operacional a partir do zero. Como em tudo, depende.
Isenção de responsabilidade: Esta resposta é de alguma forma uma reação ao post do Shahbaz, por isso tem um viés pró-ROS.
Não acho que o ROS seja obrigatório, mas é um ótimo ponto de partida e vale a pena investir. Tudo começou na Willow Garage, mas essa empresa desapareceu e o ROS ainda está vivo, usado e desenvolvido. A maior parte do ROS é totalmente de código aberto e também utilizável comercialmente, portanto não há como o ROS desaparecer se uma empresa não estiver mais interessada nele. É claro que a qualidade do código difere entre os módulos principais e as implementações de algoritmos de ponta que algum estudante de doutorado publicou com seu artigo.
O ROS está ganhando cada vez mais velocidade em ambientes industriais (eu ficaria surpreso se houver uma parte significativa da startup de robótica em todo o mundo que não use o ROS). Alguns algoritmos serão mantidos e desenvolvidos pelo consórcio ros-industrial e, se você der uma olhada nos membros, é uma boa aposta que o ROS se torne um padrão no setor:
http://rosindustrial.org/ric/current-members/
A maneira distribuída de usar o ROS ajuda muito a criar e manter novos pacotes, especialmente dentro das equipes. As definições de mensagem e ação ajudam muito na definição de interfaces, para que hardware e algoritmos possam ser trocados rapidamente. Também ajuda a integrar novos membros da equipe, pois um novo nó derrubará outros nós se travar (contanto que não consuma toda a RAM ..), portanto, é bastante seguro integrar nós parcialmente trabalhando no sistema em execução como seus efeito é limitado. A comunicação usa TCP, que é confiável e rápido (em uma máquina local), para que a passagem de mensagens seja muito rápida (várias centenas de Hz para um loop de controle é possível).
Tempo não real
Atualmente, o ROS não é em tempo real, pois a grande maioria dos algoritmos não precisa de tempo real. A detecção ou o planejamento não têm restrições em tempo real na maioria dos casos (quantas pessoas estão construindo carros de alta velocidade com direção automática)? Basta que o circuito de controle final seja executado em tempo real e, em muitos casos, isso possa ser feito diretamente no motor (para o qual a posição final é enviada, por exemplo, via CAN). O Tempo real, no entanto, é um dos principais objetivos do ROS2 ( https://github.com/ros2/ros2/wiki/Real-Time-Programming ), portanto, mesmo se você precisar disso no futuro para todo o sistema, o ROS já cobriu .
Se você realmente deseja executar coisas incorporadas, é claro que há uma conexão com o arduino, para que você possa escrever mensagens ROS diretamente no arduino, que serão enviadas via conexão serial.
Atualmente, executar o ROS no Windows é bastante trabalhoso, mas como o Windows está se aproximando do Linux (até mesmo começando a ter algo semelhante ao bash), é apenas uma questão de tempo até que seja possível. (Mas quem quer rodar um robô com o Windows, afinal?)
Interfaces de hardware e algoritmos:
Eu acho que esse é realmente um ponto forte para o ROS. Muitos robôs disponíveis comercialmente já vêm com uma interface ROS ou alguém já investiu algum tempo para implementar a interface. A maioria dos braços comerciais pode ser usada no MoveIt. Grande parte do trabalho para executar um aplicativo com um braço específico pode ser reutilizada com outro hardware.
Comunidade:
Outro ponto forte para o ROS. Novos algoritmos obtêm uma interface ROS muito rapidamente e muitas pessoas tiveram os mesmos problemas que você, assim você encontrará alguém para ajudá-lo.
http://download.ros.org/downloads/metrics/metrics-report-2016-07.pdf