Skip to content

Szymon-Glinka/skillsComp-semifinals

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Static Badge GitHub commit activity GitHub code size in bytes

THIS TRANSLATION IS BEING MADE. PLEASE BE PATIENT

Translations:

About the project

This repository contains solutions for semifinal tasks for SkillsComp - Robotyka Mobilna with all the files used to develop those solutions (folders labeledtest).
logo has been generated using simple logo generator

Table of contents:

MazeSolver

Informations about program

This code is a solution for first problem maze. Maze solving algorythm is in two python files: mazeSolver.py and backendSolvable.py File labeled backendSolvable.py contains all modules used to read maze from a file, dfs, path ploting. File labeled mazeSolver.py uses all moduls from backendSolvable.py and solves the maze.

How it works

Program sprawdza czy dookoła obecnego położenia są wolne komórki - " ", jeżeli tak zapisuje wszystkie pozycje do których jest w stanie przejść w następnym kroku. Następnie wykonuje możliwy ruch usuwając go jednocześnie z listy ruchów możliwych do wykonania, a poprzednią pozycje dodaje do tabeli z poprzednimi popzycjami. Jeżeli dana pozycja nie ma żadnego możliwego ruchu do wykonania, progam wraca do innych możliowych pozycji (jeżeli takie zostały zapisane podczas np. jakiegoś rozwidlenia).
Algorytm zwraca True jeżeli dotarł do wyjścia E i liste z dokładnym rozwiązaniem labiryntu, np. ['RIGHT', 'RIGHT', 'RIGHT', 'DOWN', 'DOWN', 'DOWN']. Jeżeli program nie jest we stanie dotrzeć do wyjścia zwróci False oraz dlaczego nie rozwiązał labiryntu, np. E3 - multiple starting positions for letter 'r' - oznacza, to że w podanym labiryncie znajduje się więcej niż jedno rozpoczęcie (więcej niż jedna litera, od której program ma zacząć rozwiązywanie)

Używanie programu do rozwiązania labiryntu

Aby rozwiązać wybrany labirynt należy:

  • wpisać lokalizację pliku tekstowego z tym labiryntem
    maze = getMazeFromTXT(r"TUTAJ LOKALIZACJA PLIKU")
    NP.
    maze = getMazeFromTXT(r"F:\skillscomp\z1textFiles\labirynt9.txt")
  • wpisać jaka litera oznacza pozycję od której program ma zacząć rozwiązywanie labiryntu
    solvable, info = mazeSolver(maze, "LITERA")
    NP.
    solvable, info = mazeSolver(maze, "r") - Program rozwiąże labirynt dla małej litery r

Debugowanie

Aby wyświetlić dane do debagowania należy w poniższej lini zmienić level=logging.ERROR na level=logging.DEBUG
logging.basicConfig(level=logging.ERROR, format="%(asctime)s %(levelname)s %(message)s", datefmt="%y-%m-%d %H:%M")

PID

Informacje o programie

Ta aplikacja jest rozwiązaniem 2 zadania, znajduje się w folderze pid i składa się z dwóch plików,
aplikacji app.py oraz algorytmu PID i obiektu sterowanego w pliku pid.py

Obiekt sterowany

Poniżej został przedstawiony użyty obiekt drugiego rzędu, którym steruje regulator PID.

Zasada działania

Program pobiera dane wprowadzone przez użytkownika i używa ich do symulacji regulatora PID. Aby wyświetlić wykres symulacji należy nacisnać przycisk Submit
Jeżeli opcja Ziegler-nichols autotuning nie jest zaznaczona, użytkownik może ręcznie dobierać nastawy (za pomocą suwaków lub wprowadzając z klawiatury)
Jeżeli opcja Zeigler-nichols autotuning jest zaznaczona, program wyświetli wykres symulacji regulatora PID dla nastaw obliczonych za pomocą metody Zeiglera-nicholsa
Dodatkowo użytkownik może zmienić poniższe wartości:

  • Cel symulacji, domyślnie 100
  • Wartość początkową, domyślnie 0
  • ilość powtórzeń, domyślnie 250
  • zmianę czasu, domyślnie 0.1

Metoda dobierania nastaw Zeiglera-nicholsa

