Day: October 14, 2014

Conheça o NuttX, o sistema operacional de tempo real usado em Drones

Esta não é a primeira vez que falo sobre NuttX aqui, mas resolvi fazer um texto mais completo para ressaltar as características deste Real Time Operating System, ou simplemente RTOS (pronuncia-se “ar-tós”), e por que usa-lo em seus projetos.

Primeiramente precisamos entender o que é um RTOS ou sistema operacional de tempo real, na tradução livre para português. Um RTOS é um sistema operacional onde as garantias temporais são respeitadas, usando uma frase mais simples significa dizer que as tarefas do sistema operacional serão executadas em tempos bem definidos.

Portanto, caso uma tarefa tenha que ser executada a cada 5 milisegundos, ela será executada neste período e qualquer outra tarefa, que esteja usando a CPU no momento em que esta tarefa mais prioritária precisa ser executada, será preemptada (será interrompida e continuará sua execução futuramente do ponto onde parou).

Agora que você já tem uma ideia do que vem a ser um RTOS, deve estar se perguntando: o que o NuttX tem de diferente dos demais RTOS e por que ele é usado em Drones? A resposta esta na interface de programação dos programas (API) dos demais RTOS. Cada RTOS implementa sua própria forma de programação, então uma tarefa escrita para um RTOS não pode ser livremente usada em outro RTOS sem modificações. Exemplos de outros RTOS: FreeRTOS, uC/OS-II, Chibios/RT, etc.

A grande vantagem do NuttX é o fato de utilizar o padrão POSIX, assim você pode escrever um programa que rodará em Linux/*NIX e depois configura-lo para rodar no NuttX sem muito trabalho. E várias empresas já descobriram esta vantagem e estão começando a usar o NuttX ou a dar suporte a ele em seus processadores/microcontroladores, como é o caso da Atmel, a empresa que fabrica os microcontroladores usados nas placas Arduino: http://www.atmel.com/about/news/release.aspx?reference=tcm:26-63482

Interessante, mas como posso começar a testar o NuttX? A melhor forma é ter uma placa suportada pelo NuttX e começar compilando para rodar na sua placa. Mas caso você não tenha uma placa embarcada, não tem problema, você pode rodá-lo emulado num computador x86 ou poderá usar o QEMU para ver o funcionamento dele numa placa ARM: http://www.zilogic.com/blog/tutorial-nuttx.html

Quais placas suportam o NuttX? Atualmente mais de 90 placas são suportadas, dentre elas: Freedom Board KL25Z da Freescale, Stellaris LM4F120 LaunchPad da Texas Instruments, STM32F4Discovery da ST, Teensy Board da PJRC, etc. Infelizmente não existe um porte para Raspberry Pi, pois segundo Gregory Nutt (o criador do NuttX) esta placa é bem suportada pelo Linux e o NuttX não seria tão vantajoso neste caso.

É importante entender que o NuttX é voltado para microcontroladores de baixo a médio poder de processamento, mas não é ideal para microcontralores com poucos recursos (<8KB RAM e/ou <16KB Flash). Neste caso RTOS como o FreeRTOS ou Chibios seriam uma melhor alternativa.

Outro detalhe importante: o Linux também é usando em drones. Por exemplo o AR.Drone da Parrot utiliza Linux internamente e recentemente a Linux Foundation está trabalhando num projeto para avançar o desenvolvimento do Linux em Drone: https://www.dronecode.org

Apesar disso é provável que o NuttX continuará a ser usado em Drones ao lado do Linux que exige um processador com mais poder de processamento e consequentemente um pouco mais caro.

Nota: O NuttX é usado no projeto PX4/Pixhawk Autopilot e no VRBrain. O Pixhawk é o hardware vendido pela 3DRobotics para Drone inteligentes.