Vorrei sconsigliare il multi-threading, specialmente per un'applicazione in tempo reale. Le domande principali sono come utilizzare i core, se si tratta di un processore multi-core, e come gestire più processi (come già notato).
In primo luogo, consiglierei di inserire l'elaborazione del sensore nel proprio processo in tutti i casi per ciascun sensore. Ad esempio, se hai un imager e un IMU, ognuno dovrebbe avere il proprio processo. Qualsiasi codice specializzato ad alta velocità per l'elaborazione del flusso di dati del sensore dovrebbe essere nel gestore del sensore. In generale, se il sensore è critico, come l'IMU, dovrebbe avere il proprio core dedicato. I processi non critici dovrebbero condividere tutti i core rimasti. Ovviamente hai bisogno di un RTOS per farlo (consigliato) o di una versione appositamente configurata di Linux.
Oltre all'elaborazione del sensore, tutto il resto dovrebbe solitamente essere nello stesso processo monolitico, a meno che non si abbia un bisogno specifico e specifico di farlo in un processo separato. Questo processo monolitico deve essere progettato in modo che assegni quantità adeguate di tempo di elaborazione alle diverse attività e dovrebbe avere un gestore di eccezioni di primo livello che garantisce che qualsiasi problema verrà risolto in modo utile.
È anche una buona idea avere due monitor a battito cardiaco. Questi processi controllano gli altri processi e li riavviano se si sono arrestati in modo anomalo. Ce ne sono due perché se uno muore, è necessario l'altro per riavviarlo.
È possibile comunicare tra processi ad alta velocità utilizzando la memoria condivisa. Fare questo è in genere molto più veloce e più semplice che fare confusione con IPC o qualsiasi comunicazione moderata dal sistema operativo.