¿Es posible ejecutar software en tiempo real?

60

Sé que ejecuta Linux y hay parches en tiempo real disponibles para Linux. ¿Funcionarían esos parches?

¿Alguien ha intentado otro sistema operativo en tiempo real en la Raspberry Pi?

La idea es usar el tablero para trabajos de regulación y control que son críticos en el tiempo.

Lars Pötter
fuente
2
Creo que la única razón única que me viene a la mente por qué no podría serlo si la solución de GPU cerrada se interpusiera. Siempre que pueda decidir ignorar la GPU mientras realiza sus tareas en tiempo real, creo que las extensiones en tiempo real podrían funcionar.
Chris Stratton
77
Todo el sistema raspberry pi no está abierto para que lo modifique; la pregunta sería si la parte que no es (la GPU) estaría dispuesta a mantenerse fuera del camino mientras ejecuta sus tareas en tiempo real, o si eso va a exigir inevitablemente ciclos de bus para acceder a la memoria RAM o incluso "atención" "desde el núcleo ARM de una manera que frustraría los objetivos de tiempos difíciles.
Chris Stratton
44
Aparentemente, RISCOS se adapta bastante bien a ciertas aplicaciones en tiempo real y su puerto Raspberry Pi está funcionando bien. * 8 ')
Mark Booth
44
RISCOS no es un sistema operativo en tiempo real (de acuerdo con su enlace de Wikipedia), entonces, ¿cómo podría ayudar?
Lars Pötter
44
El parche CONFIG_PREEMPT_RT se ha demostrado en varios procesadores ARM que ejecutan Linux. Puede haber algunos problemas de latencia, pero estos deben ser medibles en el orden de microsegundos.
Avance el

Respuestas:

16

Puede que le interese ejecutar Xenomai en RaspberryPi. Aquí puede encontrar un tutorial sobre cómo hacer esto. En pocas palabras, Xenomai es un proyecto que creó un kernel de Linux personalizado (proporcionan parches que deben aplicarse a las fuentes del kernel) que le permiten ejecutar otro kernel (núcleo de Xenomai) que es en tiempo real. Esto hace posible ejecutar aplicaciones Xenomai en una amplia gama de hardware sin la necesidad de escribir controladores para ellas (ya que Linux está trabajando en una amplia gama de hardware). Esto permite escribir aplicaciones de espacio de usuario RT utilizando un par de API RT diferentes disponibles.

Krzysztof Adamski
fuente
1
¿Cuál es la frecuencia máxima que puedo obtener con esta herramienta? Estoy interesado en controlar un motor de CC a una velocidad de redondeo de 1 kHz
Nicolás Arias
19

En el kernel de Linux, la habilitación PREEMPT_RTproporcionará latencias limitadas y API en tiempo real. Además de la configuración PREEMPT_RT, las políticas SCHED_FIFOy SCHED_RRtambién deben seleccionarse. Y las aplicaciones necesitan establecer parámetros en tiempo real llamando a las API apropiadas o utilizando utilidades apropiadas.

De acuerdo con un entrenamiento de electrones libres: Realtime in Embedded Linux , PREEMPT_RT fue un proyecto que brinda capacidad en tiempo real al kernel. Se ha plegado completamente en la secuencia del kernel 2.6.33 y 3.0. Vea el documento encontrará todo.

Básicamente ha habido dos enfoques para llevar la capacidad en tiempo real al kernel de Linux:

  • Modificar dentro del kernel, eso es PREEMPT_RTproyecto.
  • Ejecutar el lado-a-lado de la pieza en tiempo real con un núcleo normal y por debajo de la normal del kernel, ha habido tres generaciones: RTLinux, RTAI, y Xenomai. ( Aedoscomo se Aviomenciona a continuación?)

Editar:

minghua
fuente
2
Bienvenido a Raspberry Pi, buena respuesta! El uso RT PREEMPT patchde Ingo Molnar junto con el soporte High Resolution Timers(HRT) , permite que el núcleo logre capacidades en tiempo real . En la actualidad, su soporte alcanza los núcleos 3.4.11 , y la "buena noticia" es que el parche "se está reduciendo", por lo que parece que la mayor parte se está incluyendo en las fuentes principales del núcleo. Puede encontrar un excelente tutorial sobre cómo aplicarlo y usarlo aquí .
Avio
1
Ah, y no te olvides de citar Adeos entre las alternativas para proporcionar soporte en tiempo real en Linux.
Avio
2
Debo mencionar que hacer que PREEMPT_RT funcione con el núcleo de Raspberry Pi no es una cuestión sencilla, simplemente aplicar el parche produce un núcleo que no funciona. Además, hay muchos controladores nuevos en el kernel de Raspberry Pi, y estos controladores no se han probado con PREEMPT_RT, ni se han eliminado los bloqueos excesivamente largos. Esto es en gran medida un trabajo en progreso, eso es.
Nakedible
2
¿Alguna actualización en este? ¿Los controladores ahora son lo suficientemente estables como para usar este parche del kernel? Me encantaría un tutorial de trabajo para personas que aún no han compilado un núcleo.
fabb
@fabb: Incluso después de muchos años, seguirá habiendo controladores que tengan fallas técnicas contra el requisito de rt. Solo lo descubrirá ejecutándolo. Por cierto, recientemente veo algunos problemas de red que una vez aumentaron las prioridades de algunas aplicaciones de espacio de usuario, eso es inesperado. Aunque todo este tipo de situaciones son altamente específicas de la configuración y la aplicación.
minghua
6

Wyolum mas el aLaMode (lo llamo el Almond Pi) para caber encima del Pi de una manera apilable. Tiene un reloj en tiempo real, usa un aTiny 328, se alimenta de GPIO Real UART / power y se puede flashear de varias maneras. Es genial porque el Pi puede hacer lo que quieras, servidor web / base de datos, mientras que el Arduino se ejecuta en interrupción en tiempo real.

ingrese la descripción de la imagen aquí

Piotr Kula
fuente
1
Puede parecer un poco poco práctico tener 2 microcontroladores en funcionamiento, pero por otro lado esto asegura la operación en tiempo real si los otros enfoques no son lo suficientemente rápidos.
fabb
1
¿Alguna pista sobre cómo el RPi se comunicaría limpiamente con los otros µC sin ralentizar su ciclo de control?
fabb
1
Sí, pero el µC tendría que sondear el UART, supongo para no permitir que las interrupciones de UART pospongan la interrupción del temporizador del bucle de control. ¿Entonces sondearía el UART al comienzo del ciclo de control y me aseguraría de no leer muchos bytes para que no tarde demasiado? ¿O podrían los búferes UART desbordarse demasiado fácilmente de esa manera? ¿O la frecuencia del bucle de control sería mucho más alta que la velocidad UART que leer un byte de cada bucle, si está disponible, sería más que suficiente?
fabb
1
Buena sugerencia Por cierto, Raspberry Pi Alamode ya es un juego de palabras. El modo Ala es cuando pones helado en el pastel.
Dan
1
De Verdad ? Jeje. Me preguntaba qué significaba eso. Tiene sentido ahora :)
Piotr Kula
2

La mejor solución que he visto para esto es la X10i - Tablero de control en tiempo real para Raspberry Pi de Heber.

X10i es un controlador en tiempo real universal, potente y seguro que permite el control de múltiples entradas / salidas, a través de USB, desde cualquier sistema de PC. Heber ahora ofrece soporte en muchos lenguajes de programación para que sea aún más fácil para los programadores, inventores y desarrolladores conectarse con el mundo exterior desde su PC.

El enlace anterior proporciona documentación excelente y extensa e intentan mantener actualizados los controladores con la última versión de Debian para Pi.

Jivings
fuente
¿Entonces necesita un conector de cinta de Pi para esto? No puedo encontrar una foto de alquiler de la cosa, pero se ve muy voluminosa. Tiene muchos ejemplos, así que eso es bueno, supongo. +1
Piotr Kula
No puedo decir que lo haya usado, pero lo esperaría, aunque parece recordar al tipo que usa una interfaz USB en la demostración. Es bastante voluminoso, aunque sí.
Jivings
1

Aquí hay un artículo (traducido al francés por google translate) sobre Raspberry Pi que se ejecuta con Xenomai .

Pierre-Jean Coudert
fuente
55
Hola. Por lo general, desaconsejamos las respuestas que son simplemente enlaces en caso de que la página vinculada se mueva. ¿Podría resumir la información en esa página en su respuesta? Luego puede incluir el enlace como referencia. ¡Gracias!
Jivings
1

RODOS es otra opción más. Es un proyecto de código abierto desarrollado por el Centro Aeroespacial Alemán y el equipo y estudiantes de la Universidad Prof. Montenegro.

Está usando C ++, está completamente escrito de forma orientada a objetos y es compatible con ARM7, Atmel AVR, STM32 / Cortex-M3, Xilinx, Raspberry Pi :), ...

Actualmente se usa en TET por satélite y en máquinas LoTTo si no me equivoqué.

Por supuesto, preferiría ejecutarlo sobre Linux (lo que es posible) para tener lo mejor de ambos mundos, pero las preguntas en TIEMPO REAL permanecen, porque no estoy seguro de si es posible que Linux pueda proporcionar la API correcta.

Para obtener RODOS uno tiene que escribir un mensaje al Prof. Sergio Montenegro o al DLR (Centro Aeroespacial Alemán).

Radagast
fuente
1

Además de Linux, hay sistemas operativos en tiempo real. bastante popular entre los de código abierto es ChibiOS / RT:

es un RTOS (sistema operativo en tiempo real) completo, portátil, de código abierto, compacto y extremadamente rápido

Una breve introducción se encuentra en http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction . siendo diferente de Linux también te pueden gustar las lecturas de

Bueno, hay algunas opciones de diseño que deberían explicarse y contribuir a hacer de ChibiOS / RT un diseño peculiar. Nada realmente nuevo en sí mismo, pero el conjunto es interesante.

o no. si te gusta, experimentar en el pi podría valer la experiencia en https://github.com/steve-bate/ChibiOS-RPi :

Horquilla ChibiOS para experimentación con Raspberry PI.

el autor agrega una buena guía en

http://www.stevebate.net/chibios-rpi/GettingStarted.html

Personalmente, cuando se trata de rtos, para mí, Linux es como llevar equipos de cross-alpine para las necesidades del país. Es posible que no lo necesites. incluso un pi podría ser demasiado. echa un vistazo a http://forum.arduino.cc/index.php?topic=144715.0 para obtener aún menos peso :)

estar nervioso
fuente