LINK: ESTABLISHED
BOOTING PERSONAL TERMINAL...    LOADING USER PROFILE...    APPLYING CRT FILTERS...    PRESS [NAV] TO SWITCH SECTIONS    //    SELF-HOSTED AGGREGATE ANALYTICS ACTIVE.  
MODE: DESKTOP

briefings Rust on Robots - Workshop (Didakta Ed.)


https://wieerwill.dev/talks/2603-rust-on-robots-workshop
DATE 10/03/2026
TAGS DE

Rust on Robots - Workshop (Didakta Ed.)

Rust ist schnell, modern und hilft dabei, typische Embedded-Fehler früh zu vermeiden – genau das, was man auf Robotern braucht. In diesem Workshop gebe ich eine kurze, praxisnahe Einführung in Rust und wir steigen dann direkt in gemeinsame Übungen ein: selbst Rust schreiben, kleine Aufgaben lösen und anschließend Rust auf einem STM32 (oder ähnlichem Board) flashen und testen.

Ideal für RoboCup-Interessierte aus der außerschulischen bzw. beruflichen Bildung, die schon einmal programmiert haben und Rust als Werkzeug für robuste Robotik ausprobieren wollen.

Rust on Robots

interaktiver Workshop von „Rust fühlt sich neu an“ zu „LED blinkt auf STM32“

  • Level: Anfänger mit Programmiererfahrung
  • Bring-your-laptop - Wir flashen echte Board(s)
  • Vorab: RustUp installieren! -> https://rustup.rs

Was ihr nachher könnt

  • Rust Toolchain installieren und verifizieren
  • Ein kleines Desktop-Programm bauen
  • Ein no_std-Firmware-Projekt flashen und Logs sehen
  • “Rust auf MCU” mental einordnen
doc.rust-lang.org/book/

Robotik ist Embedded

und Embedded bestraft uns sofort

  • Viele Fehler sind nicht “Logik”, sondern Speicher & Nebenwirkungen
  • Debug-Zeit frisst Projektzeit (gerade im Schulkontext)
  • Ziel heute: robuster werden, ohne „RTOS + C++-Template-Magie“

Memory-Safety lohnt sich – aber nicht gratis

  • weniger UAF/BOF-Klassen → weniger „Geisterbugs“
  • Rust verschiebt Fehler nach links (Compile-Time statt Feldtest)
  • Aber: Tooling + Denkmodell brauchen Einstieg (heute)
doc.rust-lang.org/book/ch04-01

Rust ist kein Zauberstab

  • Compile-Zeiten können nerven (vor allem mit vielen Dependencies)
  • Embedded ist „weniger bequem“: kein std, keine Files, kein Netzwerk
  • Unsafe existiert weiterhin (aber: eingrenzbar und reviewbar)
doc.rust-lang.org/…/embedded-book

Workshop-Route (~90 Min)

  1. Setup & Repo-Smoketest (~15–20m)
  2. Rust-Grundprinzipien über Übungen (~20m)
  3. Mini-Desktop-Programm: Cargo-Flow + Result (~15m)
  4. MCU: no_std + Flash + Logs (~20–30m)

Mini-Glossar

  • rustup: Toolchain-Manager (stable/nightly, targets)
  • cargo: Build/Test/Run/Package
  • crate: Rust-Paket (lib oder bin)
  • Ownership/Borrow: Regeln für Speicherzugriff
  • no_std: kein OS-Standard-Lib; bare metal
  • HAL / embedded-hal: Hardware-Abstraktion-Layer/Traits
doc.rust-lang.org/book/

Evidence: rustup ist der „kleinste gemeinsame Nenner“

Heute nutzen wir rustup, weil es plattformübergreifend stabil ist.

rustup.rs/

Setup: Was wir brauchen

  • Rust stable via rustup (einheitliche Toolchain)
  • Git Repo
  • Für MCU: probe-rs
probe.rs/…/installation

Übung 0a: Toolchain verifizieren

  • rustc --version
  • cargo --version
  • rustup show
  • cargo new hello && cargo run
  • Ziel: Jeder hat einen grünen Build.
doc.rust-lang.org/book/ch01-03

Übung 0b: probe-rs Tools installieren

