The software components of autonomous vehicles have different requirements with regards to real-time, while these can be somewhat relaxed during R&D they'll need to be met for the final deployment.
Xenomai is a Free Software project in which engineers from a wide background collaborate to build a robust and resource-efficient real-time core for Linux© following the dual kernel approach, for applications with stringent latency requirements.
In this blog post we'll leverage AutoCore's PCU capabilities and add Xenomai on top to get a RT-capable board through Xenomai. For the full blog post please follow this link.
Xenomai provides capabilities to support applications with real time requirements. It can do so in 2 ways:
Relying on the real-time capabilities of the native Linux kernel through the Mercury core.
Supplementing Linux with a real-time co-kernel running side-by-side with it through the Cobalt co-kernel.
For the first option we need to have the Linux kernel patched with the Preempt-RT patch. This requirement is already satisfied with the default PCU image from Autocore’s Resource Download, which comes ready with Ubuntu 20.04 and ROS2 Foxy. It is just a matter of building the Xenomai libraries targeting the Mercury core and we are ready to run the cyclictest to get some results.
The second option is a bit more involved. We need to patch the kernel with the the Interrupt pipeline (I-pipe), as outlined in the Cobalt installation instructions, build the kernel and replace it on the PCU. Building the Xenomai libraries targetting Cobalt and running the cyclictest as before gives the next output.
Comparing the results of both approaches it can be observed that the Cobalt co-kernel achieves much better performance than that of Mercury, so we would need to go down the Cobalt route to get hard real-time performance for future applications.