Logo Xingxin on Bug

The "It Just Works" Hardware and OS Stack for Franka Robot

March 30, 2026
6 min read

You don’t realize how fragile your robotics stack is… until your robot stops motion with a “UDP receive: Timeout” or “communication constraints violation” error.

Not because your policy is bad.
Not because your math is wrong.
But because your computer isn’t “real-time enough”.

After nearly 6 months running Franka Research 3 with libfranka: C++ library for Franka Robotics research robots, building kernels from source(DON’T DO THIS), testing mini PCs, testing DIFFERENT mini PCs, and debugging Ethernet jitter, I’ve converged on a setup that just works.

This post is that setup. No fluff. No distro debates! Just:

  • What mini PC to buy?
  • Which Linux to use?
  • How to make it real-time?
  • How to avoid the silent killers (network + permissions)?

TL;DR (If You Just Want the Stack)

Hardware: Mini PC(Beelink SER8 or Beelink SER9 ) OS: Ubuntu 24.04 LTS (don’t overthink it) + Omakub Realtime: Ubuntu Pro → Realtime kernel (No manual built required)


Why This Matters?

Franka is not a “normal robot SDK”. It runs a 1kHz control loop over Ethernet.

That means:

  • You miss a few packets → robot halts
  • Your kernel schedules late → robot halts
  • Your NIC jitters → robot halts

And the worst part? Everything looks fine until it suddenly isn’t🤬. That’s why your hardware + OS choice matters more than your model architecture.

Step 1: The Mini PC

My Pick is Beelink SER series. I have set up one SER8 and one SER9 in our lab, and both work flawlessly. Why Beelink SER? Because I trust DHH as much as I trust the principles in his book Rework.

He also recommend

Note

I haven’t personally tested these alternatives, so I can’t guarantee their performance for real-time robotics.

Step 2:The OS

You will be tempted to use:

  • Arch (because you’re “advanced”)
  • Debian (because it’s “clean”)

Don’t. I’ve tried for you already. I love Omarchy(based on ArchLinux) as much as I love Moscato D’Asti. But the ecosystem outside of Ubuntu is incredibly frustrating for robotics. I remember the pain of trying to install a community-built robotics package via pacman. Thankfully, I gave up after two days.

Use Ubuntu 24.04!! Don’t worry about whether you should stick to Ubuntu 22.04 for ROS2 compatibility. There is no need. I use ROS2 Jazzy, Humble, and franka_ros2: ROS 2 integration for Franka research robots every day. As of right now(2026-03-30), I can guarantee everything works perfectly. Fun fact: major libraries like Isaac Sim and Isaac ROS don’t even recommend 22.04 anymore. Plus, I want to use Omakub, which requires 24.04 anyway!

In short, choose Ubuntu 24.04 because:

  • ROS2 loves it.
  • It easily supports the Ubuntu Pro real-time kernel.
  • It is fully compatible with Franka + ROS stacks.

Let’s get our hands dirty and install Ubuntu 24.04 right away.


(1) Prepare a USB Stick (16GB+) (2) Navigate to the official Ubuntu Desktop installation guide and follow the steps to install Ubuntu 24.04 LTS.

Tip

The official guide provides tons of screenshots to walk you through it. It’s very straightforward!

Step 3: Install Omakub

After you reboot into your new Ubuntu system, press Ctrl + Alt + T to open the terminal. Run the following command:

wget -qO- https://omakub.org/install | bash

You will be asked a few configuration questions. After installation, your desktop will look clean and minimal:

my-omakub-desktop.webp

Tip

Setting aesthetics aside, Omakub pre-configures a ton of essential developer tools for you, including docker, Visual Studio Code, neovim, zellij, Alacritty, and obsidian.

Step 4: Realtime Kernel

Now let’s set up the real-time kernel.

(1) Go to Ubuntu website and register for a free Ubuntu Pro account. Individual users can attach up to 5 machines to one license.

(2) Attach your subscription:

sudo pro attach

(3) Make sure the Pro client is up to date:

sudo apt update && sudo apt install ubuntu-pro-client

(4)Enable and install the real-time kernel automatically:

sudo pro enable realtime-kernel

🔗References: How to enable Real-time Ubuntu

Step 5 Realtime Permissions

Even with the RT kernel enabled, you’re not done. You must configure user permissions. Otherwise, you have a real-time system that you don’t actually have permission to use.

(1) Add your user to the real-time group:

sudo addgroup realtime
sudo usermod -a -G realtime $(whoami)

(2) Open the limits configuration file (using VS Code or your preferred editor):

# Open the file via vscode
sudo code /etc/security/limits.conf

(3) Add the following lines at the end of the file:

@realtime soft rtprio 99
@realtime soft priority 99
@realtime soft memlock 102400
@realtime hard rtprio 99
@realtime hard priority 99
@realtime hard memlock 102400

🔗References:

Step 6: Network: The Silent Killer

Here are a few miscellaneous settings I’ve found absolutely critical for stabilizing the 1kHz control frequency with the Franka robot.

(1) Force “Performance” mode by default:

sudo apt install cpufrequtils
sudo systemctl disable ondemand
sudo systemctl enable cpufrequtils
sudo sh -c 'echo "GOVERNOR=performance" > /etc/default/cpufrequtils'
sudo systemctl daemon-reload && sudo systemctl restart cpufrequtils

(2) Disable the firewall to prevent libfranka: UDP receive: Timeout errors:

sudo ufw disable

🔗References:

Step 7: Finally, Experiment with libfranka

(1) Install uv

curl -LsSf https://astral.sh/uv/install.sh | sh

(2) Copy and run the following script.

uv run --with numpy --with pylibfranka \
  https://raw.githubusercontent.com/frankarobotics/libfranka/refs/heads/main/pylibfranka/examples/print_robot_state.py \
  --ip 172.16.0.3

See also...