Oscylacja układu została wyznaczona eksperymentalnie, używając ręcznej manipulacji nastaw w aplikacji.
Układ oscyluje przy nastawach: Ki = 0, Kd = 0, Kp = 7.(27) czyli Ku = 7.(27)
Okres oscylacji układu (Tu): 0.1s
Do wyznaczenia nastaw użyto poniższych wzorów:

  • Kp = 0.6 * Ku = 0.6 * 7.(27) = +-4.36
  • Ki = 0.5 * Tu = 0.5 * 0.1 = 0.05
  • Kd = 0.125 * Tu = 0.125 * 0.1 = 0.0125

ColorRecognition

Informacje o programie

Ten program jest rozwiązaniem trzeciego zadania, znajduje się w folderze colorRecogniotion i składa się z dwóch plików,
aplikacji app.py oraz algorytmów rozpoznających i zaznaczających kolory w pliku backend.py

Zasada działania

Kiedy użytkownik zaimportuje wybrany obraz i naciśnie przycisk Detect Colors, program wykona dwie funkcje:

  • Funkcja pierwsza detectColor_markOutlines(). Wykryje kolor, stworzy maskę, gdzie tylko ten kolor jest zaznaczony, wyznaczy zarys i doda ten zarys do ostatecznej grafiki (sam obrys na czarnym tle). Ta funkcja wykona się 4 razy dla każdego z zdefiniowanego w programie koloru (czerwony, zielony, niebieski, żółty). Ta funkcja również zwraca jakie kolory zostały wykryte.
  • Funckja druga detectPositionsOfColors(). Wykrywa kolory i je zaznacza na tym samym zdjęciu, z którego kolory zostały wykryte. Dodatkowo funkcja ta zwraca słownik - nazwę koloru jako klucz i przpisaną do niego wartość jako tuple, w którym znajdują się: odległość środka prostokąta (prostokątem jest oznaczony wykryty przedmiot w daynym kolorze) od lewego górnego rogu w osi X oraz w osi Y, pozycja środka tego zaznaczenia w odniesieniu od środka ekranu (left, right, top, bottom) oraz odległość tego zaznaczenia od środka obrazu w osi X i Y

Zapisywanie danych do pliku tekstowego

Dodatkową funkcją programu jest możliwość zapisania danych do pliku tekstowego przyciskiem Plot Data

ReadingQR

Informacje o programie

Program ten jest rozwiązaniem czwartego zadania, znajduje się w folderze qrCode i składa się z dwóch plików,
aplikacji app.py oraz algorytmów przekształcających i rozpoznających kody QR backend.py

Zasada działania

Kiedy użytkownik zaimportuje kod QR i naciśnie przycisk detect QR, program wykona poniższe funkcje. Jeżeli jednej z poniższych funkcji uda się odczytać kod QR, pozostałe nie zostaną wykonane:
Najpierw program zastosuje poszczególne filtry dla pierwotnego zdjęcia:

  • znajdzie rogi kodu QR i go "wyprostuje" poczym spróbuje odczytać kod QR
  • zastosuje rozmycie Gaussa i spóbuje odczytać kod QR
  • użyje funkcji fixBlur(), której zadaniem jest pozbycie się rozmazania obrazu, nastęnie spróbuje odczytać kod QR

Jeżeli żadnej z powyższych funkcji nie udało się odczytać kodu QR program zastosuje poszczególne filtr dla zdjęcia wcześniej zmodyfikowanego. Program:

  • znajdzie rogi kodu QR i go "wyprostuje" poczym spróbuje odczytać kod QR
  • użyje zdjęcia uzyskanego przez użycie powyższego filtra i zastosuje rozmycie Gaussa, a następnie spróbuje odczytać kod QR
  • wykona funkcję fixBlur() na zdjęciu uzyskanym po zastosowaniu rozmycia Gaussa i spróbuje odczytać kod QR

Jeżel żadnej z powyższych funkcji nie uda się odczytać kodu QR program zwróci No QR code detected

Zapisywanie danych do pliku tekstowego

Dodatkową funkcją programu jest, tak jak w programie colorRecognition, możliwość zapisania danych do pliku tekstowego przyciskiem Plot Data