Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss21:roboterlabyrinth [2021/10/29 13:57] – dotz_37 | ss21:roboterlabyrinth [2022/08/02 12:16] (aktuell) – dotz_37 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Das ist das Wiki des lab:prepare Projektes " | + | ====== Roboterlabyrinth ====== |
+ | Ein Projekt von Zehra Anlatan, Dominic Braun, Henry Kusch & Robin Reichelt. | ||
- | [[_TOC_]] | + | ====== |
- | + | ||
- | + | ||
- | ## Projektbeschreibung - Einleitung | + | |
Wie kann man bestimmte Daten, Dateien oder auch Wege innerhalb eines Systems oder einer Karte finden? Die komplexen Arbeitsweisen dieser Algorithmen wurden über Jahre ausgiebig von Mathematikern, | Wie kann man bestimmte Daten, Dateien oder auch Wege innerhalb eines Systems oder einer Karte finden? Die komplexen Arbeitsweisen dieser Algorithmen wurden über Jahre ausgiebig von Mathematikern, | ||
Zeile 22: | Zeile 20: | ||
Somit wollen wir vielerlei Möglichkeiten schaffen, diese Konzepte mit Spaß und Leichtigkeit für jedes Alter anschaulich und interaktiv darzustellen. | Somit wollen wir vielerlei Möglichkeiten schaffen, diese Konzepte mit Spaß und Leichtigkeit für jedes Alter anschaulich und interaktiv darzustellen. | ||
- | ## Theorie | + | ====== |
Viele Probleme der Graphentheorie können mithilfe von Suchalgorithmen effizient gelöst werden. Beispiele für diese Probleme sind das Problem des Handlungsreisenden, | Viele Probleme der Graphentheorie können mithilfe von Suchalgorithmen effizient gelöst werden. Beispiele für diese Probleme sind das Problem des Handlungsreisenden, | ||
Zeile 30: | Zeile 28: | ||
Zusätzlich muss das Kamerabild so verarbeitet werden, sodass die schwarze linie eindeutig identifiziert werden kann. | Zusätzlich muss das Kamerabild so verarbeitet werden, sodass die schwarze linie eindeutig identifiziert werden kann. | ||
- | ## Bauplan | + | ====== |
Da es sich hierbei um einen fertig gebauten Roboter handelt, der im Handel käuflich zu erwerben ist, können wir keinen eigenen Bauplan vorzeigen. Weitere Infos zum Roboter sind auf der eigenen Website unter https:// | Da es sich hierbei um einen fertig gebauten Roboter handelt, der im Handel käuflich zu erwerben ist, können wir keinen eigenen Bauplan vorzeigen. Weitere Infos zum Roboter sind auf der eigenen Website unter https:// | ||
Zu der SW Entwicklung haben wir uns die Dokumentation und das reichlich vorhandene Onlinematerial (Tutorials, Git-Repos etc.) angeschaut. | Zu der SW Entwicklung haben wir uns die Dokumentation und das reichlich vorhandene Onlinematerial (Tutorials, Git-Repos etc.) angeschaut. | ||
- | ## Material | + | ====== |
- Cozmo | - Cozmo | ||
+ | |||
- Handy mit Cozmo App | - Handy mit Cozmo App | ||
+ | |||
- Karte | - Karte | ||
- | ## Aufbau | + | ====== |
In dem Bild ist der Cozmo zu sehen, wie er exemplarisch einer Linie folgen soll. | In dem Bild ist der Cozmo zu sehen, wie er exemplarisch einer Linie folgen soll. | ||
Zeile 51: | Zeile 52: | ||
![example-card-vektor](uploads/ | ![example-card-vektor](uploads/ | ||
- | ## Start Anleitung: | + | ====== |
- Handy mit dem PC verbinden | - Handy mit dem PC verbinden | ||
Zeile 60: | Zeile 61: | ||
- | ## Zwischenstand | + | ====== |
Das aktuelle Problem besteht darin, Cozmo eine Linie folgen zu lassen. Der Ansatz ist das Nutzen eines bereits erhältlichen Scriptes (line_follower.py) und dieses mit eigenen Erweiterungen auf dem Cozmo zu implementieren. Der nächste Schritt ist dann, die Suchalgortihmen und den line_follower so zu verbinden, dass der Cozmo die Linien abfährt, dabei die Wege mappt und anschließend den schnellsten Weg berechnet. Hierbei sollen die Algorithmen eigenständig implementiert werden, aber über eine Schnittstelle mit line_follower verbunden werden können. Probleme bestehen darin, die Skripte auf den Cozmo zu übertragen und korrekt auszuführen. | Das aktuelle Problem besteht darin, Cozmo eine Linie folgen zu lassen. Der Ansatz ist das Nutzen eines bereits erhältlichen Scriptes (line_follower.py) und dieses mit eigenen Erweiterungen auf dem Cozmo zu implementieren. Der nächste Schritt ist dann, die Suchalgortihmen und den line_follower so zu verbinden, dass der Cozmo die Linien abfährt, dabei die Wege mappt und anschließend den schnellsten Weg berechnet. Hierbei sollen die Algorithmen eigenständig implementiert werden, aber über eine Schnittstelle mit line_follower verbunden werden können. Probleme bestehen darin, die Skripte auf den Cozmo zu übertragen und korrekt auszuführen. | ||
- | ## Verbesserungen für Version (nach 09.Juli.2021) | + | ====== |
+ | (nach 09.Juli.2021) | ||
+ | |||
+ | Es besteht die Möglichkeit eine direkte verbindung über den PC, ohne die mobile App, mit dem Cozmo aufzubauen. Dies ist ein open Source Projekt (PyCozmo) von privaten Entwicklern und bietet fast die gleichen funktionen, wie die Cozmo SDK. | ||
+ | |||
+ | ===== Digitalisierung ===== | ||
+ | |||
+ | Da eine Fertigstellung nicht mehr zu realisieren war, wurde der Ansatz verfolgt, die Algorithmen virtuell darzustellen: | ||
+ | |||
+ | main.py: | ||
+ | |||
+ | '' | ||
+ | from pygame.locals import *\\ | ||
+ | import pygamemenu\\ | ||
+ | \\ | ||
+ | pygame.init()\\ | ||
+ | |||
+ | disp=pygame.display.set_mode\(\(640, | ||
+ | |||
+ | |||
+ | items = [" | ||
+ | |||
+ | |||
+ | nodelist = node.grow(64, | ||
+ | |||
+ | pixel = pygame.Surface\((10, | ||
+ | pixel.fill\((200, | ||
+ | for i in nodelist: | ||
+ | disp.blit(pixel, | ||
+ | |||
+ | choice = 0\\ | ||
+ | |||
+ | while True:\\ | ||
+ | pygame.time.delay(100)\\ | ||
+ | pygame.display.update()\\ | ||
+ | |||
+ | for event in pygame.event.get(): | ||
+ | if event.type==QUIT: | ||
+ | pygame.quit()\\ | ||
+ | sys.exit()\\ | ||
+ | '' | ||
+ | |||
+ | |||
+ | node.py: | ||
+ | |||
+ | '' | ||
+ | from random import randint as rand\\ | ||
+ | class Node:\\ | ||
+ | def \_\_init\_\_(self, | ||
+ | self.Position = position\\ | ||
+ | self.Neighbours = [None, None, None, None]\\ | ||
+ | # 0 \\ | ||
+ | #3 1 \\ | ||
+ | # 2 \\ | ||
+ | |||
+ | def \_\_eq\_\_(self, | ||
+ | return self.Position == other.Position \\ | ||
+ | def \_\_repr\_\_(self): | ||
+ | return str(self.Position[0])+',' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | def grow(x,y): \\ | ||
+ | nodelist=[] \\ | ||
+ | Start_node = Node\((0, | ||
+ | nodelist.append(Start_node) \\ | ||
+ | cur = Start_node \\ | ||
+ | is_valid = lambda a,b: (a<x and b<y and a>=0 and b>=0) \\ | ||
+ | |||
+ | i = 0 \\ | ||
+ | while i < (x*y// | ||
+ | |||
+ | cur = nodelist[rand(0, | ||
+ | r = rand(0,3) \\ | ||
+ | nposx, | ||
+ | if r == 0: nposy += -1 \\ | ||
+ | if r == 2: nposy += +1 \\ | ||
+ | if r == 1: nposx += +1 \\ | ||
+ | if r == 3: nposx += -1 \\ | ||
+ | |||
+ | if not is_valid(nposx, | ||
+ | continue \\ | ||
+ | |||
+ | |||
+ | new = Node\((nposx, | ||
+ | |||
+ | if new in nodelist: \\ | ||
+ | continue \\ | ||
+ | |||
+ | |||
+ | ''' | ||
+ | Es werden 4 neue Knoten erstellt, die später wieder gelöscht werden. Eine Hashmap wäre hier effizienter. \\ | ||
+ | ''' | ||
+ | getnode = lambda a,b : nodelist[nodelist.index(Node\((a, | ||
+ | otherlist=[]\\ | ||
+ | try:\\ | ||
+ | otherlist.append(getnode(nposx, | ||
+ | except ValueError: | ||
+ | try:\\ | ||
+ | otherlist.append(getnode(nposx+1, | ||
+ | except ValueError: | ||
+ | try:\\ | ||
+ | otherlist.append(getnode(nposx, | ||
+ | except ValueError: | ||
+ | try:\\ | ||
+ | otherlist.append(getnode(nposx-1, | ||
+ | except ValueError: | ||
+ | |||
+ | if len(otherlist)!=1: | ||
+ | continue\\ | ||
+ | other=otherlist[0]\\ | ||
+ | |||
+ | if other.Position[0]-1 == nposx:\\ | ||
+ | new.Neighbours[1]=other\\ | ||
+ | other.Neighbours[3]=new\\ | ||
+ | if other.Position[0]+1 == nposx:\\ | ||
+ | new.Neighbours[3]=other\\ | ||
+ | other.Neighbours[1]=new\\ | ||
+ | if other.Position[1]-1 == nposy:\\ | ||
+ | new.Neighbours[2]=other\\ | ||
+ | other.Neighbours[0]=new\\ | ||
+ | if other.Position[1]+1 == nposy:\\ | ||
+ | new.Neighbours[0]=other\\ | ||
+ | other.Neighbours[2]=new\\ | ||
+ | |||
+ | nodelist.append(new)\\ | ||
+ | i+=1\\ | ||
+ | print(i,' | ||
+ | |||
+ | return nodelist\\ | ||
+ | '' | ||
+ | |||
- | Es besteht die möglichkeit eine direkte verbindung über den PC, ohne die mobile App, mit dem Cozmo aufzubauen. Dies ist ein open Source Projekt (PyCozmo) von privaten Entwicklern und bietet fast die gleichen funktionen, wie die Cozmo SDK. | ||
- | ## Quellenverzeichnis | + | ===== Quellenverzeichnis |
- [libcozmo](https:// | - [libcozmo](https:// |