ss21:roboterlabyrinth

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ss21:roboterlabyrinth [2021/10/29 13:59] – [Material] dotz_37ss21:roboterlabyrinth [2022/08/02 12:16] (aktuell) dotz_37
Zeile 1: Zeile 1:
-## Einleitung+====== Roboterlabyrinth ====== 
 +Ein Projekt von Zehra Anlatan, Dominic Braun, Henry Kusch & Robin Reichelt. 
 + 
 +====== 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, Informatikern und Theoretikern auf Basis von mathematischen Grundlagen ausgearbeitet, verfeinert oder neu konzipiert.   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, Informatikern und Theoretikern auf Basis von mathematischen Grundlagen ausgearbeitet, verfeinert oder neu konzipiert.  
Zeile 17: 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+====== Theorie ======
  
 Viele Probleme der Graphentheorie können mithilfe von Suchalgorithmen effizient gelöst werden. Beispiele für diese Probleme sind das Problem des Handlungsreisenden, die Berechnung kürzester Pfade und die Konstruktion eines minimalen Spannbaums. Viele Probleme der Graphentheorie können mithilfe von Suchalgorithmen effizient gelöst werden. Beispiele für diese Probleme sind das Problem des Handlungsreisenden, die Berechnung kürzester Pfade und die Konstruktion eines minimalen Spannbaums.
Zeile 25: 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+====== 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://www.digitaldreamlabs.com/ zu finden.  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://www.digitaldreamlabs.com/ zu finden. 
  
 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+====== Material ======
  
 - Cozmo - Cozmo
Zeile 38: Zeile 41:
 - Karte - Karte
  
-## Aufbau+====== 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 49: Zeile 52:
 ![example-card-vektor](uploads/66b47d3c3b4c79f41159dccf224a077d/example-card-vektor.png) ![example-card-vektor](uploads/66b47d3c3b4c79f41159dccf224a077d/example-card-vektor.png)
  
-## Start Anleitung:+====== Start Anleitung: ======
  
 - Handy mit dem PC verbinden - Handy mit dem PC verbinden
Zeile 58: Zeile 61:
  
  
-## Zwischenstand+====== 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)+====== Verbesserungen für Version   ====== 
 +(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: 
 + 
 +''import pygame,sys,node \\ 
 +from pygame.locals import *\\ 
 +import pygamemenu\\ 
 + \\ 
 +pygame.init()\\ 
 + 
 +disp=pygame.display.set_mode\(\(640,640))\\ 
 + 
 + 
 +items = ["Algorithm 1","Algorithm 2","Algorithm 3","exit"]\\ 
 + 
 + 
 +nodelist = node.grow(64,64)\\ 
 + 
 +pixel = pygame.Surface\((10,10))\\ 
 +pixel.fill\((200,200,200))\\ 
 +for i in nodelist:\\ 
 +    disp.blit(pixel,(i.Position[0]*10,i.Position[1]*10))\\ 
 + 
 +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, position):\\ 
 +        self.Position = position\\ 
 +        self.Neighbours = [None, None, None, None]\\ 
 +        # 0 \\ 
 +        #3 1 \\ 
 +        # 2 \\ 
 + 
 +    def \_\_eq\_\_(self,other): \\ 
 +        return self.Position == other.Position \\ 
 +    def \_\_repr\_\_(self): \\ 
 +        return str(self.Position[0])+','+str(self.Position) \\ 
 + 
 + 
 + 
 + 
 +def grow(x,y): \\ 
 +    nodelist=[] \\ 
 +    Start_node = Node\((0,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//2):#creates a random maze \\ 
 + 
 +        cur = nodelist[rand(0,len(nodelist)-1)]#i know randchoice is a thing \\ 
 +        r = rand(0,3) \\ 
 +        nposx,nposy=cposx,cposy = cur.Position \\ 
 +        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,nposy): \\ 
 +            continue \\ 
 + 
 + 
 +        new = Node\((nposx,nposy)) \\ 
 + 
 +        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,b)))]\\ 
 +        otherlist=[]\\ 
 +        try:\\ 
 +            otherlist.append(getnode(nposx,nposy-1))\\ 
 +        except ValueError:pass\\ 
 +        try:\\ 
 +            otherlist.append(getnode(nposx+1,nposy))\\ 
 +        except ValueError:pass\\ 
 +        try:\\ 
 +            otherlist.append(getnode(nposx,nposy+1))\\ 
 +        except ValueError:pass\\ 
 +        try:\\ 
 +            otherlist.append(getnode(nposx-1,nposy))\\ 
 +        except ValueError:pass\\ 
 +         
 +        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,'of',x*y//2)\\ 
 +         
 +    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://github.com/vinitha910/libcozmo) - [libcozmo](https://github.com/vinitha910/libcozmo)
  • ss21/roboterlabyrinth.1635508749.txt.gz
  • Zuletzt geändert: 2021/10/29 13:59
  • von dotz_37