Computer Setup#

WMX ROS2 needs a real-time Linux kernel, ROS 2, and the WMX Runtime on the target computer before you install the ROS2 packages. The target can be a standard desktop (x86), an Intel IPC such as the Advantech UNO-258 (x86), or an Advantech MIC edge platform (NVIDIA Jetson, arm64). This page covers installing the operating system, getting a PREEMPT_RT kernel in place, verifying latency, installing ROS 2, and configuring the WMX Runtime.

Supported targets#

Target

Arch

Ubuntu

RT kernel

OS install

Desktop

x86_64

22.04 / 24.04

PREEMPT_RT

Standard installer

Intel IPC (Advantech UNO-258)

x86_64

22.04 / 24.04

PREEMPT_RT

Standard installer

Advantech MIC-713

arm64

22.04

5.15.148-rt

Flash (Jetson)

Advantech MIC-733ao

arm64

22.04

5.15.148-rt

Flash (Jetson)

Advantech MIC-743

arm64

24.04 (JetPack 7.0)

6.8.12-rt

Flash (Jetson)

Install the operating system#

Desktop / Intel IPC (Advantech UNO-258, x86): install Ubuntu 22.04 or 24.04 the usual way with the standard Ubuntu installer (including its real-time kernel).

Advantech MIC (Jetson, arm64): the MIC boards ship without a real-time kernel, so you build and flash a prebuilt PREEMPT_RT image using the steps below.

1. Connect the IPC (Advantech MIC)#

On a desktop machine, prepare the board’s setup bundle and put the board into recovery mode. Pick your target:

Not applicable — x86 targets do not flash a kernel. Install Ubuntu the usual way (including its real-time kernel), then continue to the verification step:

Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:

mkdir ~/mic713_ubuntu2204_setup
cd mic713_ubuntu2204_setup

Enter recovery mode [IPC] — push and hold REC, push RST and release, wait ~8 s, then release REC. Confirm the desktop sees it:

lsusb   # expect a line containing: NVIDIA Corp. APX

Note

Install an additional M.2 NVMe SSD in the board before starting due to limited storage capacity.

Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:

mkdir ~/mic733_ubuntu2204_setup
cd mic733_ubuntu2204_setup

Enter recovery mode [IPC] — with power off, hold REC (SW_REC1); apply power and press RST (SW_RST1) once while holding SW_REC1 for 5–10 s, then release. Use a USB type-A to Micro-USB cable. Confirm:

lsusb   # expect a line containing: NVIDIA Corp. APX

Prepare the setup files [Desktop] — make a workspace and place the board’s setup bundle (kernel-build/flash scripts) inside it:

mkdir ~/mic743_ubuntu2404_setup
cd mic743_ubuntu2404_setup

Enter recovery mode [IPC] — push and hold REC, push RST and release, wait ~8 s, then release REC. Confirm the desktop sees it:

lsusb   # expect a line containing: NVIDIA Corp. APX

2. Build the RT kernel [Desktop]#

Make the bundle scripts executable and build the kernel. Pick your target:

Not applicable — x86 targets use the kernel from the standard Ubuntu install. Continue to the verification step.

Download the setup material (including the kernel-build/flash .sh scripts) into the workspace created in step 1:

Then make the scripts executable and build the kernel:

sudo chmod +x *.sh
./code_MIC713.sh
./build_eval_713.sh

In the kernel menuconfig that opens, set:

  • General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)

  • General setup → Preemption Model: Fully Preemptible Kernel (RT)

  • Kernel Features → Timer frequency: 1000 HZ

  • Device Drivers → Network device support → Ethernet driver support → Realtek devices → <M> Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)

  • then save and exit

Download the setup material (including the kernel-build/flash .sh scripts) into the workspace created in step 1:

Then make the scripts executable and build the kernel:

sudo chmod +x *.sh
./code_MIC733.sh
./build_eval_733.sh

