Skip to content

Commit

Permalink
#3 Lagrar nu koordinater för kartor i mongodb🥬
Browse files Browse the repository at this point in the history
  • Loading branch information
EinarJohansson committed Oct 27, 2020
1 parent 1d0321f commit eff8d12
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 11 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Robot för automatisering av lagerarbete m.m 🤖
- Gör en pull request
noob

### Göra ändringar i koden för visualering:
### Göra ändringar i koden för visualering
- Innan virtuella miljön avaktiveras
- Navigera till Gymnasiearbete
- ```pip freeze > requirements.txt```
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ kiwisolver==1.2.0
matplotlib==3.3.2
numpy==1.19.2
Pillow==8.0.1
pymongo==3.11.0
pyparsing==2.4.7
python-dateutil==2.8.1
six==1.15.0
81 changes: 81 additions & 0 deletions visualisering/databas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import pymongo
from datetime import datetime

class Databas:
'''
Klass för att lagra och hämta kartor.
'''
def __init__(self):
'''
Försöker ansluta till databasen.
'''
try:
self.handtag = pymongo.MongoClient("mongodb://localhost:27017/")
self.db = self.handtag["kartor"]
self.karta = self.välj()
except Exception as e:
print('Starta mongo!')

def kartor(self) -> list:
'''
Hämtar namnet på kartorna som redan finns.
'''
return self.db.list_collection_names()

def kista(self, villkor: dict = {}) -> list:
'''
Öppnar upp kistan och returnerar dess koordinater.
'''
if self.karta:
return self.karta.find({}, villkor)

def välj(self):
'''
Välj om en ny karta ska skapas eller om en befintlig karta ska användas.
'''
kartor = self.kartor()
antal = len(kartor)

if antal > 0:
print('Dessa kartor fanns redan i databasen\n')
for i in range(antal):
print('[{}]: {}'.format(i, kartor[i]))

try:
skapa = int(input('Vill du använda en befintlig karta? (0/1) '))
except Exception:
return self.ny()

if not skapa:
return self.ny()

try:
index = int(input('Vilken karta vill du använda? (0-{}) '.format(antal-1)))
karta = kartor[index]
except Exception:
print('Felaktig inmatning')

return self.db[karta]

else:
return self.ny()

def ny(self):
'''
Skapar en ny karta.
'''
print('Gör en ny karta')
tid = datetime.now()
namn = tid.strftime("%Y-%m-%d %H:%M:%S")
return self.db[namn]

def spara(self, koordinater: list):
'''
Sparar en bunt koordinater som hör ihop med en viss karta i databasen.
'''
if self.karta:
return self.karta.insert_many(koordinater)
else:
print('Ingen karta har valts')


31 changes: 21 additions & 10 deletions visualisering/karta.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import matplotlib.pyplot as plt
import matplotlib.animation as anim
from koordinat import Koordinat
from databas import Databas
from math import cos, sin, pi

class Karta:
Expand All @@ -13,13 +14,15 @@ def __init__(self):
Initierar kartan.
'''
self.koordinater = list()
self.db = Databas()

self.fig = plt.figure()

self.ax = self.fig.gca()
self.ax.set_ylabel('cm')
self.ax.set_xlabel('cm')

self.position = (0, 0)
self.position = (0, 0) # Robotens startpostion markeras från origo

plt.grid() # Rutnät över grafen

Expand All @@ -35,8 +38,12 @@ def läs(self, kö: queue.Queue):
self.position = (koord.x, koord.y)

vägg = self.konvertera(koord)
self.koordinater.append(vägg)

self.koordinater.append(vägg)

if len(self.koordinater) == 180:
self.db.spara(self.koordinater)
self.koordinater.clear()

.task_done()

def konvertera(self, koordinat: Koordinat) -> tuple:
Expand All @@ -46,7 +53,7 @@ def konvertera(self, koordinat: Koordinat) -> tuple:
x = koordinat.distans * cos(pi/2 - koordinat.vinkel) + koordinat.x
y = koordinat.distans * sin(pi/2 - koordinat.vinkel) + koordinat.y

return (x, y)
return {'x': x, 'y': y, 'stegX': koordinat.x, 'stegY': koordinat.y} # Informationen som lagras i databasen.

def visa(self):
'''
Expand All @@ -59,9 +66,13 @@ def uppdatera(self, i):
'''
Uppdatera kartan med nya värden.
'''
if self.koordinater:
x = [kord[0] for kord in self.koordinater]
y = [kord[1] for kord in self.koordinater]

plt.scatter(x, y) # Markera väggarnas position med en prick
plt.plot(self.position, '*') # Markera vart roboten är i koordinatsystemet
koordinater = self.db.kista({'_id': 0, 'x': 1, 'y': 1})

x, y = [], []

for koordinat in koordinater:
x.append(koordinat['x'])
y.append(koordinat['y'])

plt.scatter(x, y) # Markera väggarnas position med en prick
plt.plot(self.position, '*') # Markera vart roboten är i koordinatsystemet

0 comments on commit eff8d12

Please sign in to comment.