probe.rs

  • Linux/macOS: Installer-Skript (prebuilt) ausführen
  • Windows: PowerShell Installer (prebuilt) ausführen
  • Check: cargo embed --version und probe-rs --version
probe.rs/…/installation

Übung 0c: Repo holen & Smoketest

Repo klonen (oder ZIP) und in Projektordner wechseln

git clone https://git.wieerwill.dev/wieerwill/didakta-rust-workshop

Rust in 10 Minuten: Die 3 Regeln, die alles erklären

  • Werte haben einen Owner (und eine Lebensdauer)
  • Borrowing: viele const &T oder genau ein &mut T
  • Result<T, E> ist normal - Fehler sind ein Datentyp
  • Aber: Der Compiler ist streng damit ihr später schneller seid
doc.rust-lang.org/book/ch04-01

Evidence: Ownership

Die Ownership-Kapitel sind die beste „einmal sauber“-Referenz.

doc.rust-lang.org/book/ch04-01

Übung 1: Rustlings Sprint

  • Rustlings starten, erste Übungen lösen (compile → fix → repeat)
  • Fokus heute: Ownership/Borrow + Result
  • Ziel: Fehlermeldungen lesen wie Unit-Tests (nicht wie Gegner)
github.com/rust-lang/rustlings

Übung 2: Mini-Desktop-Programm

  • Input: „Sensor-Log“ (Text) → parse → aggregieren
  • Ausgabe: Mittelwerte/Min/Max + einfache Warnschwellen
  • 1–2 Tests schreiben (damit Refactoring safe bleibt)
  • Ziel: Cargo-Loop sitzt: test → run → fix
doc.rust-lang.org/book/ch02-00

Bridge: Jetzt drehen wir std ab

  • Cargo bleibt (build/test/run)
  • Rust bleibt (Ownership/Result/Types)
  • Weg sind OS-Services: Files/Netz/Threads
  • Dafür kommt Hardware rein: GPIO/Timer/Interrupts
doc.rust-lang.org/…/embedded-book

Evidence: Embedded Rust Book – Einstieg in no_std

Das Embedded Rust Book erklärt no_std, Tooling und Cortex-M Basics.

doc.rust-lang.org/…/embedded-book

no_std in einem Satz

  • Firmware ist ein „Binary“, aber ohne OS-Standardbibliothek
  • Hardwarezugriff passiert über HALs (GPIO/Timer/UART/…)
  • Viele Projekte teilen Traits über embedded-hal
  • Aber: Debugging muss geplant sein (RTT/defmt hilft)
docs.rust-embedded.org/book

Evidence: embedded-hal 1.0 ist ein Stabilitäts-Signal

embedded-hal 1.0: gemeinsame Traits → weniger Wildwuchs zwischen HALs.

github.com/rust-embedded/embedded-hal

Übung 3: Flash-Pipeline

  • Board per USB verbinden (ST-LINK / CMSIS-DAP / etc.)
  • probe-rs list → sieht der Rechner den Probe?
  • probe-rs info -> können wir das Board auslesen?
  • cargo embed → build → flash → reset → RTT
  • Ziel: LED blinkt + wir sehen Logs.
probe.rs/…/cargo-embed

Evidence: cargo-embed = flash + RTT + optional GDB

cargo-embed beschreibt den Ablauf (build → detect → flash → RTT → gdb).

probe.rs/…/cargo-embed

Übung 4: Embassy Blinky (async embedded)

  • Beispiel-Firmware bauen (aus Repo: „blinky“)
  • Zwei Tasks: LED-Timer + (optional) Button-Input
  • Ziel: „Multitasking“ ohne Threads/Stacks pro Task
embassy.dev/book

Evidence: Embassy Runtime – warum async hier Sinn macht

Embassy erklärt: kein Heap nötig, Tasks statisch, CPU kann schlafen.

embassy-rs.github.io/…/runtime

Debug-Ausgabe, die im Workshop wirklich funktioniert

  • RTT statt UART: weniger Verkabelung, schneller Start
  • defmt: Strings nicht im Flash → kleinere Firmware
  • Logs wie „printf“, aber embedded-freundlicher
  • Aber: Tooling muss zusammenpassen (Printer/Runner)
defmt.ferrous-systems.com/printers

Evidence: defmt Printers (host-seitig)

defmt braucht einen Host-Printer (z.B. probe-run) zur Ausgabe.

