# Robot operating system

Robot Operating System (ROS, sistema operacional de robôs) é uma coleção de frameworks de software para desenvolvimento de robôs, que fornece a funcionalidade de um sistema operacional em um cluster de computadores heterogêneo. ROS fornece serviços padrões de sistema operacional, tais como abstração de hardware, controle de dispositivos de baixo nível, a implementação de funcionalidades comumente usadas, passagem de mensagens entre processos e gerenciamento de pacotes. Conjuntos de processos de ROS em execução são representados em uma arquitetura de grafos onde o processamento se realiza em nós que podem receber e enviar mensagens como sensores multiplex, controle, estado, planejamento, atuador e outras. Apesar da importância da reatividade e baixa latência no controle de robôs, ROS, em si, não é um sistema operacional de tempo real, embora seja possível integrar ROS com código em tempo real. A falta de suporte para sistemas em tempo real está sendo abordada no desenvolvimento de ROS 2.0.
Software no ecossistema do ROS pode ser dividido em três grupos:
* ferramentas independentes de linguagem e plataforma usadas para a construção e distribuição de software baseada em ROS;
* Implementações de bibliotecas clientes de ROS como roscpp, rospy e roslisp;
* pacotes contendo código relacionada a aplicações que usam uma ou mais bibliotecas clientes de ROS.
Tanto as ferramentas independentes da língua quanto as principais bibliotecas clientes (C++, Python e Lisp) são lançadas sob os termos da licença BSD, e como tal são softwares de fonte aberta e livre para uso comercial e de pesquisa. A maioria dos outros pacotes estão licenciados sob uma variedade de licenças de código aberto. Estes outros pacotes implementam funcionalidades e aplicações, tais como drivers de hardware, modelos de robôs, tipos de dados, planejamento, percepção, mapeamento e localização simultâneos, ferramentas de simulação e outros algoritmos comumente usados.
As principais bibliotecas clientes de ROS (C++, Python, Lisp) são voltados para um sistema do tipo Unix, devido, principalmente, a sua dependência de grandes coleções de software de código aberto. Para estas bibliotecas clientes, o Ubuntu Linux é listado como "suportado", enquanto outras variantes como o Fedora Linux, Mac OS X e Microsoft Windows são designados "experimentais" e são apoiados pela comunidade. A biblioteca cliente Java ROS nativa, rosjava, no entanto, não compartilha dessas limitações e permitiu software baseado em ROS a ser escrito para o sistema operacional Android. A rosjava também permitiu que ROS fosse integrado em uma caixa de ferramentas MATLAB oficialmente suportada, que pode ser usada em Linux, Mac OS X e Microsoft Windows. A biblioteca cliente em JavaScript, roslibjs, também foi desenvolvida e permite a integração de software em um sistema de ROS através de qualquer navegador web padrão.

## História
### O começo em Stanford (2007 e anteriormente)

Pouco antes de 2007, as primeiras partes do que acabaria se tornando ROS estavam sendo reunidas na Stanford University. Eric Berger e Keenan Wyrobek, doutorandos que trabalhavam no laboratório de robótica do Prof. Kenneth Sailsbury em Stanford, estavam liderando o Programa de Robótica Pessoal. Enquanto trabalhavam em robôs para realizar tarefas de manipulação em ambientes humanos, os dois alunos notaram que muitos de seus colegas tinham seu progresso atrasado pela natureza diversa da robótica: um desenvolvedor de software poderia não ter o conhecimento de hardware necessário, alguém que trabalha no estado-da-arte em planejamemento de rotas poderia não ter conhecimentos em visão computacional, por exemplo. Para remediar essa situação , os dois estudantes se propuseram a fazer um sistema base, que proveria um ponto de partida para todos na academia trabalharem em cima. Nas palavras de Eric Berger, "algo que não fosse ruim, em todos os diferentes campos".
Nos primeiros passos em direção a esse sistema de unificação, os dois construíram o protótipo de hardware PR1 e começar a desenvolver software para ele, a partir das melhores práticas de outras plataformas de software de código aberto para robótica, particularmente "switchyard", um sistema que Morgan Quigley, um outro estudante de doutorado de Stanford trabalhava, em colaboração com o STAIR (STanford Artificial Intelligence Robot) no Laboratório de Inteligência Artificial de Stanford. Um financiamento inicial de 50.000 dólares foi provido por Joanna Hoffman e Alain Rossman, que apoiavam o desenvolvimento do PR1. Enquanto procuravam por financiamento para continuar o desenvolvimento, Eric Berger e Keenan Wyrobek conheceram Scott Hassa, o fundador da Willow Garage, uma incubadora de tecnologia que estava trabalhando no projeto de uma SUV autônoma e um barco autônomo movido a energia solar. Hassan compartilhava a mesma visão que Berger e Wyrobek em criar um "Linux para a robótica" e os convidou para juntarem-se a ele e trabalharem na Willow Garage. A Willow Garage começou suas atividades em janeiro de 2007 e a primeira versão do código fonte ROS foi adicionada ao SourceForge em novembro de 2007.