In the kernel menuconfig that opens, set:

  • General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)

  • General setup → Preemption Model: Fully Preemptible Kernel (RT)

  • Kernel Features → Timer frequency: 1000 HZ

  • Device Drivers → Network device support → Ethernet driver support → Realtek devices → <M> Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)

  • then save and exit

Download the setup material (including the kernel-build/flash .sh scripts) into the workspace created in step 1:

Then make the scripts executable and build the kernel:

sudo chmod +x *.sh
./code_MIC743.sh
./build_eval_743.sh

In the kernel menuconfig that opens, set:

  • General setup → Timer subsystem → Timer tick handling → Full dynticks system (tickless)

  • General setup → Configure standard kernel features (expert users)

  • General setup → Preemption Model: Fully Preemptible Kernel (RT)

  • Kernel Features → Timer frequency: 1000 HZ

  • PCI support

  • Device Drivers → Network device support → Ethernet driver support → Realtek devices → <M> Realtek 8169/8168/8101/8125 ethernet support (toggle with the space key)

  • then save and exit

3. Flash the RT kernel to the IPC [Desktop]#

Not applicable — x86 targets are not flashed. Continue to the verification step.

./flash_713.sh
./flash_733.sh
./flash_743.sh

Then remove the build artifacts:

sudo rm -rf eval-rt-713
sudo rm -rf arm64--glibc--stable-2022.08-1
sudo rm -rf eval-rt-743

4. Verify the real-time install [IPC]#

Confirm the RT kernel is running, then build and run cyclictest:

uname -r                  # MIC-713/733ao: 5.15.148-rt   MIC-743: 6.8.12-rt
cat /sys/kernel/realtime  # 1
lsb_release -a            # Ubuntu 22.04 or 24.04

sudo apt update && sudo apt install -y build-essential git   # MIC-743: also libnuma-dev
git clone https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
make -j
sudo make install

sudo taskset -c 2 cyclictest -D 60s -i 1000 p99 -m -q -h 1000 --latency=0 --priority=99 --thread --histfile=hist_cpu2.txt

Tip

For a soak test, run stress across all cores in one terminal and sudo cyclictest -t -p 95 in another for several hours, watching the max latency stay bounded.

5. Set the hostname [IPC]#

sudo hostnamectl set-hostname <new-host-name>
sudo reboot

6. Jetson clocks and power [IPC]#

Lock the Jetson to maximum performance:

sudo /usr/bin/jetson_clocks
sudo /usr/sbin/nvpmodel -m 0

7. NIC driver config [IPC]#

Find the EtherCAT NIC’s PCI address and record it as Location in /opt/wmx3/platform/ethercat/PrtTcpip.ini:

lspci   # e.g. x86: 02:00.0 Ethernet controller   arm64: 0008:01:00.0 Ethernet controller
  • x86 example: Location=2;1;0

  • arm64 example: Location=8;1;0;0

8. Modify the NIC driver [IPC]#

WMX needs a patched Realtek NIC driver for EtherCAT. Use one of:

  • Option 1 — use the prebuilt module(s) from the setup material and make them executable:

    sudo chmod 755 wmx_r8168.ko          # MIC-733ao also: wmx_igb.ko
    
  • Option 2 — rebuild it from the MOVENSYS NIC-driver source with build_nic.sh.

9. Isolate the core for WMX [IPC]#

Isolate CPU cores for the WMX real-time threads using the Linux core-isolation method. On MIC-743, run the provided linux_scripts.zip scripts, using the same Location configured in /opt/wmx3/platform/ethercat/PrtTcpip.ini.

10. Install ROS 2 [IPC]#

Install ROS 2 on the target, matching the Ubuntu version — Jazzy on Ubuntu 24.04, Humble on Ubuntu 22.04. Follow the official installation guide, then add the CycloneDDS RMW that WMX ROS2 uses:

Follow the ROS 2 Jazzy installation guide, then: