Compare commits

...
10 Commits
Author SHA1 Message Date
matthias d0b776485a feat: expanded and added more tasks 2026-07-08 23:33:26 +02:00
matthias 8fdf69e11f Add pan tilt head task 2026-07-07 23:52:20 +02:00
matthias 8620a9f794 Add servo basics task 2026-07-07 23:50:41 +02:00
matthias dac6fcaa2a Add known faces task 2026-07-07 23:50:01 +02:00
matthias 32c297fa08 Add count people task 2026-07-07 23:49:40 +02:00
matthias 86cfffa4d3 Add camera feed task 2026-07-07 23:49:06 +02:00
matthias 4118fa59f1 Add text-to-speech task 2026-07-07 23:48:46 +02:00
matthias 8cbcf2f76b Add speech-to-text task 2026-07-07 23:48:34 +02:00
matthias 295dfed9a9 Add tool calling task 2026-07-07 23:48:13 +02:00
matthias 07a13b98be Add AI agent basics task 01 2026-07-07 23:47:34 +02:00
88 changed files with 3121 additions and 37 deletions
@@ -0,0 +1,38 @@
# Aufgabe 01: Kursziel und Zielsystem beschreiben
## Ziel
Du formulierst das konkrete Zielbild des sprechenden Roboterkopfs und grenzt bewusst aus, was noch nicht gebaut wird.
## Warum ist das wichtig?
Ohne klares Ziel verzettelst du dich schnell zwischen AI, Kamera, Audio, Hardware und ROS2.
## Voraussetzungen
- keine
- Texteditor
## Theorie
Systemdenken beginnt mit Grenzen: Ein Roboterkopf ist kein kompletter humanoider Roboter, sondern ein integriertes System aus Wahrnehmen, Entscheiden und Handeln. Je genauer du Ein- und Ausgaben beschreibst, desto einfacher werden spätere Schnittstellen.
## Aufgabe
Erstelle eine kurze Zielsystem-Spezifikation mit Use Cases, Nicht-Zielen, ersten Qualitätszielen und einer Liste der wichtigsten Komponenten.
## Akzeptanzkriterien
- Eine Datei beschreibt mindestens fünf Use Cases.
- Nicht-Ziele sind explizit notiert.
- Die Komponenten Audio, LLM, Vision, Face Recognition und Motion kommen vor.
## Erweiterungen
- Skizziere zusätzlich ein Kontextdiagramm.
## Reflexionsfragen
- Welche Funktion ist für das erste Erfolgserlebnis am wichtigsten?
- Welche Nicht-Ziele schützen dich vor zu großer Komplexität?
- Welche Teile des Systems sind sicherheitskritisch?
@@ -0,0 +1,39 @@
# Aufgabe 02: Hardware-Empfehlungen prüfen
## Ziel
Du stellst eine realistische Einkaufsliste für Prototyping und spätere Hardware zusammen.
## Warum ist das wichtig?
Hardware-Fehlkäufe kosten Zeit und machen Debugging unnötig schwer.
## Voraussetzungen
- Aufgabe 01
- Browser oder lokale Recherche
- Budgetrahmen
## Theorie
Für frühe Lernschritte reicht oft ein Linux-PC mit USB-Kamera und Mikrofon. Servos, Stromversorgung und Kameraqualität werden erst dann wichtig, wenn Softwarepfade stabil sind.
## Aufgabe
Erstelle eine Hardware-Matrix mit Mindestsetup, empfohlenem Setup und optionalen Upgrades. Begründe jede Komponente kurz.
## Akzeptanzkriterien
- Mindestsetup funktioniert ohne Servo-Hardware.
- Stromversorgung für Servos wird separat betrachtet.
- Kamera, Mikrofon, Lautsprecher und Recheneinheit sind aufgeführt.
## Erweiterungen
- Füge Alternativen für Raspberry Pi, Mini-PC und Laptop hinzu.
## Reflexionsfragen
- Was kannst du komplett simulieren?
- Welche Hardware muss vor dem Kauf elektrisch geprüft werden?
- Welche Komponente beeinflusst Latenz am stärksten?
@@ -0,0 +1,40 @@
# Aufgabe 03: Software-Setup vorbereiten
## Ziel
Du definierst eine reproduzierbare Entwicklungsumgebung für Python, Rust, Docker und lokale Modelle.
## Warum ist das wichtig?
Ein Roboterprojekt wird schnell unwartbar, wenn jede Komponente anders gestartet wird.
## Voraussetzungen
- Linux oder WSL
- Rust toolchain
- Python 3.11+
- Docker optional
## Theorie
Reproduzierbarkeit ist wichtiger als Perfektion. Eine klare Ordnerstruktur, feste Versionen und einfache Startbefehle reduzieren Reibung beim Wechsel zwischen AI-, Vision- und Hardware-Code.
## Aufgabe
Lege eine Setup-Notiz mit benötigten Tools, Versionen, Installationschecks und ersten Smoke Tests an.
## Akzeptanzkriterien
- Rust, Python und Docker werden mit Befehlen geprüft.
- Es gibt eine Liste erwarteter Versionen.
- Mindestens ein Smoke Test pro Tool ist beschrieben.
## Erweiterungen
- Erstelle später ein `justfile` oder `Makefile` für häufige Befehle.
## Reflexionsfragen
- Welche Tools müssen systemweit installiert sein?
- Welche Abhängigkeiten gehören in ein Projekt-Environment?
- Wie erkennst du Setup-Probleme früh?
@@ -0,0 +1,38 @@
# Aufgabe 04: Lernstrategie und Projekttagebuch
## Ziel
Du richtest ein Projekttagebuch ein, das Entscheidungen, Messwerte und offene Fragen festhält.
## Warum ist das wichtig?
Bei Robotik ist Debugging oft experimentell. Gute Notizen sparen Stunden.
## Voraussetzungen
- Aufgabe 01
- Markdown
## Theorie
Ein Projekttagebuch ist kein Roman, sondern ein technisches Gedächtnis. Es hält fest, was du geändert hast, welche Hypothese du hattest und welches Ergebnis gemessen wurde.
## Aufgabe
Erstelle eine Vorlage für tägliche Einträge mit Ziel, Änderung, Beobachtung, Messwerten, Fehlern und nächstem Schritt.
## Akzeptanzkriterien
- Die Vorlage enthält Messwerte für Latenz und FPS.
- Fehler und Hypothesen haben eigene Abschnitte.
- Mindestens ein Beispieltag ist ausgefüllt.
## Erweiterungen
- Ergänze eine Entscheidungslog-Datei für Architekturentscheidungen.
## Reflexionsfragen
- Welche Informationen vergisst man nach zwei Wochen zuerst?
- Welche Messwerte willst du regelmäßig vergleichen?
- Wann ist eine Notiz besser als ein Kommentar im Code?
@@ -0,0 +1,38 @@
# Aufgabe 05: Sicherheit und Datenschutz festlegen
## Ziel
Du definierst Grundregeln für Kamera, Mikrofon, bekannte Personen und Servo-Bewegungen.
## Warum ist das wichtig?
Der Roboter verarbeitet sensible Daten und bewegt Hardware in der Nähe von Menschen.
## Voraussetzungen
- Aufgaben 01-04
- Grundverständnis Datenschutz
## Theorie
Mikrofon- und Kameradaten sind personenbezogen. Servos können mechanisch blockieren oder Bauteile beschädigen. Deshalb braucht das Projekt von Anfang an Grenzen, Einwilligung und sichere Defaults.
## Aufgabe
Schreibe eine Sicherheits- und Datenschutz-Checkliste für Entwicklung, Tests und Vorführung.
## Akzeptanzkriterien
- Consent-Regeln für Face Recognition sind enthalten.
- Audio- und Bildspeicherung sind geregelt.
- Servo-Winkel und Not-Aus werden erwähnt.
## Erweiterungen
- Definiere eine rote Status-LED oder Konsolenausgabe für aktive Aufnahme.
## Reflexionsfragen
- Welche Daten darfst du nicht dauerhaft speichern?
- Wie erklärst du Testpersonen die Gesichtserkennung?
- Was muss passieren, wenn ein Servo blockiert?
+15
View File
@@ -0,0 +1,15 @@
# Kursüberblick
Orientierung, Setup, Lernstrategie und die grobe Architektur des späteren Roboterkopfs.
## Aufgaben
- [01: Kursziel und Zielsystem beschreiben](01-kursziel-und-zielsystem-beschreiben.md)
- [02: Hardware-Empfehlungen prüfen](02-hardware-empfehlungen-pruefen.md)
- [03: Software-Setup vorbereiten](03-software-setup-vorbereiten.md)
- [04: Lernstrategie und Projekttagebuch](04-lernstrategie-und-projekttagebuch.md)
- [05: Sicherheit und Datenschutz festlegen](05-sicherheit-und-datenschutz-festlegen.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,39 @@
# Aufgabe 01: LLM API per CLI ansprechen
## Ziel
Du baust eine CLI, die eine Chat-Anfrage an ein LLM sendet und die Antwort ausgibt.
## Warum ist das wichtig?
Der spätere Roboter braucht ein kontrolliertes Sprachmodell als Denk- und Dialogkomponente.
## Voraussetzungen
- Rust oder Python
- API-Key oder Ollama
- HTTP-Grundlagen
## Theorie
LLM APIs arbeiten meist mit Nachrichten statt mit einem einzelnen Prompt. Rollen wie system, user und assistant geben dem Modell Kontext und begrenzen Verhalten.
## Aufgabe
Implementiere `ask "Frage"` mit konfigurierbarer Provider-URL, Timeout und verständlicher Fehlerausgabe.
## Akzeptanzkriterien
- Eine Frage kann per Terminal gestellt werden.
- Antwort und Fehler werden sauber ausgegeben.
- Provider-Konfiguration liegt nicht hart im Code.
## Erweiterungen
- Speichere Request und Response als JSON-Log.
## Reflexionsfragen
- Welche Daten sendest du an den Provider?
- Was gehört in Konfiguration statt Code?
- Wie erkennst du API-Timeouts?
@@ -0,0 +1,39 @@
# Aufgabe 02: Ollama und Cloud API vergleichen
## Ziel
Du vergleichst lokale und cloudbasierte LLMs mit denselben Prompts.
## Warum ist das wichtig?
Der Roboter muss je nach Datenschutz, Kosten und Latenz mit verschiedenen Modellquellen umgehen können.
## Voraussetzungen
- Aufgabe 01
- Ollama optional
- Cloud API optional
## Theorie
Lokale Modelle geben mehr Kontrolle, brauchen aber Hardware und sind oft schwächer. Cloud APIs sind leistungsfähig, erzeugen aber Kosten und Datenschutzfragen.
## Aufgabe
Baue einen Provider-Schalter und teste mindestens fünf Prompts gegen beide Varianten oder dokumentiere eine simulierte zweite Variante.
## Akzeptanzkriterien
- Provider kann per Config gewechselt werden.
- Latenz und Antwortqualität werden notiert.
- Datenschutz- und Kostenunterschiede sind beschrieben.
## Erweiterungen
- Füge einen Fallback auf lokales Modell bei Cloud-Fehler ein.
## Reflexionsfragen
- Wann ist lokal besser?
- Welche Prompts zeigen Qualitätsunterschiede?
- Wie wirkt Modelllatenz auf Sprachdialog?
@@ -0,0 +1,38 @@
# Aufgabe 03: Chat Messages modellieren
## Ziel
Du modellierst Chat Messages als strukturierte Daten statt als String-Konkatenation.
## Warum ist das wichtig?
Tool Calling und Conversation History funktionieren nur sauber mit expliziten Rollen und Feldern.
## Voraussetzungen
- Aufgabe 01
- JSON/Serde oder Pydantic
## Theorie
Strukturierte Nachrichten verhindern Prompt-Chaos. Der Code kann validieren, kürzen, speichern und gezielt System- oder Tool-Nachrichten einfügen.
## Aufgabe
Definiere Typen für system, user, assistant und tool messages und serialisiere sie in das API-Format deines Providers.
## Akzeptanzkriterien
- Rollen sind typisiert oder validiert.
- JSON-Ausgabe entspricht dem Provider-Format.
- Ungültige Rollen werden abgefangen.
## Erweiterungen
- Schreibe Unit Tests für Serialisierung.
## Reflexionsfragen
- Warum sind Rollen besser als ein langer Prompt?
- Was muss eine Tool-Nachricht enthalten?
- Wie würdest du binäre Daten vermeiden?
@@ -0,0 +1,38 @@
# Aufgabe 04: System Prompt entwerfen
## Ziel
Du schreibst einen System Prompt für den Roboterassistenten mit klaren Grenzen.
## Warum ist das wichtig?
Der Roboter darf nicht raten, wenn Sensor-Tools echte Daten liefern sollen.
## Voraussetzungen
- Aufgabe 03
- Texteditor
## Theorie
Ein guter System Prompt beschreibt Rolle, Grenzen und Entscheidungsregeln. Er ersetzt keine Programmlogik, aber er hilft dem Modell, Tools korrekt zu nutzen.
## Aufgabe
Erstelle einen System Prompt, der kurze deutsche Antworten, Tool-Nutzung bei Sensorfragen und sichere Hardwarebefehle vorgibt.
## Akzeptanzkriterien
- Prompt enthält Rolle, Sprache und Sicherheitsregeln.
- Sensorfragen sollen Tools nutzen.
- Gefährliche Aktionen werden abgelehnt oder bestätigt.
## Erweiterungen
- Teste den Prompt mit zehn absichtlich schwierigen User-Fragen.
## Reflexionsfragen
- Welche Regeln gehören in Code statt Prompt?
- Wie erkennt der Agent eine Sensorfrage?
- Welche Antwortlänge passt für Sprache?
@@ -0,0 +1,38 @@
# Aufgabe 05: Conversation History verwalten
## Ziel
Du speicherst und kürzt Dialogverlauf für mehrere Gesprächsrunden.
## Warum ist das wichtig?
Ein sprechender Roboter muss Kontext behalten, ohne das Modellfenster zu überladen.
## Voraussetzungen
- Aufgaben 01-04
- Grundverständnis Token/Kontext
## Theorie
History ist Arbeitsgedächtnis, kein Archiv. Alte Nachrichten müssen zusammengefasst oder entfernt werden, damit wichtige Fakten erhalten bleiben.
## Aufgabe
Implementiere eine History mit maximaler Nachrichtenanzahl und einfacher Zusammenfassung alter Runden.
## Akzeptanzkriterien
- Mehrere Gesprächsrunden nutzen Kontext.
- Alte Nachrichten werden begrenzt.
- Tool-Ergebnisse bleiben nachvollziehbar.
## Erweiterungen
- Speichere Sitzungen mit Session-ID.
## Reflexionsfragen
- Was darf aus der History gelöscht werden?
- Welche Fakten sind langfristig wichtig?
- Wie vermeidest du, dass Tool-Logs den Kontext füllen?
@@ -0,0 +1,38 @@
# Aufgabe 06: JSON Tool Schema definieren
## Ziel
Du beschreibst Robotik-Tools als JSON Schema mit Parametern und Grenzen.
## Warum ist das wichtig?
Das Modell braucht präzise Werkzeugbeschreibungen, damit Hardware- und Sensortools korrekt aufgerufen werden.
## Voraussetzungen
- Aufgaben 03-04
- JSON Schema Grundlagen
## Theorie
Ein Tool Schema ist ein Vertrag zwischen LLM und Programm. Es beschreibt Name, Zweck, Parameter, erlaubte Werte und Pflichtfelder.
## Aufgabe
Definiere Schemas für `get_time`, `count_people`, `identify_people` und `look`.
## Akzeptanzkriterien
- Alle Tools haben Name, Beschreibung und Parameter.
- `look` begrenzt Richtungen oder Winkel.
- Ungültige Argumente werden abweisbar.
## Erweiterungen
- Generiere aus dem Schema eine kurze Markdown-Doku.
## Reflexionsfragen
- Welche Parameter sind gefährlich?
- Wie eng sollte ein Schema sein?
- Was passiert bei fehlenden Pflichtfeldern?
@@ -0,0 +1,38 @@
# Aufgabe 07: Tool Dispatcher bauen
## Ziel
Du baust einen Dispatcher, der validierte Tool Calls auf lokale Funktionen abbildet.
## Warum ist das wichtig?
Das LLM soll Entscheidungen vorschlagen, aber dein Code führt kontrolliert aus.
## Voraussetzungen
- Aufgabe 06
- Rust oder Python
## Theorie
Der Dispatcher ist die Sicherheitsgrenze. Er validiert Argumente, ruft Funktionen auf, behandelt Fehler und gibt strukturierte Ergebnisse zurück.
## Aufgabe
Implementiere einen Dispatcher für mindestens vier Fake-Tools und schreibe Tests für gültige und ungültige Aufrufe.
## Akzeptanzkriterien
- Bekannte Tools werden ausgeführt.
- Unbekannte Tools liefern Fehler.
- Argumente werden validiert und geloggt.
## Erweiterungen
- Füge Berechtigungslevel für Hardware-Tools hinzu.
## Reflexionsfragen
- Warum sollte das LLM keine Shell ausführen dürfen?
- Welche Fehler soll der Dispatcher verbergen?
- Welche Tool-Ergebnisse gehören zurück ins Modell?
@@ -0,0 +1,38 @@
# Aufgabe 08: Agent Loop implementieren
## Ziel
Du baust den Loop User Input -> LLM -> Tool -> LLM -> Antwort.
## Warum ist das wichtig?
Der finale Roboter braucht genau diese Schleife, nur später mit echten Services.
## Voraussetzungen
- Aufgaben 05-07
- LLM Provider
## Theorie
Ein Agent Loop ist eine kontrollierte Iteration. Er endet bei einer finalen Antwort oder nach einer maximalen Anzahl von Tool-Schritten.
## Aufgabe
Implementiere einen Loop mit maximal drei Tool Calls pro Anfrage, Tool-Ergebnis-Rückgabe und finaler Antwort.
## Akzeptanzkriterien
- Frage nach Uhrzeit nutzt Tool.
- Frage nach Personen nutzt Fake-Tool.
- Endlosschleifen werden begrenzt.
## Erweiterungen
- Zeige eine Debug-Ansicht aller Loop-Schritte.
## Reflexionsfragen
- Wann sollte der Loop abbrechen?
- Wie erkennst du Tool-Spam?
- Welche Daten sieht das Modell nach einem Tool Call?
@@ -0,0 +1,38 @@
# Aufgabe 09: Fehlerbehandlung, Logging und Memory
## Ziel
Du ergänzt robuste Fehlerpfade, strukturierte Logs und ein kleines Memory.
## Warum ist das wichtig?
Robotikfehler entstehen an API-, Sensor- und Hardwaregrenzen. Gute Beobachtbarkeit ist Pflicht.
## Voraussetzungen
- Aufgaben 01-08
- Logging-Grundlagen
## Theorie
Logs beantworten die Frage, was wirklich passiert ist. Memory speichert ausgewählte Fakten, aber keine ungeprüften Halluzinationen.
## Aufgabe
Erweitere den Agenten um strukturierte Logs, Fehlercodes und ein Key-Value-Memory für explizit bestätigte Fakten.
## Akzeptanzkriterien
- Jeder Request hat eine Trace-ID.
- Tool-Fehler sind sichtbar.
- Memory kann gelesen und geschrieben werden.
## Erweiterungen
- Füge Log-Level und JSON-Logs hinzu.
## Reflexionsfragen
- Welche Fehler sind wiederholbar?
- Welche Fakten darf der Agent speichern?
- Wie würdest du Logs in Docker sammeln?
+19
View File
@@ -0,0 +1,19 @@
# AI-Agent-Grundlagen
LLM-Zugriff, Nachrichtenmodell, Tool Calling, Agent Loop, Fehlerbehandlung und Memory.
## Aufgaben
- [01: LLM API per CLI ansprechen](01-llm-api-per-cli-ansprechen.md)
- [02: Ollama und Cloud API vergleichen](02-ollama-und-cloud-api-vergleichen.md)
- [03: Chat Messages modellieren](03-chat-messages-modellieren.md)
- [04: System Prompt entwerfen](04-system-prompt-entwerfen.md)
- [05: Conversation History verwalten](05-conversation-history-verwalten.md)
- [06: JSON Tool Schema definieren](06-json-tool-schema-definieren.md)
- [07: Tool Dispatcher bauen](07-tool-dispatcher-bauen.md)
- [08: Agent Loop implementieren](08-agent-loop-implementieren.md)
- [09: Fehlerbehandlung, Logging und Memory](09-fehlerbehandlung-logging-und-memory.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,39 @@
# Aufgabe 01: Mikrofon aufnehmen und speichern
## Ziel
Du nimmst Audio vom Mikrofon auf und speicherst es als WAV-Datei.
## Warum ist das wichtig?
Speech-to-Text ist nur so gut wie die Audioquelle und deren Format.
## Voraussetzungen
- Mikrofon
- Python
- PortAudio oder sounddevice
## Theorie
Audio hat Samplerate, Kanäle, Bit-Tiefe und Pegel. Falsche Formate führen zu schlechter Erkennung oder unnötiger Latenz.
## Aufgabe
Baue ein Skript, das fünf Sekunden Audio aufnimmt, Pegel ausgibt und eine WAV-Datei speichert.
## Akzeptanzkriterien
- WAV-Datei ist abspielbar.
- Samplerate und Kanalzahl werden angezeigt.
- Leise oder übersteuerte Aufnahme wird erkannt.
## Erweiterungen
- Füge automatische Normalisierung als Option hinzu.
## Reflexionsfragen
- Welche Samplerate erwartet dein STT-Modell?
- Woran erkennst du Übersteuerung?
- Warum ist Mono oft sinnvoll?
@@ -0,0 +1,38 @@
# Aufgabe 02: Push-to-Talk CLI bauen
## Ziel
Du baust eine einfache Push-to-Talk-Bedienung für Terminaltests.
## Warum ist das wichtig?
Daueraufnahme ist beim Entwickeln störend und datenschutzkritisch.
## Voraussetzungen
- Aufgabe 01
- Terminal
## Theorie
Push-to-Talk reduziert falsche Aktivierungen und macht Tests reproduzierbar. Später kann ein Wake Word ergänzt werden.
## Aufgabe
Implementiere eine CLI, die nur während gedrückter Taste oder zwischen Start/Stopp-Kommandos aufnimmt.
## Akzeptanzkriterien
- Aufnahme startet kontrolliert.
- Aufnahme endet zuverlässig.
- Datei oder Buffer wird an die nächste Pipeline-Stufe übergeben.
## Erweiterungen
- Zeige während der Aufnahme einen Pegelindikator.
## Reflexionsfragen
- Warum ist Push-to-Talk am Anfang besser als Wake Word?
- Welche Taste ist im Terminal praktikabel?
- Wie verhinderst du versehentliche Daueraufnahme?
@@ -0,0 +1,38 @@
# Aufgabe 03: Whisper Batch STT integrieren
## Ziel
Du wandelst eine gespeicherte WAV-Datei mit Whisper oder faster-whisper in Text um.
## Warum ist das wichtig?
Der Roboter braucht zuverlässige Transkription, bevor er sinnvoll antworten kann.
## Voraussetzungen
- Aufgaben 01-02
- Whisper/faster-whisper installiert
## Theorie
Batch-STT verarbeitet einen fertigen Audioclip. Das ist einfacher als Streaming und ideal für erste Pipeline-Tests.
## Aufgabe
Baue `transcribe file.wav`, gib Text, Sprache, Laufzeit und Modellname aus.
## Akzeptanzkriterien
- Eine WAV-Datei wird transkribiert.
- Laufzeit wird gemessen.
- Fehler bei fehlender Datei sind verständlich.
## Erweiterungen
- Teste verschiedene Modellgrößen und notiere Qualität/Latenz.
## Reflexionsfragen
- Welche Modellgröße ist lokal realistisch?
- Wie beeinflusst Raumlärm die Ausgabe?
- Wann reicht Batch-STT nicht mehr?
@@ -0,0 +1,38 @@
# Aufgabe 04: Streaming vs Batch bewerten
## Ziel
Du vergleichst eine Batch-Pipeline mit einer einfachen Chunk- oder Streaming-Strategie.
## Warum ist das wichtig?
Für natürliche Dialoge entscheidet Latenz oft stärker als Modellqualität.
## Voraussetzungen
- Aufgabe 03
- Audio-Grundlagen
## Theorie
Streaming kann früher Zwischenergebnisse liefern, ist aber komplexer. Batch ist robust, wartet aber bis zum Ende der Aufnahme.
## Aufgabe
Miss Ende-zu-Ende-Latenz für kurze und lange Äußerungen und beschreibe, wann du Streaming einführen würdest.
## Akzeptanzkriterien
- Mindestens drei Messungen sind dokumentiert.
- Batch-Latenz ist von Aufnahmezeit getrennt.
- Eine Entscheidung für den Kursstand ist begründet.
## Erweiterungen
- Implementiere einen experimentellen Chunk-Transcriber.
## Reflexionsfragen
- Welche Latenz fühlt sich im Dialog noch gut an?
- Welche Fehler erzeugen unvollständige Chunks?
- Was würdest du zuerst optimieren?
@@ -0,0 +1,38 @@
# Aufgabe 05: Text-to-Speech erzeugen
## Ziel
Du wandelst Text in hörbare Sprache um.
## Warum ist das wichtig?
Antworten müssen gesprochen werden, nicht nur im Terminal erscheinen.
## Voraussetzungen
- Lautsprecher
- Python TTS oder System-TTS
## Theorie
TTS hat Stimme, Geschwindigkeit, Ausgabeformat und Startlatenz. Für Roboter wirkt eine kurze, klare Antwort natürlicher als lange Absätze.
## Aufgabe
Baue `speak "Text"`, das Audio erzeugt und abspielt oder als Datei speichert.
## Akzeptanzkriterien
- Text wird hörbar ausgegeben.
- Lange Texte werden begrenzt oder geteilt.
- TTS-Fehler blockieren den Prozess nicht dauerhaft.
## Erweiterungen
- Teste zwei Stimmen oder Engines.
## Reflexionsfragen
- Welche Antwortlänge passt für TTS?
- Was passiert bei Sonderzeichen?
- Wie misst du Startlatenz?
@@ -0,0 +1,38 @@
# Aufgabe 06: Audio Queue einführen
## Ziel
Du baust eine Queue, damit TTS-Ausgaben geordnet abgespielt werden.
## Warum ist das wichtig?
Der Roboter soll nicht mehrere Antworten gleichzeitig sprechen.
## Voraussetzungen
- Aufgabe 05
- Nebenläufigkeit Grundlagen
## Theorie
Eine Queue entkoppelt Erzeugung und Wiedergabe. Sie erlaubt Stop, Clear, Priorität und sauberes Shutdown-Verhalten.
## Aufgabe
Implementiere eine Audio-Queue mit Worker, `enqueue`, `stop_current` und `clear`.
## Akzeptanzkriterien
- Zwei Texte werden nacheinander gesprochen.
- Queue kann geleert werden.
- Worker beendet sich sauber.
## Erweiterungen
- Füge Priorität für Warnhinweise hinzu.
## Reflexionsfragen
- Wann darf eine neue Antwort alte Sprache abbrechen?
- Wie verhinderst du Race Conditions?
- Welche Zustände braucht ein Audio-Player?
@@ -0,0 +1,38 @@
# Aufgabe 07: Voice Pipeline verbinden
## Ziel
Du verbindest Mikrofon, STT, LLM-Agent und TTS zu einem manuellen Dialog.
## Warum ist das wichtig?
Das ist der erste komplette Sprachpfad des späteren Roboterkopfs.
## Voraussetzungen
- Aufgaben 02-06
- Agent aus Modul 01
## Theorie
Pipelines bestehen aus Stufen mit klaren Datenformaten. Jede Stufe muss einzeln testbar bleiben, sonst wird Debugging schwer.
## Aufgabe
Baue einen Ablauf: Push-to-Talk -> STT -> Agent -> TTS. Logge Textzwischenstände und Zeiten.
## Akzeptanzkriterien
- Gesprochene Frage wird beantwortet.
- Transkript und Antwort werden angezeigt.
- Jede Stufe hat eine gemessene Dauer.
## Erweiterungen
- Füge einen Textmodus als Fallback hinzu.
## Reflexionsfragen
- Welche Stufe ist am langsamsten?
- Wo können Datenschutzdaten entstehen?
- Warum muss jede Stufe separat testbar bleiben?
@@ -0,0 +1,38 @@
# Aufgabe 08: Wake Word als optionaler Prototyp
## Ziel
Du testest ein Wake Word als Alternative zu Push-to-Talk.
## Warum ist das wichtig?
Ein Roboterkopf soll später freihändig nutzbar sein, aber Fehlaktivierungen müssen verstanden werden.
## Voraussetzungen
- Aufgaben 01-07
- Wake-Word-Bibliothek optional
## Theorie
Wake Words sind Klassifikatoren für kurze Audiosignale. Sie erzeugen False Positives und False Negatives, besonders bei Lärm oder ähnlichen Worten.
## Aufgabe
Baue einen optionalen Prototyp, der nach Aktivierung eine kurze Aufnahme startet, oder dokumentiere bewusst, warum du es noch weglässt.
## Akzeptanzkriterien
- Aktivierung wird sichtbar geloggt.
- Fehlaktivierungen werden notiert.
- Push-to-Talk bleibt als Fallback erhalten.
## Erweiterungen
- Miss Wake-Word-CPU-Last.
## Reflexionsfragen
- Welche Fehlaktivierung wäre peinlich oder riskant?
- Wie informierst du über aktive Aufnahme?
- Wann lohnt sich Wake Word wirklich?
+18
View File
@@ -0,0 +1,18 @@
# Voice Interface
Audioaufnahme, Speech-to-Text, Text-to-Speech, Queues und Latenzmessung.
## Aufgaben
- [01: Mikrofon aufnehmen und speichern](01-mikrofon-aufnehmen-und-speichern.md)
- [02: Push-to-Talk CLI bauen](02-push-to-talk-cli-bauen.md)
- [03: Whisper Batch STT integrieren](03-whisper-batch-stt-integrieren.md)
- [04: Streaming vs Batch bewerten](04-streaming-vs-batch-bewerten.md)
- [05: Text-to-Speech erzeugen](05-text-to-speech-erzeugen.md)
- [06: Audio Queue einführen](06-audio-queue-einfuehren.md)
- [07: Voice Pipeline verbinden](07-voice-pipeline-verbinden.md)
- [08: Wake Word als optionaler Prototyp](08-wake-word-als-optionaler-prototyp.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,39 @@
# Aufgabe 01: Kamera öffnen und Frames anzeigen
## Ziel
Du öffnest eine Kamera und zeigst Live-Frames an.
## Warum ist das wichtig?
Alle späteren Vision-Funktionen hängen an einem stabilen Kamerazugriff.
## Voraussetzungen
- USB-Kamera oder Laptop-Kamera
- Python
- OpenCV
## Theorie
Eine Kamera liefert fortlaufend Frames mit Auflösung, Farbraum und Zeitstempel. Schon hier können Treiber, Berechtigungen und Latenz Probleme machen.
## Aufgabe
Baue `camera-preview`, das Kameraindex, Auflösung und Abbruch per Taste unterstützt.
## Akzeptanzkriterien
- Livebild wird angezeigt.
- Kameraindex ist konfigurierbar.
- Programm gibt Ressourcen sauber frei.
## Erweiterungen
- Speichere beim Start ein Diagnosebild.
## Reflexionsfragen
- Welche Auflösung reicht für Personenerkennung?
- Was passiert bei falschem Kameraindex?
- Warum muss `release` aufgerufen werden?
@@ -0,0 +1,38 @@
# Aufgabe 02: Frames lesen und Bilder speichern
## Ziel
Du speicherst Einzelbilder kontrolliert aus dem Kamerastream.
## Warum ist das wichtig?
Debugging von Vision-Modellen braucht reproduzierbare Testbilder.
## Voraussetzungen
- Aufgabe 01
- OpenCV
## Theorie
Ein gespeichertes Frame friert eine Situation ein. Damit kannst du Schwellenwerte und Modelle testen, ohne jedes Mal dieselbe Szene nachzustellen.
## Aufgabe
Erweitere die Preview um Snapshot-Funktion und speichere Bilder mit Timestamp und Metadaten.
## Akzeptanzkriterien
- Ein Tastendruck speichert ein Bild.
- Dateiname enthält Timestamp.
- Auflösung und Kameraindex werden protokolliert.
## Erweiterungen
- Speichere zusätzlich ein kleines JSON neben dem Bild.
## Reflexionsfragen
- Welche Metadaten helfen beim Debugging?
- Warum sind Testbilder sensibel?
- Wie organisierst du Beispielbilder?
@@ -0,0 +1,38 @@
# Aufgabe 03: FPS und Latenz messen
## Ziel
Du misst Bildrate und einfache Verarbeitungslatenz.
## Warum ist das wichtig?
Der Roboter muss schnell genug sehen, um den Kopf sinnvoll zu bewegen.
## Voraussetzungen
- Aufgaben 01-02
- Zeitmessung
## Theorie
FPS beschreibt Durchsatz, Latenz beschreibt Verzögerung. Beide Werte sind verschieden und für Robotik wichtig.
## Aufgabe
Baue eine FPS-Anzeige und miss die Zeit für Lesen, Verarbeiten und Anzeigen pro Frame.
## Akzeptanzkriterien
- FPS wird im Bild oder Terminal angezeigt.
- Einzelzeiten werden gemessen.
- Durchschnittswerte über mehrere Sekunden sind sichtbar.
## Erweiterungen
- Exportiere Messungen als CSV.
## Reflexionsfragen
- Warum ist hohe FPS nicht automatisch niedrige Latenz?
- Welche Verarbeitung ist teuer?
- Welche FPS reichen für Kopftracking?
@@ -0,0 +1,38 @@
# Aufgabe 04: OpenCV-Grundlagen anwenden
## Ziel
Du übst Resize, Farbräume, Crops und einfache Filter.
## Warum ist das wichtig?
Viele Modelle erwarten bestimmte Bildformate und Größen.
## Voraussetzungen
- Aufgaben 01-03
- OpenCV
## Theorie
Computer Vision beginnt oft mit Vorverarbeitung. Resize spart Rechenzeit, Farbräume ändern die Bedeutung von Pixelwerten, Crops reduzieren irrelevante Bereiche.
## Aufgabe
Baue ein Tool, das ein Kamerabild in Graustufen, RGB, HSV, Resize und Crop-Ansicht zeigt.
## Akzeptanzkriterien
- Mindestens drei Transformationen sind umschaltbar.
- Originalgröße und Ausgabegröße werden angezeigt.
- Code ist als wiederverwendbare Funktion strukturiert.
## Erweiterungen
- Füge Histogramm-Anzeige hinzu.
## Reflexionsfragen
- Wann verlierst du durch Resize relevante Details?
- Warum nutzt OpenCV oft BGR?
- Welche Transformation ist für YOLO unnötig?
@@ -0,0 +1,38 @@
# Aufgabe 05: Bounding Boxes zeichnen
## Ziel
Du zeichnest erkannte Bereiche mit Label und Confidence in Frames.
## Warum ist das wichtig?
Der Roboter muss Vision-Ergebnisse für Menschen und Logs sichtbar machen können.
## Voraussetzungen
- Aufgaben 01-04
- Koordinatenverständnis
## Theorie
Bounding Boxes übersetzen Modell-Ausgaben in Bildkoordinaten. Saubere Visualisierung hilft, Fehler bei Schwellenwerten und Skalierung zu sehen.
## Aufgabe
Schreibe eine Funktion, die Boxen, Labels und Scores auf ein Bild zeichnet und außerhalb liegende Koordinaten begrenzt.
## Akzeptanzkriterien
- Boxen werden korrekt gezeichnet.
- Labels bleiben lesbar.
- Ungültige Koordinaten crashen nicht.
## Erweiterungen
- Füge unterschiedliche Farben pro Klasse hinzu.
## Reflexionsfragen
- Welche Koordinatenformate gibt es?
- Wie erkennst du vertauschte x/y-Werte?
- Warum sind Labels in Debugbildern nützlich?
@@ -0,0 +1,38 @@
# Aufgabe 06: YOLO oder Detector integrieren
## Ziel
Du nutzt ein fertiges Objekterkennungsmodell auf Kamera-Frames.
## Warum ist das wichtig?
Personenzählung und Objektverständnis basieren auf Detektion statt auf reiner Klassifikation.
## Voraussetzungen
- Aufgaben 01-05
- YOLO/Ultralytics oder OpenCV DNN
## Theorie
Detektoren liefern Klassen, Boxen und Confidence. Sie sind probabilistisch und müssen mit Schwellenwerten interpretiert werden.
## Aufgabe
Integriere ein Modell und zeige erkannte Objekte im Livebild an.
## Akzeptanzkriterien
- Mindestens eine Objektklasse wird erkannt.
- Confidence wird angezeigt.
- Modellpfad oder Modellname ist konfigurierbar.
## Erweiterungen
- Teste CPU gegen GPU, falls verfügbar.
## Reflexionsfragen
- Warum reicht Bildklassifikation nicht?
- Welche Klassen sind für den Roboter nützlich?
- Wie gehst du mit langsamer Inferenz um?
+38
View File
@@ -0,0 +1,38 @@
# Aufgabe 07: Personen zählen
## Ziel
Du filterst Detektionen auf Personen und gibst die Anzahl aus.
## Warum ist das wichtig?
Der finale Agent soll Fragen wie "Wie viele Personen sind im Raum?" beantworten.
## Voraussetzungen
- Aufgabe 06
- Testbilder mit Personen
## Theorie
Zählen ist eine Interpretationsschicht über Detektion. Du musst Klassenfilter, Confidence und doppelte Boxen beachten.
## Aufgabe
Baue `count-people`, das Livebild oder Einzelbild verarbeitet und Anzahl plus Debugbild ausgibt.
## Akzeptanzkriterien
- Personen werden gezählt.
- Niedrige Confidence wird gefiltert.
- Debugbild zeigt gezählte Personen.
## Erweiterungen
- Biete `--image` und `--camera` Modi an.
## Reflexionsfragen
- Welche Personen werden übersehen?
- Wann zählt das System doppelt?
- Wie erklärst du Unsicherheit in der Antwort?
@@ -0,0 +1,37 @@
# Aufgabe 08: Confidence und NMS verstehen
## Ziel
Du experimentierst mit Confidence Thresholds und Non-Maximum Suppression.
## Warum ist das wichtig?
Falsche oder doppelte Detektionen machen Roboterantworten unglaubwürdig.
## Voraussetzungen
- Aufgaben 06-07
## Theorie
Confidence ist kein Wahrheitswert, sondern Modellvertrauen. NMS entfernt überlappende Boxen, damit ein Objekt nicht mehrfach gezählt wird.
## Aufgabe
Erstelle ein Experiment, das verschiedene Thresholds und NMS-Werte auf denselben Bildern vergleicht.
## Akzeptanzkriterien
- Mindestens drei Thresholds werden verglichen.
- Doppelte Boxen werden sichtbar reduziert.
- Entscheidung für Default-Werte ist begründet.
## Erweiterungen
- Visualisiere Ergebnisse als Kontaktbogen.
## Reflexionsfragen
- Warum ist hoher Threshold nicht immer besser?
- Was passiert bei überlappenden Personen?
- Welche Antwort sollte der Roboter bei Unsicherheit geben?
@@ -0,0 +1,38 @@
# Aufgabe 09: HTTP Vision Service bauen
## Ziel
Du stellst Personen- und Objektzählung als HTTP-Service bereit.
## Warum ist das wichtig?
Der Agent soll Vision als Tool nutzen, ohne direkt OpenCV-Code zu kennen.
## Voraussetzungen
- Aufgaben 06-08
- FastAPI oder Axum
## Theorie
Ein Service trennt Vision-Laufzeit von Agent-Logik. Schnittstellen müssen klein, stabil und testbar sein.
## Aufgabe
Baue Endpoints für `/health`, `/vision/people/count` und optional `/vision/objects`.
## Akzeptanzkriterien
- Healthcheck antwortet schnell.
- Personenanzahl kommt als JSON.
- Fehler enthalten verständliche Codes.
## Erweiterungen
- Füge Request-ID und einfache Metriken hinzu.
## Reflexionsfragen
- Warum ist HTTP hier einfacher als direkte Imports?
- Welche Daten sollte der Service nicht zurückgeben?
- Wie testest du den Endpoint ohne Kamera?
+19
View File
@@ -0,0 +1,19 @@
# Computer Vision
Kamera, OpenCV, Detektion, Personen zählen und ein HTTP Vision Service.
## Aufgaben
- [01: Kamera öffnen und Frames anzeigen](01-kamera-oeffnen-und-frames-anzeigen.md)
- [02: Frames lesen und Bilder speichern](02-frames-lesen-und-bilder-speichern.md)
- [03: FPS und Latenz messen](03-fps-und-latenz-messen.md)
- [04: OpenCV-Grundlagen anwenden](04-opencv-grundlagen-anwenden.md)
- [05: Bounding Boxes zeichnen](05-bounding-boxes-zeichnen.md)
- [06: YOLO oder Detector integrieren](06-yolo-oder-detector-integrieren.md)
- [07: Personen zählen](07-personen-zaehlen.md)
- [08: Confidence und NMS verstehen](08-confidence-und-nms-verstehen.md)
- [09: HTTP Vision Service bauen](09-http-vision-service-bauen.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,39 @@
# Aufgabe 01: Face Detection testen
## Ziel
Du erkennst Gesichter im Kamerabild oder auf Testfotos.
## Warum ist das wichtig?
Face Recognition beginnt mit der Frage, wo überhaupt Gesichter sind.
## Voraussetzungen
- Kamera oder Testbilder
- Python
- Face-Detection-Bibliothek
## Theorie
Detection und Recognition sind verschiedene Schritte. Zuerst wird ein Gesicht lokalisiert, erst danach wird es verglichen.
## Aufgabe
Baue ein Skript, das Gesichter markiert und Debugbilder speichert.
## Akzeptanzkriterien
- Gesichter werden mit Box markiert.
- Mehrere Gesichter sind möglich.
- Keine-Gesicht-Fall wird sauber behandelt.
## Erweiterungen
- Vergleiche zwei Detector-Varianten.
## Reflexionsfragen
- Wann scheitert Face Detection?
- Wie beeinflussen Licht und Winkel das Ergebnis?
- Warum ist Detection nicht gleich Identität?
@@ -0,0 +1,38 @@
# Aufgabe 02: Face Embeddings berechnen
## Ziel
Du wandelst erkannte Gesichter in numerische Embeddings um.
## Warum ist das wichtig?
Bekannte Personen werden über Ähnlichkeit in einem Vektorraum erkannt.
## Voraussetzungen
- Aufgabe 01
- Embedding-Modell
## Theorie
Ein Embedding beschreibt ein Gesicht als Vektor. Ähnliche Gesichter liegen näher beieinander, aber der Abstand ist nie eine absolute Identitätsgarantie.
## Aufgabe
Extrahiere Embeddings aus Testbildern und speichere sie mit Metadaten.
## Akzeptanzkriterien
- Embedding-Vektor wird erzeugt.
- Metadaten enthalten Person, Bild und Datum.
- Fehlerhafte Crops werden ausgeschlossen.
## Erweiterungen
- Visualisiere Distanzen zwischen Beispielbildern.
## Reflexionsfragen
- Warum speicherst du nicht nur Namen?
- Was bedeutet Nähe im Vektorraum?
- Welche Metadaten helfen später?
@@ -0,0 +1,38 @@
# Aufgabe 03: Bekannte Personen enrollen
## Ziel
Du baust einen Enrollment-Prozess für bekannte Personen mit Einwilligung.
## Warum ist das wichtig?
Der Roboter soll bekannte Menschen begrüßen, aber nur mit bewusst angelegten Daten.
## Voraussetzungen
- Aufgaben 01-02
- Consent-Regeln aus Modul 00
## Theorie
Enrollment ist ein kontrollierter Datenerfassungsprozess. Mehrere Bilder pro Person erhöhen Robustheit, müssen aber verantwortungsvoll gespeichert werden.
## Aufgabe
Implementiere `enroll-person NAME`, nimm mehrere Bilder auf, berechne Embeddings und speichere ein Profil.
## Akzeptanzkriterien
- Mehrere Samples pro Person werden gespeichert.
- Consent-Hinweis ist dokumentiert.
- Bestehende Profile werden nicht versehentlich überschrieben.
## Erweiterungen
- Füge `delete-person NAME` hinzu.
## Reflexionsfragen
- Wie viele Samples sind sinnvoll?
- Wie erklärst du die Speicherung?
- Was muss beim Löschen entfernt werden?
@@ -0,0 +1,37 @@
# Aufgabe 04: Unbekannte Personen erkennen
## Ziel
Du vergleichst neue Gesichter gegen bekannte Profile und gibst bekannt oder unbekannt zurück.
## Warum ist das wichtig?
Der Agent braucht eine ehrliche Antwort: erkannt, unbekannt oder unsicher.
## Voraussetzungen
- Aufgaben 02-03
## Theorie
Recognition ist ein Ähnlichkeitsvergleich mit Schwelle. Zu niedrige Schwellen erzeugen False Positives, zu hohe Schwellen übersehen bekannte Personen.
## Aufgabe
Baue `recognize-faces`, das Namen, Distanz und Status für jedes Gesicht ausgibt.
## Akzeptanzkriterien
- Bekannte Person wird mit Distanz ausgegeben.
- Unbekannte Person bleibt unbekannt.
- Unsichere Fälle werden nicht als sicher behauptet.
## Erweiterungen
- Gib Top-3 Kandidaten im Debugmodus aus.
## Reflexionsfragen
- Warum ist "unsicher" ein wichtiger Status?
- Welche Schwelle erzeugt False Positives?
- Wie sollte der Roboter höflich antworten?
@@ -0,0 +1,38 @@
# Aufgabe 05: Schwellenwerte und False Positives testen
## Ziel
Du misst, wie sich Ähnlichkeitsschwellen auf Treffer und Fehler auswirken.
## Warum ist das wichtig?
Falsche Identifikation ist sozial und datenschutzrechtlich heikler als keine Identifikation.
## Voraussetzungen
- Aufgaben 03-04
- Testbilder verschiedener Personen
## Theorie
Schwellenwerte sind Produktentscheidungen, nicht nur Technik. Du musst wählen, ob das System vorsichtig oder aggressiv erkennt.
## Aufgabe
Erstelle ein kleines Testset und vergleiche mehrere Schwellenwerte mit einer Ergebnis-Tabelle.
## Akzeptanzkriterien
- False Positives und False Negatives werden gezählt.
- Eine Default-Schwelle ist begründet.
- Unsicherheitsbereich ist definiert.
## Erweiterungen
- Füge ROC-ähnliche Visualisierung hinzu.
## Reflexionsfragen
- Welcher Fehler ist schlimmer?
- Wie wirkt schlechtes Licht auf Distanzen?
- Wann sollte der Roboter nachfragen?
@@ -0,0 +1,38 @@
# Aufgabe 06: Face Recognition Service bauen
## Ziel
Du stellst Enrollment und Recognition als HTTP-Service bereit.
## Warum ist das wichtig?
Der Agent soll Personenidentifikation als klar begrenztes Tool aufrufen.
## Voraussetzungen
- Aufgaben 03-05
- FastAPI oder Axum
## Theorie
Ein eigener Service kapselt Modellabhängigkeiten und Datenschutzregeln. Er kann später ersetzt werden, ohne den Agenten umzubauen.
## Aufgabe
Baue Endpoints für `/health`, `/faces/enroll`, `/faces/recognize` und `/faces/profiles`.
## Akzeptanzkriterien
- Healthcheck funktioniert.
- Recognition liefert strukturierte JSON-Ergebnisse.
- Enrollment validiert Name und Consent-Flag.
## Erweiterungen
- Füge Zugriffsschutz für Enrollment hinzu.
## Reflexionsfragen
- Welche Endpoints sind gefährlich?
- Welche Rohdaten sollten nie im Response landen?
- Wie testest du ohne echte Kamera?
@@ -0,0 +1,37 @@
# Aufgabe 07: Agent Tool identify_people integrieren
## Ziel
Du verbindest den Face-Service mit dem Agenten als Tool `identify_people`.
## Warum ist das wichtig?
Der finale Roboter soll auf Fragen nach bekannten Personen datenbasiert antworten.
## Voraussetzungen
- Aufgaben 06 und Modul 01 Aufgabe 08
## Theorie
Das Tool liefert strukturierte Beobachtungen. Das LLM formuliert daraus eine natürliche Antwort, darf aber keine Identität erfinden.
## Aufgabe
Ergänze das Tool Schema, den Dispatcher und einen Prompt-Test für "Erkennst du jemanden?".
## Akzeptanzkriterien
- Tool Call ruft den Service auf.
- Unbekannte und unsichere Personen werden korrekt formuliert.
- Fehler des Services werden freundlich erklärt.
## Erweiterungen
- Lass den Agenten bekannte Personen begrüßen.
## Reflexionsfragen
- Welche Formulierung passt bei Unsicherheit?
- Was darf das LLM nicht dazuerfinden?
- Wie begrenzt du Identifikationsanfragen?
+17
View File
@@ -0,0 +1,17 @@
# Face Recognition
Gesichter erkennen, Embeddings, Enrollment, Schwellenwerte, Datenschutz und Agent-Integration.
## Aufgaben
- [01: Face Detection testen](01-face-detection-testen.md)
- [02: Face Embeddings berechnen](02-face-embeddings-berechnen.md)
- [03: Bekannte Personen enrollen](03-bekannte-personen-enrollen.md)
- [04: Unbekannte Personen erkennen](04-unbekannte-personen-erkennen.md)
- [05: Schwellenwerte und False Positives testen](05-schwellenwerte-und-false-positives-testen.md)
- [06: Face Recognition Service bauen](06-face-recognition-service-bauen.md)
- [07: Agent Tool identify_people integrieren](07-agent-tool-identify-people-integrieren.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,39 @@
# Aufgabe 01: Servo-Grundlagen verstehen
## Ziel
Du steuerst einen einzelnen Servo sicher in wenige Testpositionen.
## Warum ist das wichtig?
Der Roboterkopf bewegt reale Mechanik; Fehler können Bauteile beschädigen.
## Voraussetzungen
- Servo
- geeignete Stromversorgung
- Raspberry Pi/PCA9685 oder Simulator
## Theorie
Servos werden über PWM-Signale positioniert. Sie ziehen unter Last deutlich mehr Strom als ein GPIO liefern kann.
## Aufgabe
Baue einen minimalen Test, der Mitte, links und rechts anfährt oder im Simulator ausgibt.
## Akzeptanzkriterien
- Servo bewegt sich kontrolliert oder Simulation zeigt Werte.
- Stromversorgung ist dokumentiert.
- Winkel bleiben in sicherem Bereich.
## Erweiterungen
- Miss Stromaufnahme unter Last, falls möglich.
## Reflexionsfragen
- Warum darf ein Servo nicht direkt aus jedem Pin versorgt werden?
- Was ist die Neutralposition?
- Welche Bewegung wäre mechanisch riskant?
@@ -0,0 +1,38 @@
# Aufgabe 02: PWM und Winkel kalibrieren
## Ziel
Du ermittelst die Pulsbreiten oder Controllerwerte für reale Winkel.
## Warum ist das wichtig?
Jeder Servo und jede Mechanik hat eigene Grenzen.
## Voraussetzungen
- Aufgabe 01
- Lineal oder Winkelmarkierung
## Theorie
PWM-Werte sind nicht automatisch Gradwerte. Kalibrierung verbindet Softwarekoordinaten mit realer Mechanik.
## Aufgabe
Erstelle eine Kalibrierdatei mit min, max, center und optional invert pro Achse.
## Akzeptanzkriterien
- Grenzwerte sind sicher getestet.
- Center-Position ist reproduzierbar.
- Config wird vom Testprogramm geladen.
## Erweiterungen
- Baue einen interaktiven Kalibriermodus.
## Reflexionsfragen
- Warum sind Herstellerwerte nur Startpunkte?
- Wie erkennst du mechanischen Anschlag?
- Warum ist Invert pro Achse nützlich?
@@ -0,0 +1,38 @@
# Aufgabe 03: Stromversorgung und Not-Aus planen
## Ziel
Du baust Sicherheitsregeln für Servo-Strom und Abschaltung.
## Warum ist das wichtig?
Instabile Stromversorgung verursacht Resets, Zittern und gefährliche Bewegungen.
## Voraussetzungen
- Aufgaben 01-02
- Grundwissen Elektrik
## Theorie
Motoren sind elektrische Lasten mit Spitzenströmen. Gemeinsame Masse, externe Versorgung und Sicherungen sind praktische Grundregeln.
## Aufgabe
Dokumentiere Verdrahtung, Strombudget, gemeinsame Masse und eine Not-Aus-Strategie.
## Akzeptanzkriterien
- Strombedarf pro Servo ist geschätzt.
- Gemeinsame Masse ist erklärt.
- Not-Aus oder Software-Disable ist definiert.
## Erweiterungen
- Füge eine Sicherung oder Schalter in den Plan ein.
## Reflexionsfragen
- Was passiert bei zu schwachem Netzteil?
- Warum braucht Signal eine gemeinsame Masse?
- Wie hältst du die Mechanik bei Softwarecrash sicher?
@@ -0,0 +1,38 @@
# Aufgabe 04: Pan-Tilt-Kopf montieren
## Ziel
Du montierst zwei Achsen und definierst ein Koordinatensystem.
## Warum ist das wichtig?
Pan und Tilt sind die sichtbare Körperlichkeit des Roboterkopfs.
## Voraussetzungen
- Aufgaben 01-03
- Pan-Tilt-Halterung
## Theorie
Ein Koordinatensystem verhindert Verwirrung: Pan links/rechts, Tilt hoch/runter, Center als ruhige Ausgangslage.
## Aufgabe
Montiere oder simuliere den Kopf und schreibe Kommandos für center, left, right, up und down.
## Akzeptanzkriterien
- Alle Grundrichtungen funktionieren.
- Koordinaten sind dokumentiert.
- Center ist sicher und wiederholbar.
## Erweiterungen
- Füge ein kleines CLI-Menü hinzu.
## Reflexionsfragen
- Welche Richtung ist positiv?
- Wie groß darf Tilt werden?
- Welche Kabelbewegung begrenzt Pan?
@@ -0,0 +1,37 @@
# Aufgabe 05: Sichere Winkelbereiche erzwingen
## Ziel
Du kapselst Winkelbegrenzung zentral in Code und Config.
## Warum ist das wichtig?
Das LLM oder ein Bug darf keine gefährlichen Servopositionen direkt auslösen.
## Voraussetzungen
- Aufgabe 04
## Theorie
Sicherheitsgrenzen gehören in die unterste Motion-Schicht. Höhere Schichten dürfen nur innerhalb dieser Grenzen arbeiten.
## Aufgabe
Implementiere `clamp_angle` oder einen Motion-Controller, der alle Zielwinkel validiert und begrenzt.
## Akzeptanzkriterien
- Zu große Winkel werden begrenzt oder abgelehnt.
- Grenzen kommen aus Config.
- Tests decken Grenzfälle ab.
## Erweiterungen
- Unterscheide harte Fehler und sanftes Clamping.
## Reflexionsfragen
- Wo sollte die Sicherheitsgrenze liegen?
- Wann ist Ablehnen besser als Clamping?
- Wie loggst du gefährliche Befehle?
@@ -0,0 +1,37 @@
# Aufgabe 06: Sanfte Bewegungen implementieren
## Ziel
Du bewegst den Kopf in kleinen Schritten statt mit abrupten Sprüngen.
## Warum ist das wichtig?
Ruckartige Bewegungen wirken schlecht und belasten Mechanik und Stromversorgung.
## Voraussetzungen
- Aufgaben 04-05
## Theorie
Motion Profiles beschreiben Geschwindigkeit und Beschleunigung. Schon lineare Schritte sind besser als direkte Sprünge.
## Aufgabe
Baue eine Funktion `move_to(pan, tilt, duration_ms)`, die Zwischenpositionen erzeugt.
## Akzeptanzkriterien
- Bewegung ist sichtbar sanfter.
- Dauer ist konfigurierbar.
- Neue Ziele können kontrolliert behandelt werden.
## Erweiterungen
- Teste Ease-in/ease-out.
## Reflexionsfragen
- Warum sind Sprünge problematisch?
- Wie reagierst du auf neue Befehle während Bewegung?
- Welche Geschwindigkeit wirkt angenehm?
@@ -0,0 +1,38 @@
# Aufgabe 07: Motion API bereitstellen
## Ziel
Du stellst Kopfbewegungen als lokalen Service bereit.
## Warum ist das wichtig?
Der Agent soll Motion als Tool nutzen, ohne Servo-Code zu importieren.
## Voraussetzungen
- Aufgaben 05-06
- HTTP-Grundlagen
## Theorie
Eine Motion API ist eine Hardwaregrenze. Sie validiert, begrenzt und kann im Simulationsmodus laufen.
## Aufgabe
Baue `/health`, `/motion/head/look`, `/motion/head/center` und `/motion/head/state`.
## Akzeptanzkriterien
- Look akzeptiert nur sichere Ziele.
- State liefert aktuelle Position.
- Simulationsmodus funktioniert ohne Hardware.
## Erweiterungen
- Füge Auth oder Localhost-Beschränkung hinzu.
## Reflexionsfragen
- Welche Befehle dürfen remote erreichbar sein?
- Warum ist Simulationsmodus wichtig?
- Welche Zustände braucht die API?
@@ -0,0 +1,38 @@
# Aufgabe 08: Agent Tool look integrieren
## Ziel
Du verbindest die Motion API mit dem Agenten-Tool `look`.
## Warum ist das wichtig?
Sprachbefehle wie "Schau nach links" sollen kontrolliert Hardware bewegen.
## Voraussetzungen
- Aufgabe 07
- Modul 01 Aufgabe 08
## Theorie
Das LLM interpretiert Sprache, aber die Motion-Schicht entscheidet über erlaubte Zielwerte. Natürliche Richtungen werden auf sichere Winkel übersetzt.
## Aufgabe
Ergänze Tool Schema und Dispatcher für `look(direction)` mit left, right, up, down, center.
## Akzeptanzkriterien
- Sprachbefehl löst Motion API aus.
- Ungültige Richtung wird abgelehnt.
- Agent bestätigt kurz die Bewegung.
## Erweiterungen
- Erlaube relative Winkel im Debugmodus.
## Reflexionsfragen
- Welche Wörter mapst du auf Richtungen?
- Was passiert bei widersprüchlichen Befehlen?
- Wie bestätigst du Bewegung knapp per Sprache?
@@ -0,0 +1,37 @@
# Aufgabe 09: Person im Bild zentrieren
## Ziel
Du nutzt Vision-Boxen, um den Kopf langsam auf eine Person auszurichten.
## Warum ist das wichtig?
Der Roboter wirkt präsenter, wenn er Personen im Bild verfolgen kann.
## Voraussetzungen
- Aufgaben Modul 03 Aufgabe 07 und Modul 05 Aufgabe 06
## Theorie
Zentrierung ist eine einfache Regelung: Fehler zwischen Bildmitte und Boxmitte wird in Pan/Tilt-Korrektur übersetzt.
## Aufgabe
Implementiere einen Prototyp, der eine erkannte Person auswählt und kleine Pan/Tilt-Korrekturen ausgibt oder ausführt.
## Akzeptanzkriterien
- Boxmitte wird berechnet.
- Korrektur bleibt begrenzt.
- Bei keiner Person fährt der Kopf nicht hektisch.
## Erweiterungen
- Füge Totzone gegen Zittern hinzu.
## Reflexionsfragen
- Warum braucht Tracking eine Totzone?
- Welche Person wählst du bei mehreren?
- Wie verhinderst du Oszillation?
+19
View File
@@ -0,0 +1,19 @@
# Robot Motion
Servo-Grundlagen, PWM, Pan-Tilt-Mechanik, Motion API und visuelles Zentrieren.
## Aufgaben
- [01: Servo-Grundlagen verstehen](01-servo-grundlagen-verstehen.md)
- [02: PWM und Winkel kalibrieren](02-pwm-und-winkel-kalibrieren.md)
- [03: Stromversorgung und Not-Aus planen](03-stromversorgung-und-not-aus-planen.md)
- [04: Pan-Tilt-Kopf montieren](04-pan-tilt-kopf-montieren.md)
- [05: Sichere Winkelbereiche erzwingen](05-sichere-winkelbereiche-erzwingen.md)
- [06: Sanfte Bewegungen implementieren](06-sanfte-bewegungen-implementieren.md)
- [07: Motion API bereitstellen](07-motion-api-bereitstellen.md)
- [08: Agent Tool look integrieren](08-agent-tool-look-integrieren.md)
- [09: Person im Bild zentrieren](09-person-im-bild-zentrieren.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,37 @@
# Aufgabe 01: Service-Schnitt entwerfen
## Ziel
Du entscheidest, welche Komponenten eigene Services werden.
## Warum ist das wichtig?
AI, Voice, Vision und Motion haben unterschiedliche Laufzeiten, Risiken und Abhängigkeiten.
## Voraussetzungen
- Module 01-05 überblicken
## Theorie
Mehrere Services erhöhen Komplexität, begrenzen aber Fehler. Vision kann abstürzen, ohne den Agenten komplett mitzunehmen.
## Aufgabe
Zeichne eine Service-Architektur mit Agent/Orchestrator, Voice, Vision, Face und Motion.
## Akzeptanzkriterien
- Alle Services haben klare Verantwortungen.
- Datenflüsse sind beschriftet.
- Fehlergrenzen sind markiert.
## Erweiterungen
- Ergänze Ports und Protokolle.
## Reflexionsfragen
- Welche Komponente darf Hardware berühren?
- Wo entstehen personenbezogene Daten?
- Welcher Service ist kritisch für Sicherheit?
@@ -0,0 +1,38 @@
# Aufgabe 02: Rust Orchestrator skizzieren
## Ziel
Du entwirfst den zentralen Orchestrator für Dialog, Tools und State.
## Warum ist das wichtig?
Rust eignet sich gut für robuste Service-Logik, Konfiguration und kontrollierte Nebenläufigkeit.
## Voraussetzungen
- Modul 01 abgeschlossen
- Rust Grundlagen
## Theorie
Der Orchestrator ist nicht das Modell, sondern der Koordinator. Er ruft Services auf, validiert Ergebnisse und hält Session-State.
## Aufgabe
Lege ein Rust-Projekt oder eine Architektur-Skizze mit Modulen für config, tools, agent, state und clients an.
## Akzeptanzkriterien
- Module sind klar benannt.
- Externe Services werden über Clients gekapselt.
- Config ist getrennt vom Code.
## Erweiterungen
- Baue einen `/health` Endpoint.
## Reflexionsfragen
- Welche Logik gehört nicht in Python-Skripte?
- Was muss synchron und was asynchron sein?
- Wie testest du Service-Clients?
@@ -0,0 +1,37 @@
# Aufgabe 03: Python Vision Service isolieren
## Ziel
Du kapselst OpenCV/Modelle in einem eigenen Servicevertrag.
## Warum ist das wichtig?
AI- und CV-Bibliotheken ändern sich schnell und sollten den Orchestrator nicht belasten.
## Voraussetzungen
- Modul 03 Aufgabe 09
## Theorie
Python ist hier praktisch, weil Modelle und Bibliotheken gut verfügbar sind. Der Vertrag nach außen sollte trotzdem stabil und klein bleiben.
## Aufgabe
Definiere Request/Response-Modelle für Vision und schreibe einen Client-Stub im Orchestrator.
## Akzeptanzkriterien
- Schema enthält Count und optional Detections.
- Orchestrator kennt keine OpenCV-Typen.
- Fehler werden in Codes übersetzt.
## Erweiterungen
- Generiere OpenAPI-Doku.
## Reflexionsfragen
- Warum ist ein kleines JSON besser als Rohframes?
- Welche Modellinfos sind im Response nützlich?
- Was passiert bei kaltem Modellstart?
@@ -0,0 +1,37 @@
# Aufgabe 04: Voice Service abgrenzen
## Ziel
Du trennst Audioaufnahme, STT und TTS von Agent-Logik.
## Warum ist das wichtig?
Audio hat eigene Geräte, Threads und Latenzprobleme.
## Voraussetzungen
- Modul 02 Aufgabe 07
## Theorie
Voice kann als Prozess, Service oder lokale Bibliothek laufen. Wichtig ist eine klare Grenze zwischen gesprochenem Text und Dialogentscheidung.
## Aufgabe
Definiere eine Voice-Schnittstelle mit `listen`, `speak`, Status und Fehlerfällen.
## Akzeptanzkriterien
- STT und TTS sind als Operationen getrennt.
- Aktive Aufnahme ist erkennbar.
- Orchestrator bekommt Text statt Audio.
## Erweiterungen
- Füge Queue-Status hinzu.
## Reflexionsfragen
- Welche Audio-Daten müssen den Prozess verlassen?
- Wie gehst du mit TTS-Abbruch um?
- Wann ist ein lokaler Prozess besser als HTTP?
@@ -0,0 +1,38 @@
# Aufgabe 05: REST, gRPC und MQTT vergleichen
## Ziel
Du bewertest Kommunikationsformen für die Roboterarchitektur.
## Warum ist das wichtig?
Nicht jedes Protokoll passt zu jedem Datenfluss.
## Voraussetzungen
- Module 01-05
- Grundwissen Netzwerk
## Theorie
REST ist einfach für Request/Response, gRPC typisiert stärker, MQTT passt gut zu Events und lose gekoppelten Sensoren.
## Aufgabe
Erstelle eine Entscheidungstabelle für Tools, Events, Telemetrie und Streaming.
## Akzeptanzkriterien
- REST, gRPC und MQTT werden verglichen.
- Mindestens drei konkrete Roboterfälle sind bewertet.
- Eine Startentscheidung ist festgelegt.
## Erweiterungen
- Implementiere einen kleinen REST- und MQTT-Prototyp.
## Reflexionsfragen
- Welche Calls brauchen Antwort?
- Welche Daten sind Events?
- Wo ist Streaming wirklich nötig?
@@ -0,0 +1,37 @@
# Aufgabe 06: Event-basierte Kommunikation einführen
## Ziel
Du modellierst Ereignisse wie PersonDetected, SpeechStarted und MotionCompleted.
## Warum ist das wichtig?
Events helfen, Zustände zu beobachten, ohne jede Komponente direkt zu koppeln.
## Voraussetzungen
- Aufgabe 05
## Theorie
Events beschreiben, dass etwas passiert ist. Commands fordern etwas an. Diese Trennung verhindert viele Architekturfehler.
## Aufgabe
Definiere ein kleines Event-Schema und baue einen lokalen Event-Bus oder eine In-Memory-PubSub-Simulation.
## Akzeptanzkriterien
- Mindestens fünf Events sind definiert.
- Commands und Events sind getrennt.
- Logs zeigen Event-Reihenfolge.
## Erweiterungen
- Nutze MQTT oder NATS als Experiment.
## Reflexionsfragen
- Warum ist `LookLeft` kein Event?
- Welche Events sind personenbezogen?
- Wie vermeidest du Event-Flut?
@@ -0,0 +1,38 @@
# Aufgabe 07: Docker Compose für Services
## Ziel
Du startest mehrere Services reproduzierbar zusammen.
## Warum ist das wichtig?
Der finale Roboter besteht aus mehreren Prozessen, die gemeinsam laufen müssen.
## Voraussetzungen
- Aufgaben 02-06
- Docker Grundlagen
## Theorie
Compose ist kein Produktionsorchester, aber sehr gut für lokale Entwicklung. Es dokumentiert Ports, Umgebungsvariablen und Startreihenfolge.
## Aufgabe
Erstelle eine Compose-Datei für Orchestrator, Vision, Face und optional Voice im Mockmodus.
## Akzeptanzkriterien
- Services starten mit einem Befehl.
- Healthchecks sind definiert.
- Volumes für Modelle/Daten sind bewusst gewählt.
## Erweiterungen
- Füge Profile für hardware und mock hinzu.
## Reflexionsfragen
- Welche Services brauchen Gerätezugriff?
- Was gehört nicht ins Image?
- Wie startest du nur einen Teil des Systems?
@@ -0,0 +1,37 @@
# Aufgabe 08: Config Management strukturieren
## Ziel
Du verwaltest Ports, Modellnamen, Grenzwerte und Secrets sauber.
## Warum ist das wichtig?
Hartkodierte Werte machen Robotiktests fehleranfällig.
## Voraussetzungen
- Aufgaben 02-07
## Theorie
Konfiguration hat Schichten: Defaults, Datei, Umgebungsvariablen und Secrets. Sicherheitsgrenzen sollten sichtbar und versioniert sein, Secrets nicht.
## Aufgabe
Definiere ein Config-Format und lade es in mindestens einem Service.
## Akzeptanzkriterien
- Ports und URLs kommen aus Config.
- Servo-Grenzen sind konfigurierbar.
- Secrets werden nicht committet.
## Erweiterungen
- Füge Config-Validierung beim Start hinzu.
## Reflexionsfragen
- Welche Werte ändern sich pro Maschine?
- Welche Defaults sind gefährlich?
- Wie dokumentierst du Secrets ohne sie zu speichern?
@@ -0,0 +1,37 @@
# Aufgabe 09: Observability und Health Checks
## Ziel
Du baust Logs, Healthchecks und einfache Metriken über Services hinweg.
## Warum ist das wichtig?
Ohne Beobachtbarkeit wird ein integrierter Roboter kaum debuggbar.
## Voraussetzungen
- Aufgaben 07-08
## Theorie
Health sagt, ob ein Service grundsätzlich lebt. Logs erklären Abläufe. Metriken zeigen Trends wie Latenz, FPS und Fehlerhäufigkeit.
## Aufgabe
Ergänze strukturierte Logs, `/health` und mindestens drei Metriken im Architekturplan oder Prototyp.
## Akzeptanzkriterien
- Jeder Service hat Healthcheck.
- Logs enthalten Request-ID.
- Latenz wird pro Tool Call gemessen.
## Erweiterungen
- Füge Tracing über mehrere Services hinzu.
## Reflexionsfragen
- Welche Metrik zeigt schlechte Nutzererfahrung?
- Welche Logs enthalten sensible Daten?
- Wie korrelierst du einen Sprachbefehl mit Motion?
+19
View File
@@ -0,0 +1,19 @@
# Systemarchitektur
Service-Schnitt, Rust-Orchestrator, Python-Services, Kommunikation, Konfiguration und Betrieb.
## Aufgaben
- [01: Service-Schnitt entwerfen](01-service-schnitt-entwerfen.md)
- [02: Rust Orchestrator skizzieren](02-rust-orchestrator-skizzieren.md)
- [03: Python Vision Service isolieren](03-python-vision-service-isolieren.md)
- [04: Voice Service abgrenzen](04-voice-service-abgrenzen.md)
- [05: REST, gRPC und MQTT vergleichen](05-rest-grpc-und-mqtt-vergleichen.md)
- [06: Event-basierte Kommunikation einführen](06-event-basierte-kommunikation-einfuehren.md)
- [07: Docker Compose für Services](07-docker-compose-fuer-services.md)
- [08: Config Management strukturieren](08-config-management-strukturieren.md)
- [09: Observability und Health Checks](09-observability-und-health-checks.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
+38
View File
@@ -0,0 +1,38 @@
# Aufgabe 01: ROS2 Zweck einordnen
## Ziel
Du verstehst, was ROS2 löst und was es nicht automatisch löst.
## Warum ist das wichtig?
ROS2 ist mächtig, aber für frühe AI-Prototypen nicht immer der beste Startpunkt.
## Voraussetzungen
- Linux
- Grundwissen Services
## Theorie
ROS2 bietet Kommunikationsmuster, Tools und Robotik-Konventionen. Es ersetzt aber keine gute Architektur und macht AI-Integration nicht magisch einfacher.
## Aufgabe
Schreibe eine kurze Entscheidungshilfe: Wann nutzt du ROS2 in diesem Projekt, wann bleibst du bei Services?
## Akzeptanzkriterien
- Mindestens drei Pro- und Contra-Punkte sind genannt.
- Bezug zum Roboterkopf ist konkret.
- Entscheidung für den Kursstand ist begründet.
## Erweiterungen
- Vergleiche mit MQTT/REST aus Modul 06.
## Reflexionsfragen
- Welches Problem löst ROS2 sofort?
- Was wird durch ROS2 komplexer?
- Wann lohnt sich die Migration?
@@ -0,0 +1,38 @@
# Aufgabe 02: Workspace und Package anlegen
## Ziel
Du richtest einen ROS2-Workspace mit einem einfachen Package ein.
## Warum ist das wichtig?
Alle weiteren ROS2-Übungen brauchen reproduzierbare Basisstruktur.
## Voraussetzungen
- ROS2 installiert
- Terminal
## Theorie
Ein Workspace enthält Packages, die mit colcon gebaut werden. Source-Setup entscheidet, welche Pakete im Terminal sichtbar sind.
## Aufgabe
Erstelle einen Workspace, ein Python- oder C++-Package und baue es mit colcon.
## Akzeptanzkriterien
- Build läuft ohne Fehler.
- Package ist nach `source install/setup...` sichtbar.
- README notiert die Befehle.
## Erweiterungen
- Füge einen `just`-Befehl fürs Build hinzu.
## Reflexionsfragen
- Warum muss setup gesourced werden?
- Was ist ein Package?
- Wie trennst du ROS2-Code vom Restprojekt?
+37
View File
@@ -0,0 +1,37 @@
# Aufgabe 03: Erste Node schreiben
## Ziel
Du schreibst eine Node, die regelmäßig Status loggt.
## Warum ist das wichtig?
Nodes sind die kleinste laufende Einheit in ROS2.
## Voraussetzungen
- Aufgabe 02
## Theorie
Eine Node kapselt Verhalten und kommuniziert über ROS2-Mechanismen. Timer sind ein einfacher Einstieg ohne externe Nachrichten.
## Aufgabe
Implementiere eine Node `robot_head_status`, die jede Sekunde einen Status ausgibt.
## Akzeptanzkriterien
- Node startet mit `ros2 run`.
- Timer läuft regelmäßig.
- Shutdown beendet sauber.
## Erweiterungen
- Füge Parameter für Intervall hinzu.
## Reflexionsfragen
- Was unterscheidet Node und Prozess?
- Wie stoppst du eine Node sauber?
- Welche Zustände sollte der Roboterkopf melden?
@@ -0,0 +1,37 @@
# Aufgabe 04: Topics publishen und subscriben
## Ziel
Du sendest und empfängst einfache Nachrichten über Topics.
## Warum ist das wichtig?
Sensor- und Statusdaten werden in ROS2 typischerweise über Topics verteilt.
## Voraussetzungen
- Aufgabe 03
## Theorie
Topics sind asynchrone Datenströme. Publisher kennen Subscriber nicht direkt, was lose Kopplung ermöglicht.
## Aufgabe
Baue einen Publisher für `person_count` und einen Subscriber, der den Wert loggt.
## Akzeptanzkriterien
- Topic ist mit `ros2 topic list` sichtbar.
- Nachrichten kommen regelmäßig an.
- Datentyp ist dokumentiert.
## Erweiterungen
- Nutze einen eigenen Message-Typ als Experiment.
## Reflexionsfragen
- Warum passt PersonCount zu Topic?
- Wann wäre ein Service besser?
- Wie debuggt man Topic-Daten?
@@ -0,0 +1,37 @@
# Aufgabe 05: Services in ROS2 nutzen
## Ziel
Du implementierst einen Request/Response-Service für Kopfzentrierung.
## Warum ist das wichtig?
Viele Roboteraktionen brauchen eine direkte Antwort, ob der Befehl angenommen wurde.
## Voraussetzungen
- Aufgaben 03-04
## Theorie
ROS2 Services sind synchrone oder request/response-artige Aufrufe. Sie passen zu kurzen Aktionen, nicht zu langen Bewegungen.
## Aufgabe
Baue einen Service `center_head`, der Erfolg und Nachricht zurückgibt.
## Akzeptanzkriterien
- Service ist per CLI aufrufbar.
- Antwort enthält Erfolg.
- Fehlerfall ist simuliert.
## Erweiterungen
- Verbinde den Service mit der Motion API im Mockmodus.
## Reflexionsfragen
- Warum ist ein langer Scan kein guter Service?
- Welche Antwort braucht ein Caller?
- Wie gehst du mit Timeout um?
@@ -0,0 +1,37 @@
# Aufgabe 06: Actions für längere Bewegungen
## Ziel
Du modellierst eine Scanbewegung als ROS2 Action.
## Warum ist das wichtig?
Lange Bewegungen brauchen Feedback, Fortschritt und Abbruchmöglichkeit.
## Voraussetzungen
- Aufgabe 05
## Theorie
Actions bestehen aus Goal, Feedback und Result. Sie passen zu Aufgaben, die dauern und eventuell abgebrochen werden sollen.
## Aufgabe
Implementiere oder skizziere eine Action `scan_for_person` mit Fortschritt und Ergebnis.
## Akzeptanzkriterien
- Goal kann gestartet werden.
- Feedback wird regelmäßig gesendet.
- Cancel ist bedacht oder implementiert.
## Erweiterungen
- Verbinde später mit Vision-Erkennung.
## Reflexionsfragen
- Warum ist Scan eine Action?
- Welche Feedbackdaten sind nützlich?
- Was passiert bei Cancel?
@@ -0,0 +1,37 @@
# Aufgabe 07: Launch Files und Parameter
## Ziel
Du startest mehrere Nodes mit Parametern über ein Launch File.
## Warum ist das wichtig?
Ein Roboter startet selten nur einen Prozess.
## Voraussetzungen
- Aufgaben 03-06
## Theorie
Launch Files beschreiben, welche Nodes mit welchen Parametern starten. Parameter machen Verhalten ohne Codeänderung anpassbar.
## Aufgabe
Erstelle ein Launch File für Status-, PersonCount- und Motion-Mock-Node.
## Akzeptanzkriterien
- Mehrere Nodes starten gemeinsam.
- Parameter werden gesetzt.
- Startbefehle sind dokumentiert.
## Erweiterungen
- Füge Namespace `robot_head` hinzu.
## Reflexionsfragen
- Welche Parameter ändern sich pro Umgebung?
- Warum sind Launch Files besser als viele Terminals?
- Wie organisierst du Namespaces?
+37
View File
@@ -0,0 +1,37 @@
# Aufgabe 08: TF grob verstehen
## Ziel
Du modellierst grob Koordinatenrahmen für Kamera und Kopf.
## Warum ist das wichtig?
Bewegung und Sicht brauchen gemeinsame Bezugssysteme.
## Voraussetzungen
- Aufgaben 04-07
## Theorie
TF beschreibt Transformationen zwischen Frames. Für den Kurs reicht zunächst zu verstehen, wo Kamera, Kopfmitte und Welt relativ zueinander liegen.
## Aufgabe
Zeichne Frames für base, head_pan, head_tilt und camera und beschreibe Transformationen qualitativ.
## Akzeptanzkriterien
- Mindestens vier Frames sind beschrieben.
- Parent/Child-Beziehungen sind klar.
- Bezug zur Pan-Tilt-Mechanik ist hergestellt.
## Erweiterungen
- Publiziere statische TFs als Experiment.
## Reflexionsfragen
- Warum ist Kameraposition wichtig?
- Was ändert sich bei Pan?
- Welche Vereinfachung ist für 2D-Tracking okay?
@@ -0,0 +1,38 @@
# Aufgabe 09: Bridge zur bestehenden Architektur
## Ziel
Du verbindest REST-Service und ROS2-Welt in einem kleinen Adapter.
## Warum ist das wichtig?
So kannst du bestehende Services nutzen, ohne alles sofort auf ROS2 umzuschreiben.
## Voraussetzungen
- Modul 06
- Aufgaben 04-08
## Theorie
Eine Bridge übersetzt zwischen Protokollen. Sie sollte dünn bleiben und keine Fachlogik verstecken.
## Aufgabe
Baue eine Node, die einen ROS2-Service oder Topic-Aufruf an einen bestehenden HTTP-Mock weiterleitet.
## Akzeptanzkriterien
- ROS2-Aufruf erreicht HTTP-Mock.
- Fehler werden übersetzt.
- Bridge-Code bleibt klein.
## Erweiterungen
- Bridge PersonCount Topic aus Vision-Service.
## Reflexionsfragen
- Welche Logik gehört nicht in die Bridge?
- Wie behandelst du HTTP-Timeouts?
- Wann würdest du native ROS2-Nodes schreiben?
+19
View File
@@ -0,0 +1,19 @@
# ROS2 Basics
Nodes, Topics, Services, Actions, Launch Files, Parameter, TF und Architektur-Brücken.
## Aufgaben
- [01: ROS2 Zweck einordnen](01-ros2-zweck-einordnen.md)
- [02: Workspace und Package anlegen](02-workspace-und-package-anlegen.md)
- [03: Erste Node schreiben](03-erste-node-schreiben.md)
- [04: Topics publishen und subscriben](04-topics-publishen-und-subscriben.md)
- [05: Services in ROS2 nutzen](05-services-in-ros2-nutzen.md)
- [06: Actions für längere Bewegungen](06-actions-fuer-laengere-bewegungen.md)
- [07: Launch Files und Parameter](07-launch-files-und-parameter.md)
- [08: TF grob verstehen](08-tf-grob-verstehen.md)
- [09: Bridge zur bestehenden Architektur](09-bridge-zur-bestehenden-architektur.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,37 @@
# Aufgabe 01: Projekt-Skeleton anlegen
## Ziel
Du legst die finale Projektstruktur für Orchestrator, Services, Config und Dokumentation an.
## Warum ist das wichtig?
Ein integriertes Projekt braucht Ordnung, bevor viele Teile zusammenkommen.
## Voraussetzungen
- Module 00-07 überblickt
## Theorie
Skeletons sind Architekturentscheidungen in Dateiform. Sie zeigen, wo Code, Config, Tests und Betriebsdateien leben.
## Aufgabe
Erstelle eine Struktur mit `orchestrator`, `services/vision`, `services/voice`, `services/motion`, `config`, `docs` und `scripts`.
## Akzeptanzkriterien
- Alle Hauptkomponenten haben Platz.
- README erklärt Startreihenfolge.
- Mockmodus ist vorgesehen.
## Erweiterungen
- Füge ein Top-Level-`justfile` hinzu.
## Reflexionsfragen
- Welche Struktur verhindert Kopplung?
- Wo liegen Testdaten?
- Was muss ohne Hardware laufen?
@@ -0,0 +1,38 @@
# Aufgabe 02: Voice Pipeline integrieren
## Ziel
Du bringst Push-to-Talk, STT und TTS in das finale Skeleton.
## Warum ist das wichtig?
Der Roboter muss zuerst zuverlässig zuhören und sprechen.
## Voraussetzungen
- Modul 02 Aufgabe 07
- Aufgabe 01
## Theorie
Integration heißt, echte Startbefehle, Config und Fehlerpfade zu haben, nicht nur einzelne Skripte.
## Aufgabe
Integriere die Voice Pipeline als Service oder Prozess mit klarer Schnittstelle zum Orchestrator.
## Akzeptanzkriterien
- Eine gesprochene Frage wird zu Text.
- Eine Textantwort wird gesprochen.
- Latenz wird geloggt.
## Erweiterungen
- Füge Text-Fallback in der CLI hinzu.
## Reflexionsfragen
- Welche Fehler hörst du erst bei echter Nutzung?
- Wie stoppst du laufende TTS?
- Welche Logs helfen bei Audio-Problemen?
@@ -0,0 +1,38 @@
# Aufgabe 03: LLM Agent integrieren
## Ziel
Du verbindest den Orchestrator mit LLM, System Prompt, History und Tool Dispatcher.
## Warum ist das wichtig?
Der Agent ist die Entscheidungsschicht zwischen Sprache und Fähigkeiten.
## Voraussetzungen
- Modul 01 Aufgabe 09
- Aufgabe 01
## Theorie
Im finalen System muss der Agent deterministische Grenzen haben: maximale Tool Calls, validierte Argumente und klare Fehlermeldungen.
## Aufgabe
Integriere den Agent Loop in den Orchestrator und teste mindestens fünf Dialoge.
## Akzeptanzkriterien
- Dialoge laufen über den Orchestrator.
- Tool Calls werden geloggt.
- Endlosschleifen sind begrenzt.
## Erweiterungen
- Füge Session-Auswahl hinzu.
## Reflexionsfragen
- Welche Dialoge brauchen Tools?
- Welche Antworten sollen kurz bleiben?
- Wie erkennst du Agent-Fehlverhalten?
@@ -0,0 +1,38 @@
# Aufgabe 04: Vision Tool count_people anschließen
## Ziel
Du schließt den Vision Service als Tool für Personenanzahl an.
## Warum ist das wichtig?
Damit kann der Roboter reale Beobachtungen in Antworten einbauen.
## Voraussetzungen
- Modul 03 Aufgabe 09
- Aufgabe 03
## Theorie
Sensor-Tools liefern Momentaufnahmen, keine absolute Wahrheit. Der Agent muss Unsicherheit und Fehler verständlich formulieren.
## Aufgabe
Verbinde `count_people` mit dem Vision Service und teste die Frage "Wie viele Personen sind im Raum?".
## Akzeptanzkriterien
- Tool ruft echten oder Mock-Service auf.
- Antwort enthält Anzahl oder Unsicherheit.
- Servicefehler werden nicht als Null Personen ausgegeben.
## Erweiterungen
- Füge Debugbild-Link im Log hinzu.
## Reflexionsfragen
- Warum ist Servicefehler nicht gleich keine Person?
- Wie formulierst du Unsicherheit?
- Welche Latenz ist akzeptabel?
@@ -0,0 +1,38 @@
# Aufgabe 05: Face Tool identify_people anschließen
## Ziel
Du integrierst bekannte Personen als Agent-Tool.
## Warum ist das wichtig?
Der Roboter soll bekannte Personen erkennen, ohne Identitäten zu erfinden.
## Voraussetzungen
- Modul 04 Aufgabe 07
- Aufgabe 03
## Theorie
Identifikation ist sensibler als Zählen. Der Agent muss strikt beim Tool-Ergebnis bleiben.
## Aufgabe
Verbinde `identify_people`, teste bekannt, unbekannt und unsicher mit Mock- oder Echtservice.
## Akzeptanzkriterien
- Bekannte Person wird korrekt genannt.
- Unbekannte bleiben unbekannt.
- Consent-Regeln sind dokumentiert.
## Erweiterungen
- Füge Begrüßung bekannter Personen hinzu.
## Reflexionsfragen
- Welche Antwort ist bei Unsicherheit fair?
- Wann sollte der Roboter nicht identifizieren?
- Wie löschst du Profile?
@@ -0,0 +1,38 @@
# Aufgabe 06: Motion Tool look anschließen
## Ziel
Du steuerst den Pan-Tilt-Kopf per Sprachbefehl.
## Warum ist das wichtig?
Damit wird aus dem Dialog ein handelnder Roboterkopf.
## Voraussetzungen
- Modul 05 Aufgabe 08
- Aufgabe 03
## Theorie
Motion-Tools sind gefährlicher als reine Informations-Tools. Sie brauchen enge Schemas, Limits und Simulation.
## Aufgabe
Verbinde `look(direction)` mit der Motion API und teste links, rechts, hoch, runter und center.
## Akzeptanzkriterien
- Alle Richtungen funktionieren im Mock oder an Hardware.
- Ungültige Richtungen werden abgelehnt.
- Bewegung wird kurz bestätigt.
## Erweiterungen
- Füge einen Dry-Run-Schalter hinzu.
## Reflexionsfragen
- Welche Befehle sind zu vage?
- Wie begrenzt du Bewegung bei Kindern oder Publikum?
- Was passiert bei Motion-Service-Ausfall?
@@ -0,0 +1,37 @@
# Aufgabe 07: Personensuche per Scanbewegung
## Ziel
Du kombinierst Kopfscan und Vision, um nach Personen zu suchen.
## Warum ist das wichtig?
Der Roboter soll aktiv suchen können, statt nur passiv geradeaus zu sehen.
## Voraussetzungen
- Aufgaben 04 und 06
## Theorie
Scan ist eine kontrollierte Sequenz aus Bewegung, Warten, Bildauswertung und Abbruch. Ohne Zustandsmodell wird das schnell chaotisch.
## Aufgabe
Implementiere einen Scanmodus: mehrere Kopfpositionen anfahren, Vision prüfen, bei Person stoppen oder Ergebnis melden.
## Akzeptanzkriterien
- Scanpositionen sind begrenzt.
- Bei Person wird gestoppt.
- Kein Treffer wird verständlich gemeldet.
## Erweiterungen
- Nutze ROS2 Action oder internen Job als Variante.
## Reflexionsfragen
- Welche Scanreihenfolge wirkt natürlich?
- Wie lange wartest du nach Bewegung?
- Was passiert bei mehreren Personen?
@@ -0,0 +1,37 @@
# Aufgabe 08: Debug UI und Abschlussreflexion
## Ziel
Du baust eine einfache Debug-Ansicht und bewertest das Gesamtsystem.
## Warum ist das wichtig?
Ein integrierter Roboter braucht sichtbare Zustände, sonst bleibt Fehlersuche langsam.
## Voraussetzungen
- Aufgaben 01-07
## Theorie
Eine Debug UI muss nicht schön sein. Wichtig sind aktueller Zustand, letzte Transkription, Tool Calls, Service-Health und Latenzen.
## Aufgabe
Erstelle eine kleine Web- oder Terminal-UI und schreibe eine Abschlussreflexion mit offenen Risiken.
## Akzeptanzkriterien
- UI zeigt Service-Status.
- Letzte Dialogrunde und Tool Calls sind sichtbar.
- Reflexion nennt technische und ethische Grenzen.
## Erweiterungen
- Füge Log-Download oder Trace-Ansicht hinzu.
## Reflexionsfragen
- Welche Funktion fühlt sich wirklich fertig an?
- Wo ist die größte technische Schuld?
- Welche Sicherheitsregel würdest du vor einer Demo verschärfen?
+18
View File
@@ -0,0 +1,18 @@
# Final Project
Der sprechende, sehende und bewegliche AI-Roboterkopf in integrierten Meilensteinen.
## Aufgaben
- [01: Projekt-Skeleton anlegen](01-projekt-skeleton-anlegen.md)
- [02: Voice Pipeline integrieren](02-voice-pipeline-integrieren.md)
- [03: LLM Agent integrieren](03-llm-agent-integrieren.md)
- [04: Vision Tool count_people anschließen](04-vision-tool-count-people-anschliessen.md)
- [05: Face Tool identify_people anschließen](05-face-tool-identify-people-anschliessen.md)
- [06: Motion Tool look anschließen](06-motion-tool-look-anschliessen.md)
- [07: Personensuche per Scanbewegung](07-personensuche-per-scanbewegung.md)
- [08: Debug UI und Abschlussreflexion](08-debug-ui-und-abschlussreflexion.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
@@ -0,0 +1,38 @@
# Aufgabe 01: Fahrende Plattform bewerten
## Ziel
Du prüfst, was nötig wäre, um den Roboterkopf auf eine mobile Basis zu setzen.
## Warum ist das wichtig?
Mobilität erhöht Nutzen und Risiko massiv.
## Voraussetzungen
- Final Project grob lauffähig
- Sicherheitsbewusstsein
## Theorie
Eine fahrende Plattform braucht Motorcontroller, Odometrie, Hinderniserkennung und Not-Aus. Sie ist kein kleiner Zusatz zum Kopfprojekt.
## Aufgabe
Erstelle eine Architektur- und Risikoanalyse für eine mobile Erweiterung.
## Akzeptanzkriterien
- Motoren, Strom, Sensoren und Not-Aus sind erwähnt.
- Bestehende Kopfarchitektur bleibt erkennbar.
- Klare Nicht-Ziele sind definiert.
## Erweiterungen
- Baue nur eine Simulation der Fahrbefehle.
## Reflexionsfragen
- Welche neuen Gefahren entstehen?
- Welche Sensoren fehlen dem Kopfprojekt?
- Warum sollte Bewegung langsam starten?
+38
View File
@@ -0,0 +1,38 @@
# Aufgabe 02: SLAM einordnen
## Ziel
Du verstehst, wofür SLAM gebraucht wird und welche Daten es benötigt.
## Warum ist das wichtig?
Navigation ohne Karte und Lokalisierung bleibt blindes Herumfahren.
## Voraussetzungen
- Aufgabe 01
- ROS2-Grundwissen hilfreich
## Theorie
SLAM schätzt gleichzeitig Karte und Position. Dafür braucht es geeignete Sensorik wie LiDAR, Tiefenkamera oder visuelle Odometrie.
## Aufgabe
Vergleiche drei SLAM-Ansätze auf Eignung für eine spätere Plattform.
## Akzeptanzkriterien
- Sensoranforderungen sind genannt.
- Rechenlast ist grob bewertet.
- Bezug zu ROS2 ist hergestellt.
## Erweiterungen
- Teste ein ROS2-SLAM-Demo mit Beispieldaten.
## Reflexionsfragen
- Welche Sensoren liefern Entfernung?
- Warum ist nur eine RGB-Kamera schwierig?
- Wann reicht Teleoperation statt SLAM?
+37
View File
@@ -0,0 +1,37 @@
# Aufgabe 03: Navigation planen
## Ziel
Du skizzierst eine Navigationsarchitektur mit Zielpunkten, Hindernissen und Sicherheit.
## Warum ist das wichtig?
Ein mobiler Roboter braucht mehr als ein LLM mit "fahr dorthin".
## Voraussetzungen
- Aufgaben 01-02
## Theorie
Navigation besteht aus globaler Planung, lokaler Vermeidung, Lokalisierung und Motorsteuerung. Das LLM sollte Ziele formulieren, nicht direkt Motorwerte setzen.
## Aufgabe
Erstelle ein Diagramm für LLM-Ziel, Navigation Stack, Safety Layer und Motorcontroller.
## Akzeptanzkriterien
- LLM ist nicht direkt am Motor.
- Safety Layer ist explizit.
- Abbruchbedingungen sind beschrieben.
## Erweiterungen
- Füge eine simulierte `go_to` Action hinzu.
## Reflexionsfragen
- Welche Entscheidungen darf ein LLM treffen?
- Wie erkennt der Roboter Blockaden?
- Welche Sensoren brauchst du für Menschen in der Nähe?
@@ -0,0 +1,38 @@
# Aufgabe 04: Greifarm als Erweiterung bewerten
## Ziel
Du analysierst, was ein kleiner Greifarm zusätzlich erfordert.
## Warum ist das wichtig?
Manipulation ist deutlich komplexer als Kopfbewegung.
## Voraussetzungen
- Final Project
- Servo- und Sicherheitsgrundlagen
## Theorie
Ein Greifarm braucht Kinematik, Kraftbegrenzung, Objektwahrnehmung und sichere Bewegungsplanung. Schon einfache Greifer können Finger einklemmen oder Objekte beschädigen.
## Aufgabe
Schreibe eine Machbarkeitsnotiz für einen 2- oder 3-DOF-Greifarm mit klaren Lernschritten.
## Akzeptanzkriterien
- DOF, Reichweite und Last sind betrachtet.
- Sicherheitsgrenzen sind definiert.
- Integration als Tool ist skizziert.
## Erweiterungen
- Simuliere `point_at` statt `grab` als ersten Schritt.
## Reflexionsfragen
- Warum ist Greifen schwerer als Zeigen?
- Welche Sensorik fehlt?
- Wie würdest du gefährliche Tool Calls verhindern?
+14
View File
@@ -0,0 +1,14 @@
# Extensions
Optionale Fortgeschrittenenthemen wie mobile Plattform, SLAM, Navigation und Greifarm.
## Aufgaben
- [01: Fahrende Plattform bewerten](01-fahrende-plattform-bewerten.md)
- [02: SLAM einordnen](02-slam-einordnen.md)
- [03: Navigation planen](03-navigation-planen.md)
- [04: Greifarm als Erweiterung bewerten](04-greifarm-als-erweiterung-bewerten.md)
## Arbeitsweise
Bearbeite die Aufgaben nacheinander. Jede Aufgabe soll ein kleines, überprüfbares Ergebnis liefern und ist bewusst auf etwa 1 bis 4 Stunden ausgelegt.
+31 -37
View File
@@ -1,49 +1,43 @@
# Robotics + AI Learning Roadmap
# Robotics + AI Learning Course
Dieses Repository ist als praktischer Lernpfad gedacht, um von 0 zu einem kleinen AI-Robotik-Assistenten zu kommen.
Dieses Repository ist ein deutschsprachiger, praktischer Lernkurs für erfahrene Softwareentwickler, die Rust, Backend-Entwicklung, Linux, Docker und APIs kennen, aber Robotik, Computer Vision, ROS2 und Hardware schrittweise lernen wollen.
Zielbild:
Ziel ist ein sprechender AI-Roboterkopf, der zuhört, Sprache in Text wandelt, ein LLM mit Tool Calling nutzt, per Text-to-Speech antwortet, Personen über eine Kamera zählen und bekannte Personen erkennen kann, einen Pan-Tilt-Kopf bewegt und später über ROS2 erweiterbar ist.
- Du kannst mit dem System sprechen.
- Es versteht Sprache über Speech-to-Text.
- Es antwortet über Text-to-Speech.
- Es kann Tools/Aktionen ausführen.
- Es kann über eine Kamera Personen erkennen/zählen.
- Es kann einen kleinen Servo-Kopf bewegen.
- Später kann es über ROS2 strukturiert erweitert werden.
## Kursstruktur
## Lernphasen
1. [00-course-overview](00-course-overview/) - Zielbild, Setup, Lernstrategie, Architektur, Sicherheit und Datenschutz
2. [01-ai-agent-basics](01-ai-agent-basics/) - LLM API, Chat Messages, System Prompt, Tool Calling, Agent Loop, Logging und Memory
3. [02-voice-interface](02-voice-interface/) - Audioaufnahme, Push-to-Talk, Whisper, TTS, Audio Queue und Voice Pipeline
4. [03-computer-vision](03-computer-vision/) - Kamera, OpenCV, Bounding Boxes, YOLO, Personen zählen und Vision Service
5. [04-face-recognition](04-face-recognition/) - Face Detection, Embeddings, Enrollment, Schwellenwerte, Datenschutz und Agent Tool
6. [05-robot-motion](05-robot-motion/) - Servos, PWM, Stromversorgung, Pan-Tilt-Kopf, Motion API und visuelles Zentrieren
7. [06-system-architecture](06-system-architecture/) - Rust-Orchestrator, Python-Services, REST/gRPC/MQTT, Docker Compose und Observability
8. [07-ros2-basics](07-ros2-basics/) - ROS2 Nodes, Topics, Services, Actions, Launch Files, Parameter, TF und Bridge-Architektur
9. [08-final-project](08-final-project/) - Integration zum sprechenden, sehenden und beweglichen Roboterkopf
10. [09-extensions](09-extensions/) - optionale Themen wie fahrende Plattform, SLAM, Navigation und Greifarm
1. `01-ai-agent-basics` - LLMs, Tool Calling, einfache Agenten
2. `02-voice-interface` - Mikrofon, Whisper, TTS
3. `03-computer-vision` - Kamera, OpenCV, Personenerkennung
4. `04-face-recognition` - bekannte Personen erkennen
5. `05-robot-motion` - Servos, PWM, Pan-Tilt-Kopf
6. `06-system-architecture` - Services, APIs, Events, Rust/Python-Aufteilung
7. `07-ros2-basics` - ROS2 verstehen und einfache Nodes bauen
8. `08-final-project` - sprechender Roboterkopf als integriertes Projekt
## Arbeitsweise
## Empfohlene Arbeitsweise
Jede Aufgaben-Datei ist als kleine, praktische Lerneinheit aufgebaut und sollte in etwa 1 bis 4 Stunden bearbeitbar sein. Lies nicht nur passiv: Baue das Ergebnis, miss die wichtigsten Werte und notiere Entscheidungen in einem Projekttagebuch.
Arbeite die Aufgaben nicht nur lesend durch. Jede Markdown-Datei enthält ein kleines Ergebnis, das du wirklich bauen solltest.
Empfohlene Rollenverteilung:
Pro Aufgabe:
- Rust für Orchestrierung, APIs, Tool Calling, Services, State und Konfiguration
- Python für AI, Whisper, OpenCV, YOLO, Face Recognition und schnelle Experimente
- Docker Compose für lokale Integration mehrerer Services
- ROS2 erst dann, wenn die Grundfähigkeiten verstanden und als Services lauffähig sind
1. Ziel lesen
2. Mini-Projekt bauen
3. Erkenntnisse notieren
4. Optional: Erweiterung umsetzen
## Empfohlenes Startsetup
## Tech-Empfehlung
- Linux-PC, Laptop oder Raspberry Pi 5
- USB-Kamera
- USB-Mikrofon und Lautsprecher
- Python 3.11+
- Rust stable
- Docker oder Podman optional
- später: zwei Servos, Pan-Tilt-Halterung, passende externe Stromversorgung und optional PCA9685 Servo-Controller
Für den Anfang:
## Leitprinzip
- Python für AI, Whisper, OpenCV, YOLO
- Rust für Backend-/Service-Logik, APIs, Orchestrierung
- Raspberry Pi 5 oder normaler Linux-PC für frühe Tests
- USB-Kamera, USB-Mikrofon, Lautsprecher
- später: PCA9685 Servo-Controller oder direkt GPIO/PWM
## Wichtig
Nicht direkt mit einem fahrenden Roboter anfangen. Baue zuerst einen sprechenden, sehenden und beweglichen Roboterkopf. Das reduziert die Komplexität massiv.
Starte nicht mit einem fahrenden Roboter. Baue zuerst einen sprechenden, sehenden und beweglichen Roboterkopf. Dadurch lernst du die wichtigen AI-, Vision-, Audio-, Motion- und Architekturthemen mit deutlich weniger Risiko.