TechLab - Laboratórium budúcnosti
5. DOBOT MAGICIAN - PYTHON + LINUX
Sedenie 5.1: Uvod do Linuxu, uvod do programovania
Trvanie: 45 min práca + 45 min samostatne
Cieľ: Základná orientácia v Linuxe a prvý Python programPotrebné:
- 1x Notebook s Linuxom (Ubuntu)
- Textový editor (nano, gedit, VS Code)
Postup (45 min):
- Linux terminal (15 min)
- Otvor terminál (Ctrl+Alt+T)
- Základné príkazy:
pwd- kde somls- čo je tucd Desktop- choď do priečinkacd ..- choď o úroveň vyššiemkdir techlab- vytvor priečinokcd techlab
- Vytvor pracovný priečinok pre projekty
- Prvý Python program (20 min)
- Otvor editor:
nano hello.py - Napíš:
- Otvor editor:
python
print("Hello, TechLab!")- Ulož (Ctrl+O, Enter, Ctrl+X)
- Spusti:
python3 hello.py - Vylepši:
python
meno = input("Ako sa voláš? ") print("Ahoj, " + meno + "!")- Premenné a matematika (10 min)
- Vytvor
calculator.py
- Vytvor
python
a = 10 b = 5 print("Súčet:", a + b) print("Rozdiel:", a - b) print("Súčin:", a * b) print("Podiel:", a / b)- Vylepši - zadávanie od používateľa:
python
a = int(input("Zadaj číslo: ")) b = int(input("Zadaj druhé číslo: ")) print("Súčet:", a + b)Samostatná práca (45 min):
- Urob program na prepočet mien (EUR → CZK)
- Urob program na výpočet obsahu obdĺžnika
- Urob "hádaj číslo" hru (if-elif-else)
- Skús for cyklus (vypíš čísla 1-10)
Troubleshooting:
- Príkaz nenájdený → skontroluj preklepy,
python3niepython - Chyba v kóde → prečítaj error message, skontroluj odsadenie
- Terminál nereaguje → Ctrl+C prerušenie
Sedenie 5.2: Robot - sekvencie z bodu do bodu
Trvanie: 45 min práca + 45 min samostatne
Cieľ: Naprogramovať Dobot na pohyb medzi bodmi, použiť gripperPotrebné:
- Dobot Magician
- Gripper (chapadlo)
- Notebook s Linuxom
- Dobot Python knižnica (DobotAPI)
- Malé predmety na uchopenie (kocky, guľôčky)
Postup (45 min):
- Inštalácia knižnice (10 min)
- Terminál:
bash
cd ~/techlab pip3 install pydobot- Zapoj Dobot USB
- Nainštaluj gripper na koncovú časť
- Test pripojenia:
python
from pydobot import Dobot port = '/dev/ttyUSB0' # alebo ttyACM0 dobot = Dobot(port=port) dobot.home() # Test grippera dobot.grip(True) # zavrieť import time time.sleep(2) dobot.grip(False) # otvoriť dobot.close()- Prvý pohyb s gripperom (15 min)
- Vytvor
dobot_pick.py:
- Vytvor
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') # Home pozícia dobot.home() time.sleep(2) # Otvor gripper dobot.grip(False) time.sleep(1) # Pohyb k objektu dobot.move_to(200, 0, 20, 0) # nízko time.sleep(2) # Uchop dobot.grip(True) time.sleep(1) # Zdvihni dobot.move_to(200, 0, 80, 0) time.sleep(2) # Presuň dobot.move_to(200, 150, 80, 0) time.sleep(2) # Zostup dobot.move_to(200, 150, 20, 0) time.sleep(2) # Pusť dobot.grip(False) time.sleep(1) # Späť hore dobot.move_to(200, 150, 80, 0) time.sleep(1) dobot.home() dobot.close()- Nájdenie súradníc (10 min)
- Ručne pohni Dobot do pozície (gripper vypnutý!)
- Spusti:
python
from pydobot import Dobot dobot = Dobot(port='/dev/ttyUSB0') pose = dobot.pose() print("X:", pose[0]) print("Y:", pose[1]) print("Z:", pose[2]) print("R:", pose[3]) dobot.close()- Zapíš si dôležité body (miesto uchopenia, miesto položenia)
- Pick and place funkcia (10 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() def pick_and_place(x1, y1, z1, x2, y2, z2): # Otvor gripper dobot.grip(False) time.sleep(0.5) # K objektu dobot.move_to(x1, y1, z1 + 30, 0) # nad objektom time.sleep(1) dobot.move_to(x1, y1, z1, 0) # zostup time.sleep(1) # Uchop dobot.grip(True) time.sleep(1) # Zdvihni dobot.move_to(x1, y1, z1 + 30, 0) time.sleep(1) # Presuň dobot.move_to(x2, y2, z2 + 30, 0) time.sleep(1) dobot.move_to(x2, y2, z2, 0) time.sleep(1) # Pusť dobot.grip(False) time.sleep(1) # Späť hore dobot.move_to(x2, y2, z2 + 30, 0) time.sleep(1) # Použitie pick_and_place(200, 0, 10, 200, 150, 10) pick_and_place(200, 50, 10, 200, 200, 10) dobot.home() dobot.close()Samostatná práca (45 min):
- Nakresli štvorec s gripperom
- Urob sortovanie - 3 objekty na 3 miesta
- Urob "tower of hanoi" - presúvanie kociek
- Experimentuj s rýchlosťou pohybu
Troubleshooting:
- Dobot nenájdený → skontroluj port
ls /dev/tty*, skús ttyACM0 - Chyba pripojenia → práva
sudo chmod 666 /dev/ttyUSB0 - Gripper nefunguje → skontroluj napájanie, pripojenie
- Objekt vypadáva → gripper potrebuje kalibráciu, zväčši grip time
- Robot ide mimo → malé pohyby, skontroluj workspace limits
Sedenie 5.3: Podprogramy, funkcie, volanie tlačidlom
Trvanie: 45 min práca + 45 min samostatne
Cieľ: Používať funkcie a ovládať robot tlačidlamiPostup (45 min):
- Úvod do funkcií (10 min)
python
def pozdrav(): print("Ahoj z funkcie!") # Zavolanie pozdrav() pozdrav()- Funkcia s parametrami:
python
def pozdrav_meno(meno): print("Ahoj, " + meno + "!") pozdrav_meno("Peter") pozdrav_meno("Jana")- Dobot funkcia - štvorec (15 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() def stvorec(x_start, y_start, velkost): dobot.move_to(x_start, y_start, 50, 0) time.sleep(1) dobot.move_to(x_start + velkost, y_start, 50, 0) time.sleep(1) dobot.move_to(x_start + velkost, y_start + velkost, 50, 0) time.sleep(1) dobot.move_to(x_start, y_start + velkost, 50, 0) time.sleep(1) dobot.move_to(x_start, y_start, 50, 0) # Zavolanie stvorec(150, 0, 50) stvorec(150, 100, 30) dobot.close()- Funkcia s return (10 min)
python
def vypocitaj_bod(x, y, offset): novy_x = x + offset novy_y = y + offset return novy_x, novy_y x, y = vypocitaj_bod(100, 50, 20) dobot.move_to(x, y, 50, 0)- Ovládanie klávesnicou (10 min)
python
from pydobot import Dobot dobot = Dobot(port='/dev/ttyUSB0') dobot.home() def hore(): pose = dobot.pose() dobot.move_to(pose[0], pose[1] + 10, pose[2], pose[3]) def dole(): pose = dobot.pose() dobot.move_to(pose[0], pose[1] - 10, pose[2], pose[3]) print("w - hore, s - dole, q - koniec") while True: prikaz = input("Príkaz: ") if prikaz == "w": hore() elif prikaz == "s": dole() elif prikaz == "q": break dobot.close()Samostatná práca (45 min):
- Vytvor funkcie pre všetky smery (hore/dole/vľavo/vpravo)
- Vytvor funkciu
kruh() - Vytvor funkciu
hviezda() - Urob menu s možnosťami (1-štvorec, 2-kruh, atď.)
Sedenie 5.4: Premenné, podmienky, senzory
Trvanie: 45 min práca + 45 min samostatne
Cieľ: Použiť RGB a IR senzory Dobotu a reagovať na nePotrebné:
- Dobot Magician
- RGB color senzor (pripojený na EIO port)
- IR infrared senzor (pripojený na EIO port)
- Farebné predmety (červená, zelená, modrá kocka)
- Notebook s Linuxom
Postup (45 min):
- Čítanie RGB senzora (15 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() # RGB senzor na porte EIO12 (uprav podľa zapojenia) while True: # Čítaj analógový vstup color_value = dobot.get_io_multiplexing(12) print(f"RGB hodnota: {color_value}") # Určenie farby (potrebná kalibrácia!) if color_value < 100: print("Červená") elif color_value < 200: print("Zelená") elif color_value < 300: print("Modrá") else: print("Žiadna farba") time.sleep(1)- IR senzor - detekcia objektu (10 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() # IR senzor na porte EIO10 print("Čakám na objekt...") while True: ir_value = dobot.get_io_multiplexing(10) if ir_value == 1: # Objekt detekovaný print("Objekt detekovaný!") dobot.move_to(200, 0, 50, 0) time.sleep(2) dobot.home() break time.sleep(0.1) dobot.close()- Kombinácia RGB + Gripper (20 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() dobot.grip(False) # Pozície pre farby RED_POS = (150, 100, 10) GREEN_POS = (200, 100, 10) BLUE_POS = (250, 100, 10) def detect_color(value): if value < 100: return "RED" elif value < 200: return "GREEN" elif value < 300: return "BLUE" return "NONE" def sort_by_color(x, y, z): # K objektu dobot.move_to(x, y, z + 30, 0) time.sleep(1) dobot.move_to(x, y, z, 0) time.sleep(1) # Čítaj farbu color_value = dobot.get_io_multiplexing(12) color = detect_color(color_value) print(f"Farba: {color}") # Uchop dobot.grip(True) time.sleep(1) dobot.move_to(x, y, z + 30, 0) time.sleep(1) # Polož podľa farby if color == "RED": target = RED_POS elif color == "GREEN": target = GREEN_POS elif color == "BLUE": target = BLUE_POS else: dobot.grip(False) return dobot.move_to(target[0], target[1], target[2] + 30, 0) time.sleep(1) dobot.move_to(target[0], target[1], target[2], 0) time.sleep(1) dobot.grip(False) time.sleep(1) sort_by_color(200, 0, 10) dobot.home() dobot.close()Samostatná práca (45 min):
- Urob automatické triedenie - IR + RGB + gripper
- Pridaj počítadlo farieb
- Urob "quality control" - len zelené ďalej
- Kombinuj RGB + pozíciu
Troubleshooting:
- RGB nevráti hodnotu → skontroluj port EIO, zapojenie
- Hodnoty nestabilné → kalibruj, konštantné svetlo
- IR nereaguje → vzdialenosť 1-10cm
- Farby sa menia → rekalibruj thresholdy
Sedenie 5.5: Podprogramy ovládané senzormi + posuvný pás
Trvanie: 45 min práca + 45 min samostatne
Cieľ: Automatizované správanie s posuvným pásom, RGB a IR senzormiPotrebné:
- Dobot Magician
- Posuvný pás (conveyor belt)
- RGB senzor
- IR senzor
- Gripper
- Farebné objekty
- Notebook s Linuxom
Postup (45 min):
- Ovládanie posuvného pásu (10 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') # Zapni pás (motor na EIO porte) dobot.set_io_multiplexing(13, 1) # port a smer time.sleep(3) # Vypni pás dobot.set_io_multiplexing(13, 0) dobot.close()- Rýchlosť pásu:
python
# PWM ovládanie rýchlosti (0-100) dobot.set_io_pwm(13, 50) # 50% rýchlosť time.sleep(3) dobot.set_io_pwm(13, 100) # 100% rýchlosť time.sleep(3) dobot.set_io_pwm(13, 0) # stop- Production line - základná linka (20 min)
python
from pydobot import Dobot import time dobot = Dobot(port='/dev/ttyUSB0') dobot.home() dobot.grip(False) # Pozície PICKUP_POS = (200, -50, 10) # nad pásom RED_BOX = (150, 100, 10) GREEN_BOX = (200, 100, 10) BLUE_BOX = (250, 100, 10) def detect_color(value): if value < 100: return "RED" elif value < 200: return "GREEN" elif value < 300: return "BLUE" return "NONE" def wait_for_object(): """Čakaj kým IR detekuje objekt""" print("Čakám na objekt...") while True: ir = dobot.get_io_multiplexing(10) if ir == 1: return True time.sleep(0.1) def pick_from_belt(): """Zdvihni objekt z pásu""" dobot.move_to(PICKUP_POS[0], PICKUP_POS[1], PICKUP_POS[2] + 30, 0) time.sleep(1) dobot.move_to(PICKUP_POS[0], PICKUP_POS[1], PICKUP_POS[2], 0) time.sleep(1) dobot.grip(True) time.sleep(1) dobot.move_to(PICKUP_POS[0], PICKUP_POS[1], PICKUP_POS[2] + 30, 0) time.sleep(1) def place_object(x, y, z): """Polož objekt na pozíciu""" dobot.move_to(x, y, z + 30, 0) time.sleep(1) dobot.move_to(x, y, z, 0) time.sleep(1) dobot.grip(False) time.sleep(1) dobot.move_to(x, y, z + 30, 0) time.sleep(1) # HLAVNÁ SLUČKA print("Produkčná linka spustená!") dobot.set_io_pwm(13, 60) # Zapni pás try: while True: # Čakaj na objekt if wait_for_object(): # Zastav pás dobot.set_io_pwm(13, 0) time.sleep(0.5) # Zdvihni objekt pick_from_belt() # Detekuj farbu color_value = dobot.get_io_multiplexing(12) color = detect_color(color_value) print(f"Detekovaná farba: {color}") # Zosortuj if color == "RED": place_object(RED_BOX[0], RED_BOX[1], RED_BOX[2]) elif color == "GREEN": place_object(GREEN_BOX[0], GREEN_BOX[1], GREEN_BOX[2]) elif color == "BLUE": place_object(BLUE_BOX[0], BLUE_BOX[1], BLUE_BOX[2]) else: print("Neznáma farba, preskakunjem") # Spusti pás znova dobot.set_io_pwm(13, 60) time.sleep(2) # Čakaj kým ďalší objekt príde except KeyboardInterrupt: print("\nUkončujem...") dobot.set_io_pwm(13, 0) # Vypni pás dobot.home() dobot.close()- Počítadlo produktov (10 min)
python
# Pridaj do kódu vyššie: counter = {"RED": 0, "GREEN": 0, "BLUE": 0, "TOTAL": 0} # Po detekcii farby: counter[color] += 1 counter["TOTAL"] += 1 print(f"Spracované: {counter}") # Na konci (Ctrl+C): print("\n=== ŠTATISTIKY ===") print(f"Červené: {counter['RED']}") print(f"Zelené: {counter['GREEN']}") print(f"Modré: {counter['BLUE']}") print(f"Celkom: {counter['TOTAL']}")Samostatná práca (45 min):
- Urob quality control - nepresné farby vyhoď bokom
- Pridaj druhý pás pre expedíciu
- Urob "assembly line" - viac krokov (pick, process, place)
- Pridaj buzzer pri chybe
- Urob automatickú kalibráciu RGB (priemeruj 10 meraní)
Troubleshooting:
- Pás nejde → skontroluj port EIO, napájanie
- Objekt spadne → synchronizuj IR + pás stop presnejšie
- Robot nestíha → zrýchli pohyby, optimalizuj cesty
- Kolízie → nastavuj bezpečné výšky, vyhýbaj sa pásu
- Pás ide len jedným smerom → zmeň polaritu, skús opačný port