defmt.ferrous-systems.com/printers

Case Study: OpenTitan – Rust ist „allowed“ in echten Secure-Stacks

  • Device-SW darf C/ASM/Rust sein
  • Host-Tools explizit C++ oder Rust
  • Tradeoff: Integration + Toolchains sind Teil der Arbeit
opentitan.org/book/sw

Evidence: OpenTitan benennt Rust explizit als Sprache

OpenTitan Doku: Device Software (C/ASM/Rust) und Host Software (C++/Rust).

opentitan.org/book/sw

Messe-Realität: Netz ist unzuverlässig → wir arbeiten offline-first

  • Dependencies vorab „ziehen“ (oder vendoren)
  • Builds mit --offline müssen möglich sein
  • Wir haben „Plan B“: vorbereitete Artefakte/ZIPs
  • Aber: ihr nehmt das Setup danach mit nach Hause
doc.rust-lang.org/cargo/…/vendor

Evidence: cargo vendor / offline-Modus ist dokumentiert

cargo vendor + offline Flags sind Teil der offiziellen Cargo-Doku.

doc.rust-lang.org/cargo/…/vendor

Wenn Flashing nicht geht: 5 Quick Fixes

  • USB-Kabel tauschen (ja, wirklich) + anderen Port testen
  • Probe sichtbar? probe-rs list → sonst Treiber/Permissions
  • Chip-Name stimmt? (Runner / Embed.toml / Feature)
  • Reset/Boot-Pins prüfen (manche Boards brauchen Boot0 low)
  • Pairing: eine Maschine flashen, andere schaut zu/editiert
probe.rs/…/probe-rs

STMicroelectronics stellt ST-LINK USB Treiber als Download bereit.

st.com/…/stsw-link009

Playbook: Rust auf Robotern einführen

    1. Toolchain standardisieren (rustup, formatter, clippy)
    1. Kleines Modul wählen (klarer Input/Output, testbar)
    1. FFI/Boundary bewusst setzen (Rust innen, C außen – oder umgekehrt)
    1. Embedded: Logging/Debug zuerst (RTT/defmt), dann Features
    1. Erst danach: async/Embassy/Performance-Tuning
docs.rust-embedded.org/book

Decision Matrix

  • Rust lohnt sich, wenn: Memory-Safety wichtig + Tests/Reviews ernst gemeint
  • Rust lohnt sich, wenn: ihr klare Modulgrenzen habt (Schnittstellen!)
  • Rust lohnt sich weniger, wenn: extrem kleines MCU + kaum Flash/RAM + Deadline hart
  • Rust lohnt sich weniger, wenn: Toolchain/Drivers nicht kontrollierbar (Schul-IT)
  • Aber: „Rust nur am Host“ (Tools/CI) ist oft ein sehr guter Start
opentitan.org/book/doc/rust_for_c_devs

Deep Dive: Unsafe & FFI

  • Unsafe ist erlaubt, aber: lokal + reviewbar halten
  • Typischer Einsatz: Registerzugriff, HAL-Interna, C-Interop
  • Pattern: safe API außen, unsafe innen – mit Tests/Assertions
  • Aber: unsafe ist kein „Escape“ für Architekturprobleme
doc.rust-lang.org/book/ch19-01

Deep Dive: Safety-Critical Rust

wenn Regeln & Audits zählen

Ferrocene als Beispiel: qualifizierte Toolchain für Safety/Mission-Critical.

ferrocene.dev/

Wrap-up: Was heute passiert ist

  • Rust-Grundprinzipien an echten Compiler-Fehlern gelernt
  • Cargo-Workflow geübt (run/test, reproducible builds)
  • MCU geflasht + Logs gesehen (RTT/defmt)
  • Klarheit gewonnen: Rust ist Werkzeug – mit Kosten & Nutzen
docs.rust-embedded.org/discovery

Mehr?!

  • Rust Book + Rustlings (Sprache festigen)
  • Embedded Rust Book + Discovery (bare metal verstehen)
  • Embassy Book (async sauber einsetzen)
  • probe-rs Docs (Runner/Embed.toml/Debug)
  • Community: Embedded WG Ressourcen + RoboCup Kontexte
docs.rust-embedded.org/book

END OF BRIEFING

End of record. Further disclosure requires clearance.