Diese Programmier-Challenge dient als Lernzielkontrolle und semesterbegleitende Abschlussprüfung. Im Termin erhalten Sie eine Herausforderung, die Sie in einem festen Zeitrahmen als Team oder Einzelperson lösen. Das Ergebnis dieser Challenge wird in SVN gesichert und anschließend bewertet. Inhaltlich ist die Aufgabe eine Mischung der vorangegangenen Lektionen 1-4. Sie haben Zugriff auf Ihre Quellen in SVN sowie die Demos.
Diese Programmier-Challenge dient als Lernzielkontrolle und semesterbegleitende Abschlussprüfung. Im Termin erhalten Sie eine Herausforderung, die Sie in einem festen Zeitrahmen als Team oder Einzelperson lösen. Das Ergebnis dieser Challenge wird in SVN gesichert und anschließend bewertet. Inhaltlich ist die Aufgabe eine Mischung der vorangegangenen Lektionen 1-4. Sie haben Zugriff auf Ihre Quellen in SVN sowie die Demos.
Dies ist eine freiwillige Probeklausur.
Dies sind freiwillige Übungsaufgaben.
= Vorbereitung =
= Vorbereitung =
* Die Programmier-Challenge verbindet die Lektionen 1-4.
* Die Programmier-Challenge verbindet die Lektionen 1-4.
* Als Vorbereitung könnten Sie sich die Lektionen noch einmal ansehen und diese [[Inf2P: Probeklausur I 2025|Probeklausur]][[Datei:WikiLink.png|15px]] bearbeiten.
* Üben Sie das Planen der Software mit dem PAP-Designer. Bereiten Sie sich ein Template für die Arduino Programmierung vor.
* Üben Sie das Planen der Software mit dem PAP-Designer. Bereiten Sie sich ein Template für die Arduino Programmierung vor.
* Nutzen Sie die Funktionen aus den vorherigen Lektionen. Schreiben Sie nicht alles neu. Wenden Sie das Gelernte an.
* Nutzen Sie die Funktionen aus den vorherigen Lektionen. Schreiben Sie nicht alles neu. Wenden Sie das Gelernte an.
= Einleitung=
Sie haben den Auftrag bekommen ein Fahrerloses Transportfahrzeug (FTF) zu entwickeln. Nutzen Sie den AlphaBot um die Funktion Ihrer Programmierung nachzuweisen. Die Anforderungen an Ihr System sind in Tabelle 1 aufgeführt.
<!--
= Anforderungen =
{| class="wikitable"
|+ style = "text-align: left"|Tabelle 1: Anforderungen an die Software
|-
! Req. !! Beschreibung !! Priorität
|-
| 1 || Das FTF muss autonom von Position A zu Position B fahren. || 1
|-
| 2 || Der Fahrschlauch muss zum Schutz des Personals eingehalten werden. || 1
|-
| 3 || Das FTF fährt 1 m vorwärts, anschließend eine Rechtskurve mit dem Radius 0,5 m, abschließend 20 cm vorwärts und dann in Feld B (vgl. Abb.1). || 1
|-
| 4 || Der verbaute Ultraschallsensor muss Hindernisse auf dem Fahrweg entdecken und <10 cm mit einem Notstopp reagieren. || 1
|-
| 5 || Wird das Hindernis entfernt, nimmt der Roboter seine Fahrt wieder auf. || 1
|-
| 6 || Das FTF startet in Feld A und stoppt in Feld B. || 1
|-
| 7 || Fehlbremsungen müssen durch geeignete Signalfilterung vermieden werden. || 2
|-
|}
-->
= Durchführung =
== Aufgabe 5.1 ==
Planen Sie Ihre Software mittels [[Software_Planung|Programmablaufplan (PAP)]].
Das PAP soll über folgeden Eigenschaften verfügen:
* Bezug zum Programm
* Header (Autoren, Gruppe, Datum, Funktion,...)
* erläuternde Kommentare und
* eine verständliche Funktionsbeschreibung
Sichern Sie das Zustandsdiagramm in den ersten 15 Minuten der Challenge in SVN.
'''Arbeitsergebnis''': <code>FTF.pap</code>
= Übungsaufgabe 1: Roboterpose =
== Aufgabe 5.2 ==
# Fahren Sie einen Kreis mit 1 m Radius.
Setzen Sie die geplante Software 1:1 mit der Arduino IDE um.
# Bestimmen Sie die Roboterpose (<math>x, y, \Psi</math> ) anhand der Odometrie und sichern Sie diese mit Putty in der Textdatei <code>Roboterpose.txt<code>.
Das Programm FTF.ino muss folgende Anforderungen erfüllen
# Zeichnen Sie die Roboterpose in MATLAB<sup>®</sup>.
* Header,
* erläuternde Kommentare,
* einhalten der Programmierrichtlinien und die
* Umsetzung der Funktionalität gemäß Tabelle 1.
'''Arbeitsergebnis''': <code>FTF.ino</code>
'''Arbeitsergebnis''' in SVN: <code>Kreisfahrt.ino, Roboterpose.txt, zeichneRoboterpose.m</code>
! Req. !! Testergebnis: bestanden/nicht bestanden !! Geprüft von Prof. Schneider
|-
| 1 || ||
|-
| 2 || ||
|-
| 3 || ||
|-
|-
| 4 || ||
| [[Datei:Diff Odometrie.jpg|left|450px|Abb. 5: Kursbestimmung aus differentieller Odometrie]]<br> Abb. 5: Kursbestimmung aus differentieller Odometrie
|-
|-
| 5 || ||
|Für den Kurswinkel <math>\Psi</math> gilt: <math>\Psi=\frac{s_R-s_L}{l}</math> mit <math>l</math>: Spurweite
|-
|-
| 6 || ||
|Der AlphaBot hat eine Spurweite <math>l</math> von 14 cm.
|-
|-
| 7 || ||
| Literatur: [https://spacehal.github.io/docs/robotik/odometrie Lokalisierung und Odometrie eines Roboters mit differentiellem Antrieb]
|-
|-
| Die neue Postion des Roboters lässt sich dann als die alte Postion plus der Positionsänderung beschreiben:<br> <math>x'=x+\Delta x</math><br> <math>y'=y+\Delta y</math><br> <math>\Psi'=\Psi+\Delta \Psi</math>
|}
|}
'''Arbeitsergebnis''': <code>Testprotokoll</code>
----
== Aufgabe 5.4 ==
Dokumentieren Sie Ihre Ergebnisse nachhaltig in SVN.
* Halten Sie die Regeln für den [[Software_Versionsverwaltung_mit_SVN|Umgang mit SVN]] ein.
* Sichern Sie alle Ergebnisse mit einem aussagekräftigen Text (<code>log-message</code>) in SVN.
* Halten Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] ein.
* Versehen Sie jedes Programm mit einem Header ([[Header Beispiel für C]]).
* Kommentiere Sie den Quelltext umfangreich.
* Sichern Sie Ihre Ergebnisse in Ordnern (z. B. <code>Inf2P_A1\Termin_06\Aufgabe_06_1</code>).
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code>
= Übungsaufgabe 2: Roboternavigation =
Führen Sie die nachfolgenden Roboterbewegungen möglichst exakt aus.
# Fahren Sie 1 m geradeaus.
# Fahren Sie einen Kreis mit 1 m Durchmesser.
# Fahren Sie 1 m rückwärts.
Stehen Sie auf Ihrer Ausgangsposition?
= Hinweise =
'''Arbeitsergebnis''' in SVN: <code>fahreZumStartpunkt.ino</code>
* Erbringen Sie eine Eigenleistung. [[Software_Plagiat|Plagiate]] werden mit 0 Punkten bewertet.
* Gehen Sie systematisch vor Planung → Umsetzung → Test → Dokumentation.
| <strong>Tipp 1 </strong>
<!--
= Bewertung =
{| class="wikitable"
|+ style = "text-align: left"| Tabelle 3: Bewertungskriterien für die Prüfung
|-
|-
! # !! Aufgabe !! Punkte
| Es ist nahezu unmöglich allein mit Odometrie exakt zu navigieren. Räder haben stets Schlupf.
|-
|-
| 6.1 || '''Qualität der Planungsdaten''' ||
| Steuern Sie die Räder langsam an.
|-
|-
| || Bezug zum Programm || 0,5
| Nutzen Sie dieselbe Unterfunktionfunktion <code>fahreStrecke(Kruemmung)</code>, um die Fahrt zu starten. Die Krümmung berechnet sich aus dem Radius: <math>K=\frac{1}{R}</math>.
|-
|-
| || Header (Autoren, Datum, Funktion,...) || 0,5
| <math>K=0\,\frac{1}{m}</math>: Geradeausfahrt<br><math>K=1\,\frac{1}{m}</math>: Kurvenfahrt mit 1 m Radius.
|-
|-
| || Erläuternde Kommentare || 0,5
| Das Potentiometer der Multisensorerweiterung lässt sich nutzen, um den Gleichlauf der Motoren einzustellen.
|}
= Übungsaufgabe 3: Hinderniserkennung =
Ein Hindernis erscheint plötzlich in Ihrem Fahrschlauch. Sie reagieren mit einer Notbremsung, um den Unfall zu vermeiden. Verlässt das Hindernis (z. B. ein Reh) die Fahrbahn, kann die geplante Fahrt weitergehen.
# Nutzen Sie <code>fahreZumStartpunkt.ino</code> aus Übungsaufgabe 2.
# Stoppen Sie, falls weniger als 20 cm vor Ihnen ein Hindernise auftaucht/steht (Notbremse).
# Fahren Sie weiter, sobald das Hindernis entfernt wurde.
'''Arbeitsergebnis''' in SVN: <code>Notbremsassistent.ino</code>
| Drehen Sie den Ultraschall auf 90 ° (in Fahrrichtung geradeaus).
|-
|-
| 6.2 || '''Umsetzung des PAP''' ||
| Wird ein Hindernis detektiert wird die Fahrt umgehend '''pausiert'''. Speichern Sie den Zustand.
|-
|-
| || Header (Autoren, Datum, Funktion,...) || 0,5
| Wird ein Hindernis entfernt wird die Fahrt wieder '''weitergeführt'''. Beispiel: Die Fahrstrecke beträgt 1 m geradeaus. Zum Zeitpunkt der Notbremsung wurden bereits 50 cm gefahren. Ist das Hindernis entfernt, fahren Sie 50 cm weiter.
|-
| || Erläuternde Kommentare || 0,5
|-
| || Einhalten der Programmierrichtlinien || 0,5
|-
| || 1:1 Umsetzung der Planung || 1
|-
| 6.3 || '''Test der Anforderungen''' ||
|-
| || 1-7 (je 0,5, s. Tabelle 1) || 3,5
|-
| 6.4 || '''Umgang mit SVN''' || 0,5
|-
| || Ordner angelegt || 0,5
|-
| || Aussagekräftige Log-Messages || 0,5
|-
| || '''Summe:''' || '''10'''
|}
|}
-->
== Tutorial ==
* [[Software_Plagiat| Was ist ein Plagiat?]]
* [[Software_Planung| Was ist ein PAP?]]
== FAQ ==
* Ist Anwesenheitspflicht? '''Ja.'''
* Muss ich den Baukasten mitbringen? '''Nein. Die AlphaBots stehen Ihnen im Labor zur Verfügung.'''
* Ist es ein [[Software_Plagiat|Plagiat]], wenn ich Quelltext anderer kopiere und als meine Leistung in einer Prüfung abgebe? '''Ja.'''
* Darf ich für die Lösung eine KI verwenden? '''Nein. Die Prüfungsleistung ist eine Eigenleistung und die Verwendung einer KI wie z. B. <code>chatGPT</code> gilt als Plagiat.
Diese Programmier-Challenge dient als Lernzielkontrolle und semesterbegleitende Abschlussprüfung. Im Termin erhalten Sie eine Herausforderung, die Sie in einem festen Zeitrahmen als Team oder Einzelperson lösen. Das Ergebnis dieser Challenge wird in SVN gesichert und anschließend bewertet. Inhaltlich ist die Aufgabe eine Mischung der vorangegangenen Lektionen 1-4. Sie haben Zugriff auf Ihre Quellen in SVN sowie die Demos.
Dies sind freiwillige Übungsaufgaben.
Vorbereitung
Die Programmier-Challenge verbindet die Lektionen 1-4.
Üben Sie das Planen der Software mit dem PAP-Designer. Bereiten Sie sich ein Template für die Arduino Programmierung vor.
Nutzen Sie die Funktionen aus den vorherigen Lektionen. Schreiben Sie nicht alles neu. Wenden Sie das Gelernte an.
Übungsaufgabe 1: Roboterpose
Fahren Sie einen Kreis mit 1 m Radius.
Bestimmen Sie die Roboterpose ( ) anhand der Odometrie und sichern Sie diese mit Putty in der Textdatei Roboterpose.txt.
Zeichnen Sie die Roboterpose in MATLAB®.
Arbeitsergebnis in SVN: Kreisfahrt.ino, Roboterpose.txt, zeichneRoboterpose.m
Tipp 1
Abb. 5: Kursbestimmung aus differentieller Odometrie Abb. 5: Kursbestimmung aus differentieller Odometrie
Die neue Postion des Roboters lässt sich dann als die alte Postion plus der Positionsänderung beschreiben:
Übungsaufgabe 2: Roboternavigation
Führen Sie die nachfolgenden Roboterbewegungen möglichst exakt aus.
Fahren Sie 1 m geradeaus.
Fahren Sie einen Kreis mit 1 m Durchmesser.
Fahren Sie 1 m rückwärts.
Stehen Sie auf Ihrer Ausgangsposition?
Arbeitsergebnis in SVN: fahreZumStartpunkt.ino
Tipp 1
Es ist nahezu unmöglich allein mit Odometrie exakt zu navigieren. Räder haben stets Schlupf.
Steuern Sie die Räder langsam an.
Nutzen Sie dieselbe Unterfunktionfunktion fahreStrecke(Kruemmung), um die Fahrt zu starten. Die Krümmung berechnet sich aus dem Radius: .
: Geradeausfahrt : Kurvenfahrt mit 1 m Radius.
Das Potentiometer der Multisensorerweiterung lässt sich nutzen, um den Gleichlauf der Motoren einzustellen.
Übungsaufgabe 3: Hinderniserkennung
Ein Hindernis erscheint plötzlich in Ihrem Fahrschlauch. Sie reagieren mit einer Notbremsung, um den Unfall zu vermeiden. Verlässt das Hindernis (z. B. ein Reh) die Fahrbahn, kann die geplante Fahrt weitergehen.
Nutzen Sie fahreZumStartpunkt.ino aus Übungsaufgabe 2.
Stoppen Sie, falls weniger als 20 cm vor Ihnen ein Hindernise auftaucht/steht (Notbremse).
Fahren Sie weiter, sobald das Hindernis entfernt wurde.
Arbeitsergebnis in SVN: Notbremsassistent.ino
Tipp 1
Drehen Sie den Ultraschall auf 90 ° (in Fahrrichtung geradeaus).
Wird ein Hindernis detektiert wird die Fahrt umgehend pausiert. Speichern Sie den Zustand.
Wird ein Hindernis entfernt wird die Fahrt wieder weitergeführt. Beispiel: Die Fahrstrecke beträgt 1 m geradeaus. Zum Zeitpunkt der Notbremsung wurden bereits 50 cm gefahren. Ist das Hindernis entfernt, fahren Sie 50 cm weiter.
Muss ich den Baukasten mitbringen? Nein. Die AlphaBots stehen Ihnen im Labor zur Verfügung.
Ist es ein Plagiat, wenn ich Quelltext anderer kopiere und als meine Leistung in einer Prüfung abgebe? Ja.
Darf ich für die Lösung eine KI verwenden? Nein. Die Prüfungsleistung ist eine Eigenleistung und die Verwendung einer KI wie z. B. chatGPT gilt als Plagiat.
Muss ich den Baukasten mitbringen? Nein. Die AlphaBots stehen Ihnen im Labor zur Verfügung.
Ist es ein Plagiat, wenn ich Quelltext anderer kopiere und als meine Leistung in einer Prüfung abgebe? Ja.
Darf ich für die Lösung eine KI verwenden? Nein. Die Prüfungsleistung ist eine Eigenleistung und die Verwendung einer KI wie z. B. chatGPT gilt als Plagiat.