From Research Code to Running Systems Cross-Platform Robotics and ML Workflows Tobias Fischer Peter Corke From Research Code to Running Systems Robotics papers increasingly depend on full software stacks Bucket list: ◦ ROS, Python, C++, CUDA, simulators, ML tooling, and data ◦ Cross-platform robotics and ML workflows (Linux + Windows + MacOS + ...) ◦ Support for many programming languages: Python, C++, Rust, R, ... Tobias Fischer & Peter Corke: From Research Code to Running Systems 2 / 64
From Research Code to Running Systems Robotics papers increasingly depend on full software stacks Bucket list: ◦ ROS, Python, C++, CUDA, simulators, ML tooling, and data ◦ Cross-platform robotics and ML workflows (Linux + Windows + MacOS + ...) ◦ Support for many programming languages: Python, C++, Rust, R, ... Today: make those systems runnable, repeatable, and portable.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 3 / 64
The Problem: Research Code Becomes Infrastructure ▓▓▓ Hands up if you have lost time to... • a missing dependency • a mystery dataset or model download • "works on my machine" Tobias Fischer & Peter Corke: From Research Code to Running Systems 4 / 64
The Problem: Research Code Becomes Infrastructure ▓▓▓ Hands up if you have lost time to... • a missing dependency • a mystery dataset or model download • "works on my machine" ▓▓▓ The thesis Tooling is part of how research is shared, reused, and extended. Developing and sharing
should be a single workflow, not separated. Tobias Fischer & Peter Corke: From Research Code to Running Systems 5 / 64
The Reality of Many Research Repositories git clone https://github.com/some_repo/project
# Ubuntu 20.04 only
sudo apt install ...
pip install torch==1.12
pip install some_package
# Compile custom OpenCV
# Download model manually:
https://drive.google.com/...
# Tested on my machine :)
Tobias Fischer & Peter Corke: From Research Code to Running Systems 6 / 64
The Reality of Many Research Repositories git clone https://github.com/some_repo/project
# Ubuntu 20.04 only
sudo apt install ...
pip install torch==1.12
pip install some_package
# Compile custom OpenCV
# Download model manually:
https://drive.google.com/...
# Tested on my machine :)
██ What if the README had one command? Tobias Fischer & Peter Corke: From Research Code to Running Systems 7 / 64
This Talk Is Executable The slides are also the demo environment. ▓▓▓ During the talk • arrows: navigate • control + e: run code
• control + r: reset slide
• ?: show keybindings
• esc or control + c: exit
▓▓▓ Running it yourself Use a terminal and raw git clone (avoid GitHub Web or GitHub Desktop):
git clone https://github.com/petercorke/
ICRA2026-modern-software-tools.git
cd ICRA2026-modern-software-tools
pixi run presentation
Tobias Fischer & Peter Corke: From Research Code to Running Systems 8 / 64
This Talk Is Executable The slides are also the demo environment. ▓▓▓ During the talk • arrows: navigate • control + e: run code
• control + r: reset slide
• ?: show keybindings
• esc or control + c: exit
▓▓▓ Running it yourself Use a terminal and raw git clone (avoid GitHub Web or GitHub Desktop):
git clone https://github.com/petercorke/
ICRA2026-modern-software-tools.git
cd ICRA2026-modern-software-tools
pixi run presentation
Only run executable snippets from presentations you trust! Tobias Fischer & Peter Corke: From Research Code to Running Systems 9 / 64
Pixi: From Instructions to Artifacts ⚡ Pixi is a fast project manager built on the conda-forge ecosystem. Think: conda packages, modern project workflow. Tobias Fischer & Peter Corke: From Research Code to Running Systems 10 / 64
Pixi: From Instructions to Artifacts ⚡ Pixi is a fast project manager built on the conda-forge ecosystem. Think: conda packages, modern project workflow. ▓▓▓ The old way: Instructions ▓▓▓ Now: shared artifacts
• README.md • pixi.toml
• shell scripts • pixi.lock
• oral tradition • pixi run <task>
• "ask the previous student" • CI-friendly commands
▍ The shift is from instructions to runnable artifacts.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 11 / 64
██ Start a Project pixi init
——————————————————— [finished] ———————————————————
✔ Created /home/runner/work/ICRA2026-modern-software-tools/ICRA2026-modern-softwar e-tools/tobi/pixi.toml Tobias Fischer & Peter Corke: From Research Code to Running Systems 12 / 64
██ Start a Project pixi init
——————————————————— [finished] ———————————————————
✔ Created /home/runner/work/ICRA2026-modern-software-tools/ICRA2026-modern-softwar e-tools/tobi/pixi.toml ██ Add PyTorch pixi add python pytorch torchvision
——————————————————— [finished] ———————————————————
✔ Added python >=3.14.5,<3.15 ✔ Added pytorch >=2.11.0,<3 ✔ Added torchvision >=0.26.0,<0.27 Tobias Fischer & Peter Corke: From Research Code to Running Systems 13 / 64
Fast Environments Change Behavior ⚡ If changing environments takes minutes, people avoid changing environments.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 14 / 64
Fast Environments Change Behavior ⚡ If changing environments takes minutes, people avoid changing environments.
If it takes seconds, environments become part of iteration.
██ Environment Solve Time microenv
▓▓▓▓ 🟩 Pixi 0.07s
▒▒▒▒▒▒▒▒▒▒ 🟦 Micromamba 2.54s
████████████████ 🟧 conda 4.08s
stressenv
▓▓▓▓ 🟩 Pixi 4.54s
▒▒▒▒▒▒▒▒▒▒ 🟦 Micromamba 12.58s
████████████████████████ 🟧 conda 29.84s
Tobias Fischer & Peter Corke: From Research Code to Running Systems 15 / 64
██ train.py import torch
import torch.nn.functional as F
print("PyTorch version:", torch.__version__)
print("CUDA available:", torch.cuda.is_available())
print("MPS available:", torch.backends.mps.is_available())
y = torch.tensor([1.0]); x = torch.tensor([1.1]) # target and input
w = torch.tensor([2.2], requires_grad=True)
b = torch.tensor([0.0], requires_grad=True)
z = x * w + b; a = torch.sigmoid(z)
loss = F.binary_cross_entropy(a, y)
loss.backward()
print("loss:", loss.item())
—————————————————————————————— [finished] ———————————————————————————————
PyTorch version: 2.11.0 CUDA available: False MPS available: False loss: 0.0851878821849823 Tobias Fischer & Peter Corke: From Research Code to Running Systems 16 / 64
Tasks Turn Commands into Workflows Hands up: who has a command in their lab that nobody wants to type from memory? Tobias Fischer & Peter Corke: From Research Code to Running Systems 17 / 64
Tasks Turn Commands into Workflows Hands up: who has a command in their lab that nobody wants to type from memory? ▓▓▓ Define the workflow pixi task add start "python train.py"
--depends-on download-mnist
——————————————————— [finished] ————————————————————
✔ Added task `start`: python train.py, depends-on = 'download-mnist' Tobias Fischer & Peter Corke: From Research Code to Running Systems 18 / 64
Tasks Turn Commands into Workflows Hands up: who has a command in their lab that nobody wants to type from memory? ▓▓▓ Define the workflow pixi task add start "python train.py"
--depends-on download-mnist
——————————————————— [finished] ————————————————————
✔ Added task `start`: python train.py, depends-on = 'download-mnist' [tasks]
...
download-mnist = {
cmd = "python -c
'torchvision.datasets.MNIST("data",
download=True)'",
outputs = ["data/MNIST"]
}
Tobias Fischer & Peter Corke: From Research Code to Running Systems 19 / 64
Tasks Turn Commands into Workflows Hands up: who has a command in their lab that nobody wants to type from memory? ▓▓▓ Define the workflow ▓▓▓ Run it
pixi task add start "python train.py" pixi run start
--depends-on download-mnist
—————————— [finished] ——————————
——————————————————— [finished] ————————————————————
✨ Pixi task
✔ Added task `start`: python train.py, (download-mnist): python -c
depends-on = 'download-mnist' 'from torchvision.datasets
import MNIST; MNIST("data",
download=True)' 2>/dev/null [tasks] ✨ Pixi task (start): python
... train.py
download-mnist = { PyTorch version: 2.11.0
cmd = "python -c
'torchvision.datasets.MNIST("data",
download=True)'",
outputs = ["data/MNIST"]
}
Tobias Fischer & Peter Corke: From Research Code to Running Systems 20 / 64
Tasks Turn Commands into Workflows Hands up: who has a command in their lab that nobody wants to type from memory? ▓▓▓ Define the workflow ▓▓▓ Run it
pixi task add start "python train.py" pixi run start
--depends-on download-mnist
—————————— [finished] ——————————
——————————————————— [finished] ————————————————————
✨ Pixi task
✔ Added task `start`: python train.py, (download-mnist): python -c
depends-on = 'download-mnist' 'from torchvision.datasets
import MNIST; MNIST("data",
download=True)' 2>/dev/null [tasks] ✨ Pixi task (start): python
... train.py
download-mnist = { PyTorch version: 2.11.0
cmd = "python -c
'torchvision.datasets.MNIST("data",
download=True)'", ▓▓▓ Run it again
outputs = ["data/MNIST"]
}
pixi run start
—————————— [finished] ——————————
Tobias Fischer & Peter Corke: From Research Code to Running Systems 21 / 64
██ Mixing Ecosystems Modern robotics often needs: ▓▓▓ Robotics stack • ROS • OpenCV • CUDA • native libraries Tobias Fischer & Peter Corke: From Research Code to Running Systems 22 / 64
██ Mixing Ecosystems Modern robotics often needs: ▓▓▓ Robotics stack ▓▓▓ ML stack
• ROS • PyTorch
• OpenCV • Transformers
• CUDA • experiment tools
• native libraries • Python packages
Tobias Fischer & Peter Corke: From Research Code to Running Systems 23 / 64
██ Mixing Ecosystems Modern robotics often needs: ▓▓▓ Robotics stack ▓▓▓ ML stack
• ROS • PyTorch
• OpenCV • Transformers
• CUDA • experiment tools
• native libraries • Python packages
██ Conda-forge + PyPI Together [dependencies]
python = "3.11"
pytorch = "*"
[pypi-dependencies]
transformers = "*"
Tobias Fischer & Peter Corke: From Research Code to Running Systems 24 / 64
██ Mixing Ecosystems Modern robotics often needs: ▓▓▓ Robotics stack ▓▓▓ ML stack
• ROS • PyTorch
• OpenCV • Transformers
• CUDA • experiment tools
• native libraries • Python packages
██ Conda-forge + PyPI Together [dependencies]
python = "3.11"
pytorch = "*"
[pypi-dependencies]
transformers = "*"
██ No boundary between ecosystems ✨ Tobias Fischer & Peter Corke: From Research Code to Running Systems 25 / 64
Robotics Meets ML: RoboStack Hands up if you have ever installed a VM or old Ubuntu just to get ROS running. Tobias Fischer & Peter Corke: From Research Code to Running Systems 26 / 64
Robotics Meets ML: RoboStack Hands up if you have ever installed a VM or old Ubuntu just to get ROS running. RoboStack enables ROS on: • Linux • macOS • Windows through the conda-forge ecosystem. Tobias Fischer & Peter Corke: From Research Code to Running Systems 27 / 64
Robotics Meets ML: RoboStack Hands up if you have ever installed a VM or old Ubuntu just to get ROS running. RoboStack enables ROS on: • Linux • macOS • Windows through the conda-forge ecosystem. pixi workspace channel add https://prefix.dev/robostack-rolling
pixi add ros-rolling-desktop
———————————————————————————— [finished] ————————————————————————————
✔ Added https://prefix.dev/robostack-rolling WARN Skipped running the post-link scripts because `run-post-link-scripts` = `false` - bin/.librsvg-pre-unlink.sh To enable them, run: pixi config set --local run-post-link-scripts insecure More info: https://pixi.sh/latest/reference/pixi_configuration/#run-post-link-scrip ts Tobias Fischer & Peter Corke: From Research Code to Running Systems 28 / 64
ROS Desktop App from a Locked Environment pixi run ros2 run turtlesim turtlesim_node
Tobias Fischer & Peter Corke: From Research Code to Running Systems 29 / 64
ROS Desktop App from a Locked Environment pixi run ros2 run turtlesim turtlesim_node
pixi run ros2 topic pub /turtle1/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 2.0}, angular: {z: 1.8}}"
Tobias Fischer & Peter Corke: From Research Code to Running Systems 30 / 64
ROS Desktop App from a Locked Environment pixi run ros2 run turtlesim turtlesim_node
pixi run ros2 topic pub /turtle1/cmd_vel \
geometry_msgs/msg/Twist \
"{linear: {x: 2.0}, angular: {z: 1.8}}"
Start with a tiny demo. Then scale the same idea to real stacks. Tobias Fischer & Peter Corke: From Research Code to Running Systems 31 / 64
██ One Environment ROS + PyTorch + OpenCV
+ Transformers + custom research code
Tobias Fischer & Peter Corke: From Research Code to Running Systems 32 / 64
██ One Environment ROS + PyTorch + OpenCV
+ Transformers + custom research code
██ One lockfile.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 33 / 64
██ One Environment ROS + PyTorch + OpenCV
+ Transformers + custom research code
██ One lockfile.
██ One Machine, Multiple ROS Distros # Add another ROS distro
pixi workspace channel add https://prefix.dev/robostack-humble
pixi add --feature humble ros-humble-desktop
# Run different environments
pixi run -e humble ros2 run turtlesim turtlesim_node
pixi run -e rolling ros2 run rviz2 rviz2
# We still support ROS1 Noetic :)
Tobias Fischer & Peter Corke: From Research Code to Running Systems 34 / 64
Build Your Own ROS / C++ / Python Packages ▓▓▓ Create a ROS package pixi run ros2 pkg create \
--build-type ament_cmake \
--node-name icra_node \
icra_ros_package
——————————————————— [finished] ———————————————————
going to create a new package package name: icra_ros_package Tobias Fischer & Peter Corke: From Research Code to Running Systems 35 / 64
Build Your Own ROS / C++ / Python Packages ▓▓▓ Create a ROS package pixi run ros2 pkg create \
--build-type ament_cmake \
--node-name icra_node \
icra_ros_package
——————————————————— [finished] ———————————————————
going to create a new package package name: icra_ros_package ▓▓▓ Add it to Pixi [workspace]
preview = ["pixi-build"]
[dependencies]
ros-rolling-icra-ros-package = { path =
"icra_ros_package/package.xml" }
Tobias Fischer & Peter Corke: From Research Code to Running Systems 36 / 64
Build Your Own ROS / C++ / Python Packages ▓▓▓ Create a ROS package ▓▓▓ Build the package
pixi run ros2 pkg create \ # The equivalent to colcon
--build-type ament_cmake \ build!
--node-name icra_node \ pixi install
icra_ros_package
—————————— [finished] ——————————
——————————————————— [finished] ———————————————————
going to create a new package ╭─ Running build for
package name: icra_ros_package recipe:
ros-rolling-icra-ros-package
-0.0.0-hb0f4dca_0 ▓▓▓ Add it to Pixi
[workspace]
preview = ["pixi-build"]
[dependencies]
ros-rolling-icra-ros-package = { path =
"icra_ros_package/package.xml" }
Tobias Fischer & Peter Corke: From Research Code to Running Systems 37 / 64
Build Your Own ROS / C++ / Python Packages ▓▓▓ Create a ROS package ▓▓▓ Build the package
pixi run ros2 pkg create \ # The equivalent to colcon
--build-type ament_cmake \ build!
--node-name icra_node \ pixi install
icra_ros_package
—————————— [finished] ——————————
——————————————————— [finished] ———————————————————
going to create a new package ╭─ Running build for
package name: icra_ros_package recipe:
ros-rolling-icra-ros-package
-0.0.0-hb0f4dca_0 ▓▓▓ Add it to Pixi
▓▓▓ Does it work?
[workspace]
preview = ["pixi-build"]
pixi run ros2 run
[dependencies] icra_ros_package icra_node
ros-rolling-icra-ros-package = { path =
"icra_ros_package/package.xml" }
Tobias Fischer & Peter Corke: From Research Code to Running Systems 38 / 64
Build Your Own ROS / C++ / Python Packages ▓▓▓ Create a ROS package ▓▓▓ Build the package
pixi run ros2 pkg create \ # The equivalent to colcon
--build-type ament_cmake \ build!
--node-name icra_node \ pixi install
icra_ros_package
—————————— [finished] ——————————
——————————————————— [finished] ———————————————————
going to create a new package ╭─ Running build for
package name: icra_ros_package recipe:
ros-rolling-icra-ros-package
-0.0.0-hb0f4dca_0 ▓▓▓ Add it to Pixi
▓▓▓ Does it work?
[workspace]
preview = ["pixi-build"]
pixi run ros2 run
[dependencies] icra_ros_package icra_node
ros-rolling-icra-ros-package = { path =
"icra_ros_package/package.xml" }
Tobias Fischer & Peter Corke: From Research Code to Running Systems 39 / 64
Beyond ROS • pure CMake projects • Python packages • Rust crates • git repositories ▍ Research code becomes installable, shareable infrastructure.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 40 / 64
Cross Platform Reproducibility • Same repository • Same lockfile • Same command • Different machine • Different OS - note: no root required! Tobias Fischer & Peter Corke: From Research Code to Running Systems 41 / 64
Cross Platform Reproducibility • Same repository • Same lockfile • Same command • Different machine • Different OS - note: no root required! ██ macOS → Linux → HPC # Add other platforms
pixi workspace platform add linux-64 win-64
Tobias Fischer & Peter Corke: From Research Code to Running Systems 42 / 64
Cross Platform Reproducibility • Same repository • Same lockfile • Same command • Different machine • Different OS - note: no root required! ██ macOS → Linux → HPC # Add other platforms
pixi workspace platform add linux-64 win-64
# Copy this demo to Linux/HPC via ssh/scp
# Runs ssh/scp only when ICRA_REMOTE_HOST is set
python scripts/remote_demo.py prepare
Tobias Fischer & Peter Corke: From Research Code to Running Systems 43 / 64
# Optional presenter remote: run the same Pixi task on Linux/HPC
# Prints each remote command before executing it
python scripts/remote_demo.py run
Tobias Fischer & Peter Corke: From Research Code to Running Systems 44 / 64
Case Study: VSLAM-Lab Large-scale visual SLAM framework for benchmarking, composability, reproducibility, and easy onboarding. ▓▓▓ Before 😬 README.md
1. Install ROS, ...
2. Build OpenCV, ...
3. Download models
4. Download datasets
5. Configure CUDA
6. Build dependencies
7. Pray
Tobias Fischer & Peter Corke: From Research Code to Running Systems 45 / 64
Case Study: VSLAM-Lab Large-scale visual SLAM framework for benchmarking, composability, reproducibility, and easy onboarding. ▓▓▓ Before 😬 ▓▓▓ After ✨
README.md git clone
https://github.com/VSLAM-LAB/VSLAM-LAB
1. Install ROS, ... .git > /dev/null 2>&1
2. Build OpenCV, ... pixi run -m ./VSLAM-LAB/pixi.toml demo
3. Download models orbslam2 eth table_3 mono
4. Download datasets
5. Configure CUDA
6. Build dependencies
7. Pray
Tobias Fischer & Peter Corke: From Research Code to Running Systems 46 / 64
Case Study: VSLAM-Lab Large-scale visual SLAM framework for benchmarking, composability, reproducibility, and easy onboarding. ▓▓▓ Before 😬 ▓▓▓ After ✨
README.md git clone
https://github.com/VSLAM-LAB/VSLAM-LAB
1. Install ROS, ... .git > /dev/null 2>&1
2. Build OpenCV, ... pixi run -m ./VSLAM-LAB/pixi.toml demo
3. Download models orbslam2 eth table_3 mono
4. Download datasets
5. Configure CUDA
6. Build dependencies
7. Pray
▍ Multi-page setup instructions become executable workflows!
Tobias Fischer & Peter Corke: From Research Code to Running Systems 47 / 64
Why Pixi for Robotics? ⚙️ Built-in project feature │ Pixi │ Conda │ Pip │ Poetry │ uv ─────────────────────────┼──────┼───────────┼─────┼────────┼─── Installs Python │ ✅ │ ✅ │ ❌ │ ❌ │ ✅ Native libraries │ ✅ │ ✅ │ ❌ │ ❌ │ ❌ Lockfiles │ ✅ │ via tools │ ❌ │ ✅ │ ✅ Task runner │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ Workspace management │ ✅ │ ❌ │ ❌ │ ✅ │ ✅ Fast solver │ ✅ │ slower │ n/a │ ❌ │ ✅ Tobias Fischer & Peter Corke: From Research Code to Running Systems 48 / 64
Why Pixi for Robotics? ⚙️ Built-in project feature │ Pixi │ Conda │ Pip │ Poetry │ uv ─────────────────────────┼──────┼───────────┼─────┼────────┼─── Installs Python │ ✅ │ ✅ │ ❌ │ ❌ │ ✅ Native libraries │ ✅ │ ✅ │ ❌ │ ❌ │ ❌ Lockfiles │ ✅ │ via tools │ ❌ │ ✅ │ ✅ Task runner │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ Workspace management │ ✅ │ ❌ │ ❌ │ ✅ │ ✅ Fast solver │ ✅ │ slower │ n/a │ ❌ │ ✅ ▍ The point is not one feature.
▍ The point is having the right combination for robotics.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 49 / 64
Why Not Docker? 🧱 ▓▓▓ Containers are excellent for • deployment • cloud workflows • CI/CD • reproducible services • production isolation Dockerfile
apt-get
pip install
CUDA setup
X11 forwarding
volume mounts
Tobias Fischer & Peter Corke: From Research Code to Running Systems 50 / 64
Why Not Docker? 🧱 ▓▓▓ Containers are excellent for ▓▓▓ But robotics research often needs
• deployment • native GUI applications
• cloud workflows • low-friction hardware access
• CI/CD • host networking and shared memory
• reproducible services behavior
• production isolation • ROS + ML composability
• rapid iteration across repositories • cross-platform desktop workflows
Dockerfile
apt-get
pip install pixi.toml
CUDA setup pixi.lock
X11 forwarding pixi run start
volume mounts
Tobias Fischer & Peter Corke: From Research Code to Running Systems 51 / 64
Why Not Docker? 🧱 ▓▓▓ Containers are excellent for ▓▓▓ But robotics research often needs
• deployment • native GUI applications
• cloud workflows • low-friction hardware access
• CI/CD • host networking and shared memory
• reproducible services behavior
• production isolation • ROS + ML composability
• rapid iteration across repositories • cross-platform desktop workflows
Dockerfile
apt-get
pip install pixi.toml
CUDA setup pixi.lock
X11 forwarding pixi run start
volume mounts
▓▓▓ Our goal Native, reproducible workflows with minimal setup friction.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 52 / 64
Limitations and Trade-offs Reproducible does not mean effortless. It means the effort is captured instead of rediscovered. Tobias Fischer & Peter Corke: From Research Code to Running Systems 53 / 64
Limitations and Trade-offs Reproducible does not mean effortless. It means the effort is captured instead of rediscovered. 1. Some robotics software is still Linux-first. Drivers, GUIs, middleware, and hardware access need testing. 2. Packaging moves work earlier. Old libraries and unusual builds likely need patches (our RoboStack builds have 100s!). 3. Pixi is one layer. Docker, HPC modules, and embedded toolchains still matter. 4. Lockfiles capture complexity. They do not make complex systems simple. Tobias Fischer & Peter Corke: From Research Code to Running Systems 54 / 64
Limitations and Trade-offs Reproducible does not mean effortless. It means the effort is captured instead of rediscovered. 1. Some robotics software is still Linux-first. Drivers, GUIs, middleware, and hardware access need testing. 2. Packaging moves work earlier. Old libraries and unusual builds likely need patches (our RoboStack builds have 100s!). 3. Pixi is one layer. Docker, HPC modules, and embedded toolchains still matter. 4. Lockfiles capture complexity. They do not make complex systems simple. ▍ The win is not zero setup.
▍ The win is setup you can inspect, share, and rerun.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 55 / 64
Teasers 1. Browser-native ROS via ROS2WASM (https://ros2wasm.dev/)
Tobias Fischer & Peter Corke: From Research Code to Running Systems 56 / 64
Teasers 1. Browser-native ROS via ROS2WASM (https://ros2wasm.dev/)
2. Pack environments for another machine: pixi pack
Tobias Fischer & Peter Corke: From Research Code to Running Systems 57 / 64
Teasers 1. Browser-native ROS via ROS2WASM (https://ros2wasm.dev/)
2. Pack environments for another machine: pixi pack
3. Cross-platform CI (https://github.com/ruben-arts/ros-example)
jobs:
strategy:
matrix:
os: [ubuntu, windows, macos]
steps:
- name: Setup Pixi and install environment
uses: prefix-dev/setup-pixi
- name: Run ROS node
run: pixi run ros2 pkg list
Tobias Fischer & Peter Corke: From Research Code to Running Systems 58 / 64
Teasers 1. Browser-native ROS via ROS2WASM (https://ros2wasm.dev/)
2. Pack environments for another machine: pixi pack
3. Cross-platform CI (https://github.com/ruben-arts/ros-example)
jobs:
strategy:
matrix:
os: [ubuntu, windows, macos]
steps:
- name: Setup Pixi and install environment
uses: prefix-dev/setup-pixi
- name: Run ROS node
run: pixi run ros2 pkg list
4. Package missing dependencies (if it blocks your research, it blocks someone else's research, too!): rattler-build generate-recipe pypi some-package
Tobias Fischer & Peter Corke: From Research Code to Running Systems 59 / 64
Teasers 1. Browser-native ROS via ROS2WASM (https://ros2wasm.dev/)
2. Pack environments for another machine: pixi pack
3. Cross-platform CI (https://github.com/ruben-arts/ros-example)
jobs:
strategy:
matrix:
os: [ubuntu, windows, macos]
steps:
- name: Setup Pixi and install environment
uses: prefix-dev/setup-pixi
- name: Run ROS node
run: pixi run ros2 pkg list
4. Package missing dependencies (if it blocks your research, it blocks someone else's research, too!): rattler-build generate-recipe pypi some-package
5. Package AI/ML models as versioned, cached dependencies: https://prefix.dev/blog/packaging-ai-ml-models-as-conda-packages Tobias Fischer & Peter Corke: From Research Code to Running Systems 60 / 64
Key Insights 1. Environments are part of the method. 2. Tasks and lockfiles make projects runnable. 3. Packaging turns local code into shared infrastructure. 4. Research software is part of the contribution.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 61 / 64
Key Insights 1. Environments are part of the method. 2. Tasks and lockfiles make projects runnable. 3. Packaging turns local code into shared infrastructure. 4. Research software is part of the contribution.
▍ Build systems that others can run, trust, extend, and build upon.
Tobias Fischer & Peter Corke: From Research Code to Running Systems 62 / 64
Key Insights 1. Environments are part of the method. 2. Tasks and lockfiles make projects runnable. 3. Packaging turns local code into shared infrastructure. 4. Research software is part of the contribution.
▍ Build systems that others can run, trust, extend, and build upon.
▓▓▓ Thank you Tobias.Fischer@qut.edu.au & Peter.Corke@qut.edu.au
QUT Centre for Robotics Thanks to the prefix.dev team for creating Pixi, Silvio Traversaro, Alejandro Fontan,
Nicolas Marticorena, Margaux Edwards, my co-authors, open-source contributors, and the
Australian Research Council. ██ Questions? Tobias Fischer & Peter Corke: From Research Code to Running Systems 63 / 64
References and Links • pixi.sh (https://pixi.sh)
• A RoboStack Tutorial: Using the Robot Operating System Alongside the Conda and Jupyter
Data Science Ecosystems (https://doi.org/10.1109/MRA.2021.3128367), IEEE Robotics &
Automation Magazine, vol. 29, no. 2, June 2022 • Pixi: Unified Software Development and Distribution for Robotics and AI (
https://arxiv.org/abs/2511.04827), arXiv:2511.04827
• ROS2WASM: Bringing the Robot Operating System to the Web (
https://doi.org/10.1109/ICRA55743.2025.11127821), IEEE International Conference on
Robotics and Automation (ICRA) 2025 • VSLAM-LAB: A Comprehensive Framework for Visual SLAM Methods and Datasets (
https://arxiv.org/abs/2504.04457), IEEE/RSJ International Conference on Intelligent
Robots and Systems (IROS) 2025 • rattler.build (https://rattler.build)
Tobias Fischer & Peter Corke: From Research Code to Running Systems 64 / 64