Using an RTOS for data acquisition?

During the latest thesis coaching session, Toto suggested using an RTOS to synchronize the external devices (and thus their clock signals).

First, I will give a short problem overview. Then, I will document my search for a fitting RTOS.

Problem

The thesis topic is in the field of visual-inertial SLAM. For this topic, I could only find one fitting dataset, and thus will need to make another dataset.

Earlier, I have written about synchronization problems between external devices with their own, independent clocks:

A short recap: when external devices record timestamped data, that timestamp is either:

  1. provided by the recording device itself, assigned before/after/during capturing the data;
  2. provided by the receiving device, assigned when the data is requested/received.

Both of these approaches have their pros and cons, but spoiler: multi-sensor setups mess things up royally.

Sensor-provided timestamp

Pro:

Con:

Host-timestamp

This will be mostly about timestamping at arrival of a package at the host, This is the model ROS uses for all the timestamped messages.

Pro:

Con:

RTOS

According to Wikipedia, „A real-time operating system (RTOS) is an operating system (OS) intended to serve real-time applications that process data as it comes in, typically without buffer delays.” Sounds like what might solve the above issues!

Requirements for the RTOS are given by the connected devices:

Also, proper documentation would be nice, for my first try with an RTOS ;)

A good starting point might be Wikipedia’s comparison of real-time operating systems. Some interesting highlights, in a pretty meaningless order (I’m CTRL+F’ing for Linux and x86 my way through the list):

RTOS Name Still active? Linux-compatible? Freely available? Comment
ARTOS by Locamation N      
BeRTOS N      
ChibiOS N      
EPOS N N Y  
FX-RTOS ? ? ? Russian site
Huawei LiteOS N N    
mipOS N      
OS2000 ? ? ? Russian site
Quest OS N     Website timed out
RTLinux N     Now owned by Wind River
TUD:OS N      
Deos Y N N  
Erika Enterprise RTOS v3 Y? N Y SSL-cert expired
HeartOS Y N N  
INTEGRITY Y N N  
INtime Y N N Can run simultaneous w Windows
KolibriOS Y N Y  
Kithara Y N N  
LithOS Y N N  
MenuetOS Y N Y  
µC/OS Y N N  
QNX Neutrino Y N    
OSE Y ? N „ENEA OSE enables real-time acceleration for Linux on embedded multicore devices”
OS9 Y N    
PikeOS Y N N  
POK kernel Y N Y  
RTEMS Y N Y  
On Time RTOS-32 Y N N Partial reimplementation of Windows kernel
RTX, RTX64 Y N N Windows extension
Ruff Y N Y IoT-oriented, program in Javascript
ThreadX Y N N  
Simulink Real-Time Y N N  
Zephyr Y ? Y Does not support UDOO x86, seems unfinished?
Embox Y Kinda? Partial? Y Minimal Linux-ish?
ChronOS Y Kernel patch Y  
RTAI Y Kernel patch Y  
LxWin Y Y N  
RedHawk Linux Y Y N „Ubuntu compatibility”
RIOT Y Y Y  
Wind River Linux Y Y Y  
Xenomai Y Y Y  

So the top interesting ones for now are

What now

  1. Contact RedHawk Linux
  2. Try out Wind River Linux
  3. See if RIOT will cooperate, maybe need this blog post?

Tried options:

Wind Linux

I have downloaded Wind River Linux 10.19.BASE from https://github.com/WindRiver-Labs/wrlinux-x, and generated an image:

mkdir udoo-os
cd udoo-os
git clone https://github.com/WindRiver-Labs/wrlinux-x
./wrlinux-x/setup.sh --machines intel-x86-64 --recipes openssh cmake make libgcc gcc glibc boost mesa mesa-gl libusb1 libxcursor libxi libxinerama libxrandr