### Willow Garage

A Willow Garage começou a desenvolver o robô PR2 como uma continuação do PR1 e utilizando ROS como seu software. Grupos de mais de vinte instituições fizeram contribuições tanto ao software principal ROS quanto com a criação de um número crescente de pacotes que trabalhavam com ROS para formar um ecossistema de software maior. O fato de pessoas fora da Willow estarem contribuindo para ROS (particularmente pessoas do projeto STAIR) significava que, desde o começo, ROS era uma plataforma multi-robôs. Embora a Willow Garage originalmente tivesse outros projetos em andamento, estes foram descartados para favorecer o Programa de Robótica Pessoal: focaram-se na produção do PR2 como plataforma de pesquisa para a academia e ROS como software de código aberto de robótica que serviria de base para a pesquisa acadêmica e o aparecimento de startups de tecnologia, assim como o LAMP fez para startups de Web.
Em dezembro de 2008, a Willow Garage alcançou o primeiro de seus três marcos de progresso internos: navegação ininterrupta do PR2 por um período de dois dias, percorrendo uma distância de π quilômetros. Logo depois, uma versão inicial do ROS (0.4 Mango Tango) foi lançada, seguida pela primeira documentação do RVIZ e o primeiro artigo sobre o ROS. Em meados de 2009, foi alcançado o segundo marco interno: fazer com que o PR2 navegasse no escritório, abrisse portas e conectasse a si mesmo. Isso foi seguido em agosto pelo início do site ROS.org. Os primeiros tutoriais sobre o ROS foram publicados em dezembro, preparando-se para o lançamento do ROS 1.0, em janeiro de 2010. Esse foi o terceiro marco: produzir muita documentação e tutoriais para cobrir a gigante capacidade do que os engenheiros da Willow Garage desenvolveram nos últimos 3 anos.
Depois disso, a Willow Garage alcançou um de seus objetivos mais antigos: doar 10 robôs PR2 para instituições acadêmicas dignas. Esse era um objetivo dos fundadores, já que eles achavam que o PR2 poderia iniciar a pesquisa em robótica em todo o mundo. Eles acabaram concedendo onze PR2s a diferentes instituições, incluindo Universidade de Friburgo (Alemanha), Bosch, Georgia Tech, KU Leuven (Bélgica), MIT, Stanford, TU Munique (Alemanha), UC Berkeley, UPenn, USC e Universidade de Tóquio (Japão). Isso, combinado com o bem-sucedido programa de estágio da Willow Garage (realizado de 2008 a 2010 por Melonee Wise), ajudou a espalhar a notícia sobre os ROS pelo mundo da robótica. O primeiro lançamento oficial de distribuição de ROS (ROS Box Turtle), foi lançado em 2 de março de 2010. Essa foi a primeira vez em que ROS foi oficialmente distribuído com um conjunto de pacotes com versão para uso público. Esses desenvolvimentos possibilitaram a utilização de ROS em drones, carros autônomos e à adaptação de ROS para Lego Mindstorms. Com o programa PR2 Beta em andamento, o robô PR2 foi lançado oficialmente para compra em 9 de setembro de 2010. Em 2011, foi lançado o ROS Answers, um fórum em que usuários tiram dúvidas e se ajudam.

## Projetos desenvolvidos

* PR2
* PR1
* HERB
* STAIR I and II
* The robotics lab of the Katholieke Universiteit Leuven, Belgium
* Nao
* SummitXL
* rosbridge protocol and server