====== Projektplanung Nerf-Bot ====== ===== Einführung ===== Wir möchten einen mobilen Roboter bauen, der mithilfe visueller Gesichtserkennung eine NerfGun oder eine selbers Designte und umgesetzte Alternative ausrichten und auf die erkannte Person abfeuern kann. Der Roboter soll außerdem in der Lage sein, ein bestimmtes Areal zu patrollieren. ===== Ziele und Prioritäten ===== === Was der Roboter auf jeden Fall tun muss === * Automatisches erkennen von Zielen * Automatisches und präzises Ausrichten der Nerf Gun * Automatisches Schießen === Was der Roboter tun sollte === * 360 Grad horizontale und große vertikale Scan Area * mobil und beweglich, in der Lage Ziele zu verfolgen oder sich zurückzuziehen === Nice to have === * Manuell steuerbar per Fernsteuerung oder PC * Live Kamera Feed * Automatische Rückkehr zu einem Home-Point * Bewegung des Turrets unabhängig von Base-Bewegung === Was wir weglassen === * Automatisches Nachladen des Magazins on Board oder in einer Ladestation ===== Aktivierungs Szenario ===== {{:projektewise24:projekt6:roboteraktivierungsskizze.png?1200|}} Der Roboter überprüft nach seiner aktivierung, ob alle Systeme (Gun, Kamera, Räder) ordentlich funktionieren, und bricht das Programm bei einem Fehler ab um eine Error-Message auszugeben. Ist alles funktionstüchtig, so beginnt der Roboter zu patroullieren und scan dabei nach Zielen. Wird ein Ziel erfasst, so wird gezielt und dann geschossen. Verliert der Roboter sein Ziel, so bleibt er in einem "Awareness"-Zustand, während dessen er den Bereich, in dem das Ziel zuletzt gesehen wurde, im Blick behält und weiterhin sucht. Nach ablauf eines bestimmten Awareness-Cooldowns fährt der Roboter fort, zu patroullieren. Kann geschossen werde, so wartet der Roboter kurz nach jedem Schuss, dieser Colldown soll anpassbar sein, und überprüft dann, ob noch Munition vorhanden ist. Falls nein werden die gespeicherten Bewegungsdaten genutzt, um zurück zum Anfangspunkt zu fahren, ansonsten fährt das Programm normal fort. ===== Ablaufplan: ===== === Design: === Das entwerfen eines funktionsfähigen Rohbaus des Roboters. Dabei muss besonders auf mögliches Verdrehen der Kabel geachtet werden. Außerdem muss eine sicher Befestigung für die Nerf vorhanden sein, dies kann erst final bearbeitet werden, wenn über die Nerf entschieden wurde. Es müssen noch weitere Ziele festgelegt werden, damit ein möglichst unkompliziertes, genaues Design möglich wird. Der Entwurf muss nach verschiedenen Zwischenschritten und final nach Ende der Programmierung des Arduino noch einmal überprüft und möglicherweise angepasst werden und kann dann gebaut bzw. gedruckt werden. Unsere Gruppe teilt sich die Aufgaben für das Design in zwei Gruppen auf, damit parallel gearbeitet werden kann. == Kamera und Ziel Erkennung: == Parallel wird sich um eine funktionierende Kamera mit möglicher Gesichts- oder Entfernungserkennung gekümmert werden. Dabei muss sowohl auf den Preis, als auch auf einen funktionierenden Input bzw. Output geachtet werden. Es muss mit der Projektleitung über die Finanzierung gesprochen werden. Danach wird sich ein Gruppenmitglied um die Beschaffung des Materials kümmern. Wenn alles angekommen, getestet und für gut befunden wurde, ist dieser Schritt abgeschlossen und das System kann zum Einbauen und Programmieren verwendet werden. == Ziel treffen: == === Nerf finden: === Als allererstes wird über eine Nerf Gun entschieden bzw. falls nötig eine eigene Gun gebaut, welche dann einige Zwischenschritte erfordert. Bei eigenem Bau muss ein Entwurf mithilfe von existierenden Guns erstellt werden und dieser gedruckt bzw. gebaut und getestet werden. Nach Testversuchen und möglicher Überarbeitung kann die Gun bei voller Funktion für die nächsten Schritte verwendet werden. === Schießen und Drehen: === Die Nerf wird vermessen und für das Design verwendet. Wir müssen die Nerf mit dem Arduino verbinden und das schießen programmieren. Funktioniert das Schießen wird sich um die Bewegung gekümmert. Sowohl das horizontale, als auch das vertikale Drehen muss programmiert und besonders mit dem Design abgestimmt werden. Als letzten Schritt können wir die Magazinerkennung anstreben, um uns einen Wert über den Status des Magazins zurückgeben zu lassen. Das Auffüllen des Magazins werden wir nicht automatisieren. Nach Abschluss dieses Schritts sollte die Nerf schießen und sich nach Einbau in das gedruckte Modell auch drehen können. === Zielen: === Der Output der Kamera wird mit der Dreh- und Schussfunktion der Gun verbunden. Die Gesichtssuche und -erkennung und die Übergabe dieser Information, damit die Gun entsprechend gedreht wird muss einwandfrei funktionieren. Nach der Ausrichtung muss ein Schuss abgegeben werden. Sollen weitere Ziele erkannt werden, wird bleibt die Gun weiter im Einsatz und führt die Schritte auf das nächste Ziel aus. Wenn keine weiteren Ziele erkannt werden, kehrt die Gun in ihre Ausgangs- bzw. Ruheposition zurück. === Fehlerbehebung: === Die Beseitigung jeglicher Fehler wird in diesem Schritt abgeschlossen. Das bezieht sich sowohl auf den Code als auch auf den Roboter und das gesamte Modell. Dieser Schritt wird logischerweise schon während der Bearbeitung von allen anderen Schritten durchgeführt und wird deswegen auch mit einem sehr großzügigen Zeitpuffer geplant. Eine finale Überprüfung aller Schritte mit dem Ziel, dass alles so unkompliziert wie möglich läuft, ist sehr wichtig. Wenn das der Fall ist, ist der Roboter soweit in seiner Grundidee fertig. In den weiteren Schritten folgen Ideen für die Weiterentwicklung. === Optimierung: (optional) === In der aktuellen Planung bleibt ein nötiger Benutzerbeitrag. Der Roboter muss an einer bestimmten Stelle aufgebaut werden, damit er sinnvoll arbeitet. Optimal wäre natürlich ein Roboter, der sich fortbewegen könnte. Dafür müsste unser Rohbau etwas umdesignt werden, damit Räder angebaut werden könnten. Der Code müsste ergänzt werden, damit der Roboter erkannten Gesichtern hinterherfahren oder nach leerer Munition in eine Parkposition zurückkehren kann. Auch ein regelmäßiges Patrouillieren oder ein manuelles Fahren mithilfe einer Fernbedingung wäre eine Möglichkeit den Roboter zu verbessern. Das alles wäre mit weiterem Bau- und Programmieraufwand verbunden und könnte nach erfolgreichem Abschluss der vorherigen Schritte bei weiterer Zeit überdacht werden. ====Möglichkeiten für Face-Tracking:==== * Arduino kompatible Kamera (ESP32 10€, OpenMV Cam 90€) * -->benötigt viel und sehr komplexen Code, Elektronik * Webcam und OpenCV/LFK_Face_Tracking über einen Laptop * -->Software und Code zu großen teilen breits vorhanden * -->Problem: Wireless Verbindung zwischen Webcam->PC->Arduino ab Schritt 5 * -->Möglichkeit schon mal anzufangen und sobald es funktioniert Bluetooth einzubauen (neues Wireless Webcam und com zwischen PC und Board) ===== Materialien ===== Benötigt werden vorallem: * NerfGun, falls möglich motorisiert oder alternativ ein eigenes Design * Arduino kompatible Kamera * Webcam mit Bluetooth (Bluetooth receiver) * Esp32-Cam + FTDI-Programmer oder OpenMV Cam H7 Plus * Arduino Uno oder Mega * Jumper-Kabel * Motoren * 2x Servo für Two-Axis-Turret Rotation * 2x Servo für Räder und Base-Rotations-Steuerung * 1x für Trigger falls mechanisch statt elektrisch * ===== Risiken ===== Aufgrund hoher Komplexität bei Arbeit mit AI und Gesichtserkennung kann die Fehlerbehebung bei nicht funktionierendem Face Tracking sehr kompliziert und langwierig werden, was Arbeitszeit von andern Teilen des Projekts kosten kann. Dadurch besteht das Risiko, dass wir nicht alle unserer Vorgenommenen Ziele erarbeiten können. Auch sind wir nicht nur von der Funktionstüchtigkeit der Kamera und der Erkennungs-Software abhängig, auch die Nerf muss brauchbar sein und bleiben, und muss vom Arduino angesteuert werden können. Dies kann vorallem ein Problem sein, wenn der Trigger-Mechanismus mechanisch und nicht elektronisch funktioniert. Sollte es notwendig sein, eine eigene Gun zu bauen, so kann es möglcih sein, dass wir ein oder mehrere zusätzliche Ziele streichen müssen, da dies sehr arbeits- und zeitintensiv werden kann. Sollte dies notwendig werden, wird vermutlich Arbeitschritt 5, das mobil machen, gestrichen. ===== Gantt-Diagramm ===== {{ :projektewise24:projekt6:gantt-diagramm.jpg |}} ===== Zeitliche Planung ===== ===16. - 20. Dezember: Projektstart und Materialbeschaffung=== * Organisation aller benötigten Materialien (z. B. Kamera, Arduino, Motoren, Nerf Gun, etc.) ===21. Dezember - 9. Januar: Parallele Aufgaben=== * Gruppe A programmiert die Gesichtserkennung und die Steuerung * Gruppe B erstellt das CAD-Modell des Roboters unter Berücksichtigung der Befestigungspunkte und der elektrischen Verkabelung ===10. - 16. Januar: Integration=== * Die Software (Programme von Gruppe A) und Hardware (CAD-Design von Gruppe B) werden zusammengeführt * Erste Tests werden durchgeführt, um sicherzustellen, dass die Systeme miteinander harmonieren ===17. - 31. Januar: Testläufe und Fehlersuche=== * Die gesamte Gruppe testet den Roboter in realistischen Szenarien, z. B.: * Kann die Kamera ein Gesicht erkennen und die Nerf Gun ausrichten? * Funktioniert der Schuss- und Drehmechanismus präzise? * Fehler im Code, Design oder bei der Integration werden behoben ===1. - 9. Februar: Optionale Optimierungen=== * Wenn noch Zeit bleibt, arbeiten wir an „Nice-to-have“-Features, z. B.: * Mobilität des Roboters (Räder hinzufügen und programmieren) * Patrouillenmodus * Manuelle Steuerung per Fernbedienung