IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Ladislav Tlapák:1.1.2021 19:45

Ahoj všichni,
Potřeboval bych poradit s tvorbou programovacího prostředí pro robota. Jde mi o to aby uživatel mohl v tomto prostředí nadefinovat robotovo chování. Robot se bude z kládat z 5 os a griperu. Nějaký vzor sem už zkusil naprogramovat, ale nevím jak implementovat podmínku, například počet kroků nebo nějaký vztup (ručně do programu napsat není problém, ale udělat tak aby si to uživatel mohl naklikat sám).

Zkusil jsem:

print("Tvorba programu\n")
pokracovat = True
program = "soubor.txt"
while pokracovat:
    print("1 - STOP")
    print("2 - VPRED")
    print("3 - VZAD")
    print("4 - DOLEVA")
    print("5 - DOPRAVA")
    cislo_operace = int(input("Zadejte číslo operace: "))
    if cislo_operace == 1:
        with open(program, "a", encoding="utf-8") as f:
         f.write("Zastav\n")
         f.flush()
         print("Zapsano STOP")
    elif cislo_operace == 2:
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vpred\n")
         f.flush()
         print("Zapsano VPRED")
    elif cislo_operace == 3:
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vzad\n")
         f.flush()
         print("Zapsano VZAD")
    elif cislo_operace == 4:
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vlevo\n")
         f.flush()
         print("Zapsano DOLEVA")
    elif cislo_operace == 5:
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vpravo\n")
         f.flush()
         print("Zapsano DOPRAVA")
    else:
        print("Neplatná volba!")
    nezadano = True
    while nezadano:
        odpoved = input("\nPřejete si pokračovat y / n: ")
        if (odpoved == "y" or odpoved == "Y"):
            nezadano = False
        elif (odpoved == "n" or odpoved == "N"):
            nezadano = False
            pokracovat = False
        else:
            pass
input("\nStiskněte libovolnou klávesu...")
Odpovědět
1.1.2021 19:45
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
Ladislav Tlapák:1.1.2021 23:43

Postoupil sem k oknové aplikaci ale pořád je to uživatelsky nepřívětivé a pořád nevím jak na podmínku

from PyQt5 import QtWidgets, QtGui
import sys
program = "program.txt"
class Window(QtWidgets.QMainWindow):
    def __init__(self, **kwargs):
        super(Window, self).__init__(**kwargs)
        self.setWindowTitle("Programovaci prostredi")
        self.init_gui()
        self.show()

    def init_gui(self):
        formular = QtWidgets.QWidget()
        formularLayout = QtWidgets.QVBoxLayout()
        formular.setLayout(formularLayout)
        boxLayout1 = QtWidgets.QHBoxLayout()
        boxLayout2 = QtWidgets.QHBoxLayout()

        formularLayout.addStretch()
        formularLayout.addLayout(boxLayout1)
        formularLayout.addLayout(boxLayout2)
        formularLayout.addStretch()
    def init_gui(self):
        formular = QtWidgets.QWidget()
        formularLayout = QtWidgets.QVBoxLayout()
        formular.setLayout(formularLayout)

        boxLayout1 = QtWidgets.QHBoxLayout()
        boxLayout2 = QtWidgets.QHBoxLayout()

        formularLayout.addStretch()
        formularLayout.addLayout(boxLayout1)
        formularLayout.addLayout(boxLayout2)
        formularLayout.addStretch()

        self.stopButton = QtWidgets.QPushButton("STOP", self)
        boxLayout2.addWidget(self.stopButton)
        self.vpredButton = QtWidgets.QPushButton("VPRED", self)
        boxLayout2.addWidget(self.vpredButton)
        self.vzadButton = QtWidgets.QPushButton("VZAD", self)
        boxLayout2.addWidget(self.vzadButton)
        self.levaButton = QtWidgets.QPushButton("VLEVO", self)
        boxLayout2.addWidget(self.levaButton)
        self.pravaButton = QtWidgets.QPushButton("VPRAVO", self)
        boxLayout2.addWidget(self.pravaButton)
        self.deleButton = QtWidgets.QPushButton("SMAZAT", self)
        boxLayout1.addWidget(self.deleButton)

        self.setCentralWidget(formular)
        self.stopButton.clicked.connect(self.stop)
        self.vpredButton.clicked.connect(self.vpred)
        self.vzadButton.clicked.connect(self.vzad)
        self.levaButton.clicked.connect(self.leva)
        self.pravaButton.clicked.connect(self.prava)
        self.deleButton.clicked.connect(self.dele)
    def stop(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Zastav\n")
         f.flush()
         print("Zapsano STOP")
    def vpred(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vpred\n")
         f.flush()
         print("Zapsano VPRED")
    def vzad(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vzad\n")
         f.flush()
         print("Zapsano VZAD")
    def leva(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vlevo\n")
         f.flush()
         print("Zapsano DOLEVA")
    def prava(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vpravo\n")
         f.flush()
         print("Zapsano DOPRAVA")
    def dele(self):
        with open(program, "w", encoding="utf-8") as f:
         f.write()
         f.flush()
aplikace = QtWidgets.QApplication(sys.argv)
okno = Window()
sys.exit(aplikace.exec_())
Nahoru Odpovědět
1.1.2021 23:43
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
Ladislav Tlapák:2.1.2021 11:34

Vložení podmínky asi vyřešeno, ale pořád to není uživatelsky OK

from PyQt5 import QtWidgets, QtGui
import sys
program = "program.txt"
class Window(QtWidgets.QMainWindow):
    def __init__(self, **kwargs):
        super(Window, self).__init__(**kwargs)
        self.setWindowTitle("Programovaci prostredi")
        self.init_gui()
        self.show()

    def init_gui(self):
        formular = QtWidgets.QWidget()
        formularLayout = QtWidgets.QVBoxLayout()
        formular.setLayout(formularLayout)
        boxLayout1 = QtWidgets.QHBoxLayout()
        boxLayout2 = QtWidgets.QHBoxLayout()

        formularLayout.addStretch()
        formularLayout.addLayout(boxLayout1)
        formularLayout.addLayout(boxLayout2)
        formularLayout.addStretch()


        self.operatorComboBox = QtWidgets.QComboBox(self)
        self.operatorComboBox.addItem("<")
        self.operatorComboBox.addItem(">")
        self.operatorComboBox.addItem("==")

        self.operatorComboBox2 = QtWidgets.QComboBox(self)
        self.operatorComboBox2.addItem("I1")
        self.operatorComboBox2.addItem("I2")
        self.operatorComboBox2.addItem("I3")
        self.operatorComboBox2.addItem("I4")
        self.operatorComboBox2.addItem("I5")
        self.operatorComboBox2.addItem("I6")
        self.operatorComboBox2.addItem("Pocet kroku")

        self.vstup = QtWidgets.QLineEdit(self)

        self.podButton = QtWidgets.QPushButton("PODMÍNKA", self)

        self.kpodButton = QtWidgets.QPushButton("KONEC PODMÍNKY", self)

        self.stopButton = QtWidgets.QPushButton("STOP", self)

        self.vpredButton = QtWidgets.QPushButton("VPRED", self)

        self.vzadButton = QtWidgets.QPushButton("VZAD", self)

        self.levaButton = QtWidgets.QPushButton("VLEVO", self)

        self.pravaButton = QtWidgets.QPushButton("VPRAVO", self)

        self.deleButton = QtWidgets.QPushButton("SMAZAT", self)

        self.setCentralWidget(formular)

        #Serazeni
        boxLayout1.addWidget(self.operatorComboBox2)
        boxLayout1.addWidget(self.operatorComboBox)
        boxLayout1.addWidget(self.vstup)
        boxLayout2.addWidget(self.podButton)
        boxLayout2.addWidget(self.kpodButton)
        boxLayout2.addWidget(self.stopButton)
        boxLayout2.addWidget(self.vpredButton)
        boxLayout2.addWidget(self.vzadButton)
        boxLayout2.addWidget(self.levaButton)
        boxLayout2.addWidget(self.pravaButton)
        boxLayout2.addWidget(self.deleButton)

        #Napojeni tlacitek
        self.stopButton.clicked.connect(self.stop)
        self.vpredButton.clicked.connect(self.vpred)
        self.vzadButton.clicked.connect(self.vzad)
        self.levaButton.clicked.connect(self.leva)
        self.pravaButton.clicked.connect(self.prava)
        self.deleButton.clicked.connect(self.dele)
        self.podButton.clicked.connect(self.pod)
        self.kpodButton.clicked.connect(self.kpod)

    #Definice funkci tlacitek
    def stop(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Zastav\n")
         f.flush()
         print("Zapsano STOP")
    def vpred(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vpred\n")
         f.flush()
         print("Zapsano VPRED")
    def vzad(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Jed vzad\n")
         f.flush()
         print("Zapsano VZAD")
    def leva(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vlevo\n")
         f.flush()
         print("Zapsano DOLEVA")
    def prava(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Otocit vpravo\n")
         f.flush()
         print("Zapsano DOPRAVA")
    def pod(self):
        operator = self.operatorComboBox.currentText()
        operator2 = self.operatorComboBox2.currentText()
        vstup = str(self.vstup.text())
        with open(program, "a", encoding="utf-8") as f:
         f.write("Podmínka\n")
         f.write(operator2 + operator + vstup +"\n")
         f.flush()
         print("Zapsano Podminka\n" + operator2 + operator + vstup)
    def kpod(self):
        with open(program, "a", encoding="utf-8") as f:
         f.write("Konec podminky\n")
         f.flush()
         print("Zapsano Konec podminky")
    def dele(self):
        with open(program, "w", encoding="utf-8") as f:
         f.write()
         f.flush()
aplikace = QtWidgets.QApplication(sys.argv)
okno = Window()
sys.exit(aplikace.exec_())
Nahoru Odpovědět
2.1.2021 11:34
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
Odpovídá na Ladislav Tlapák
Ladislav Tlapák:2.1.2021 17:37

Další pokus o grafické prostředí

import tkinter as tk
from tkinter import ttk
from tkinter import *
LARGE_MAIN_FONT= ("Courier", 40, "bold")
LARGE_FONT= ("Courier", 40)
BUTTON_FONT= ("Arial", 20, "bold")




class SeaofBTCapp(tk.Tk):

    def __init__(self, *args, **kwargs):

        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        self.geometry("500x500")
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (StartPage, PageOne, PageTwo):

            frame = F(container, self)

            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()
        self.winfo_toplevel().title("Yuki Robotics")

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text="Main menu", font=LARGE_MAIN_FONT)
        label.pack(pady=10,padx=10)

        button = tk.Button(self, text="Motion", font=BUTTON_FONT,
                            command=lambda: controller.show_frame(PageOne))
        button.pack()

        button2 = tk.Button(self, text="Programing", font=BUTTON_FONT,
                            command=lambda: controller.show_frame(PageTwo))
        button2.pack()




class PageOne(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Motion", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button1 = tk.Button(self, text="Back to main menu", font=BUTTON_FONT,
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()
        def print_valuea(vara):
            print("a="+vara)
        def print_valueb(varb):
            print("b="+varb)
        def print_valuec(varc):
            print("c="+varc)
        def print_valued(vard):
            print("d="+vard)
        def print_valuee(vare):
            print("e="+vare)
        def print_valuef(varf):
            print("f="+varf)
        vara = DoubleVar()
        varb = DoubleVar()
        varc = DoubleVar()
        vard = DoubleVar()
        vare = DoubleVar()
        varf = DoubleVar()

        a = Scale(self, variable = vara, orient=HORIZONTAL, length=275, to=275, command=print_valuea, background='orange')
        a.pack()

        b = Scale(self, variable = varb, orient=HORIZONTAL, length=275, to=275, command=print_valueb, background='red')
        b.pack()

        c = Scale(self, variable = varc, orient=HORIZONTAL, length=275, to=275, command=print_valuec, background='blue')
        c.pack()

        d = Scale(self, variable = vard, orient=HORIZONTAL, length=275, to=275, command=print_valued, background='yellow')
        d.pack()

        e = Scale(self, variable = vare, orient=HORIZONTAL, length=275, to=275, command=print_valuee, background='green')
        e.pack()

        f = Scale(self, variable = varf, orient=HORIZONTAL, length=275, to=275, command=print_valuef, background='white')
        f.pack()




class PageTwo(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Programing", font=LARGE_FONT)
        label.pack(pady=10,padx=10)

        button1 = tk.Button(self, text="Back to main menu", font=BUTTON_FONT,
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()
        def save():
            vara1=str(vara.get())
            print("a=" + vara1)
            varb1=str(varb.get())
            print("b=" + varb1)
            varc1=str(varc.get())
            print("c=" + varc1)
            vard1=str(vard.get())
            print("d=" + vard1)
            vare1=str(vare.get())
            print("e=" + vare1)
            varf1=str(varf.get())
            print("f=" + varf1)
        vara = DoubleVar()
        varb = DoubleVar()
        varc = DoubleVar()
        vard = DoubleVar()
        vare = DoubleVar()
        varf = DoubleVar()

        a = Scale(self, variable = vara, orient=HORIZONTAL, length=275, to=275, background='orange')
        a.pack()

        b = Scale(self, variable = varb, orient=HORIZONTAL, length=275, to=275, background='red')
        b.pack()

        c = Scale(self, variable = varc, orient=HORIZONTAL, length=275, to=275, background='blue')
        c.pack()

        d = Scale(self, variable = vard, orient=HORIZONTAL, length=275, to=275, background='yellow')
        d.pack()

        e = Scale(self, variable = vare, orient=HORIZONTAL, length=275, to=275, background='green')
        e.pack()

        f = Scale(self, variable = varf, orient=HORIZONTAL, length=275, to=275, background='white')
        f.pack()

        button2 = tk.Button(self, text="Save", font=BUTTON_FONT,
                            command=save)
        button2.pack()



app = SeaofBTCapp()
app.mainloop()
Nahoru Odpovědět
2.1.2021 17:37
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
JerryM
Člen
Avatar
JerryM:18.4.2021 8:36

hele a napadlo tě někdy že třeba v jiným programovacím jazyku je uživatelský prostředí už hotový a měl bys to jednodušší ???
co třeba C# a knihovna WinForms nebo jeji novější verze s názvem WPF ??? obojí už funguje jak pro .NET 4.7.2 tak i nejnovější .NET5/6 protože .NET core je mrtvá technologie ..
ale jestli trváš na úchylárnách doporučuju MS VS 2019 C++/CX UWP/UWA ... je tam skvělej visuální návrhář :) :) :) něco ve smyslu WPF

 
Nahoru Odpovědět
18.4.2021 8:36
Avatar
Odpovídá na JerryM
Ladislav Tlapák:18.4.2021 12:52

Zatím sem od projektu upustil kvůli tomuto problému. Jelikož nevím pořádně jak na to

Nahoru Odpovědět
18.4.2021 12:52
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
Odpovídá na JerryM
Ladislav Tlapák:19.4.2021 2:05

Neselhal sem ani tak na grafice, jak na to aby si uživatel mohl nakonfigurovat libovolný počet kroků do programu a ten někam uložit načíst jiný atd. Na jazyku prostředí mi nesejde jelikož výstup s ovládacího kódu čtu ze souboru. Ovladači sw v jednom řádku dával kde je, v druhém kam má jet a ze třetího četl povel kam má jet. Šel sem postupně a splacaval kódy které fungovaly.

Nahoru Odpovědět
19.4.2021 2:05
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
JerryM
Člen
Avatar
JerryM:19.4.2021 6:30

k těmto účelům slouží v C# projekt Roslyn což je kompilátor ... python ho má také.... a C# má k tomuto účelu vývojové prostředí např. SharpDevelop nebo VisualStudioCode a obojí je ve formě "portable" což je důležité ... Python určitě také něco takového má...

 
Nahoru Odpovědět
19.4.2021 6:30
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ladislav Tlapák
DarkCoder:19.4.2021 11:33

Vytvoření hloupého chování robota, který dělá pouze to a to, je prosté. Způsob ovládání může být obdobný jako fungují aplikace ve Windows, kde se proceduře okna předávají zprávy, které se následně dle typu zprávy zpracovávají a kde přístup k informacím je uchováván prostřednictvím parametrů.

Takový robot může být řízen následujícími zprávami:
E - zapnutí/vypnutí motorů (1 - zapnutí, 0 vypnutí)
F - vpřed (N - počet kroků)
B - vzad (N - počet kroků)
L - vlevo (N - počet kroků)
P - vpravo (N - počet kroků)
S - stop (N - počet sekund)

Pak lze generovat například následující chování
E1
R2
F2
S5
L1
F1
R2
F2
B1
R1
F2
S1
E0

Tedy robot zapne motory, otočí se po pravé ruce, posune se o 2 kroky vpřed, zastaví se na 5 sekund, otočí se doleva, popojede vpřed, otočí se po pravé ruce, popojede o 2 kroky vpřed, popojede pozpátku o 1 krok, otočí se doprava, popojede vpřed 2 kroky, zastaví se na 1 sekundu a nakonec vypne motory.

Robot opíše trasu písmene 'T'.

A jak takové prostředí vytvořit? Ideálně grafické prostředí, designově jako obrazovka ve hře hledání min, kde řádky představují následující úkon a sloupec událost která má nastat. Po pravé straně textbox do kterého uživatel zadá doplňkovou hodnotu. Na výsledek naklikání chování robota vytvoříš kompilátor na sebe navazujících událostí (robot se nemůže pohybovat vpřed když mu neběží motory, apod.), po validaci uložíš data do souboru, který může vypadat jako výše v příkladu.

Můžeš např. vytvořit časovou osu do které přeneseš události. Inspiraci si můžeš vzít třeba z aplikací na výuku hraní na piana.

Synthesia

Možností je spousty a je jen na tobě a tvé fantasii jak bude vytvoření chování robota vypadat.

Nahoru Odpovědět
19.4.2021 11:33
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ladislav Tlapák:19.4.2021 11:41

Více méně podobně jsem na to šel na jednom řádku mám 6 čísle které určují kroky pro každou osu jen asi nejsem zatím tak zdatný abych udělal nějak aby si to uživatel “naprogramoval sám”

Nahoru Odpovědět
19.4.2021 11:41
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ladislav Tlapák
DarkCoder:19.4.2021 12:31

S trochou nadsázky z mnou uvedeného příkladu a způsobu implementace popisu chování robota by mi postačil textový editor. Vizuální podoba zápisu, přirovnám-li to k programování, je blízká strojovému kódu, což není z uživatelského hlediska ideální. Na takto malém množství úkonů a nastaveních to však lze ještě mít pod kontrolou. Co už ale není pod kontrolou je to, co se v kterém okamžiku děje. To lze vyřešit aplikací s grafickým výstupem. Dále je třeba určit, zda úkony budou prováděny synchronně nebo asynchronně, tedy jestli může nastat situace, že dva úkony mohou probíhat současně nebo každý úkon po provedení předchozího. To ovlivňuje způsob návrhu prostředí aplikace. Pak už stačí vše zrealizovat :-)

Nahoru Odpovědět
19.4.2021 12:31
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ladislav Tlapák
DarkCoder:19.4.2021 12:36

Určitou podobu můžeš vidět u šachových programů, kde je vidět co se dělo v kterém tahu.

Nahoru Odpovědět
19.4.2021 12:36
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ladislav Tlapák:19.4.2021 13:49

Mno nastavené v ovládání to mám takto. Každé servo muže jet od 0 do 180 a když mu dojde požadavek tak všechny serva kterých se to týká jedou současně + nebo - 1 a je tam pak proměnná delay kterou ovládám rychlost pohybu

Nahoru Odpovědět
19.4.2021 13:49
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ladislav Tlapák
DarkCoder:19.4.2021 15:40

Je třeba odlišovat interní a externí záležitosti. Uživatele např. zajímá akorát to, že robot se bude pohybovat vpřed po dobu tolik a tolik a takovou rychlostí nebo že absolvuje tolik kroků. Pořád jsou to vztahy závislostí dráhy, času, rychlosti. To že jede vpřed, tak ho vůbec nemusí zajímat že servo pro otáčení či zpětný chod je vypnuté. To už je záležitostí interní. Opět záleží na implementaci, zda robot pracuje jako stavový automat nebo v reálném čase nebo je ovládán událostmi na sebe navazující. Vše postupně. Dostaneš-li zprávu R1, což je prosté otočení doprava o 90°, stanov rychlost otáčení interně. Budeš-li chtít víc možností, pak budeš muset buď předávat více hodnot k události, nebo přijímat více zpráv. Ať už bude možností málo nebo hodně, to hlavní je funkčnost, spolehlivost a uživatelská přívětivost.

Nahoru Odpovědět
19.4.2021 15:40
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ladislav Tlapák:19.4.2021 18:12

Zatím neřeším ani stupeň nýbrž pouze kroky motoru. Porad sem se nedostal přes to prostředí

Nahoru Odpovědět
19.4.2021 18:12
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ladislav Tlapák
DarkCoder:19.4.2021 18:53

Popsal jsem Ti zde spoustu možností, jak to vyřešit. Stačí si jen vybrat..

Nahoru Odpovědět
19.4.2021 18:53
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ladislav Tlapák:19.4.2021 19:11

Ano za to děkuji nějak poberu ty informace a dam vědět o pokroku

Nahoru Odpovědět
19.4.2021 19:11
Technika je pouze pro pomoc, nikoliv pro myšlení místo lidí
Avatar
Odpovídá na Ladislav Tlapák
Bohuslav Kolman:26.4.2021 12:49

Zkusím ti popsat pár postřehů z praxe:

  • jako programátor řeším jak se mi pohybuje ta součást, která je upnutá v griperu. Do jakého bodu se má dostat, jestli se pohne po přímce nebo oblouku, jakou rychlostí. V podstatě je mi jedno o kolik se otočí každý motor robota.
  • rychlost - tady stačí regulace typu 10% - 25% - 50% - 100%. 100% je definované konstrukcí robota a rychlostí jeho pohonů.
  • robot má nějakou základní pozici "home position" z které vychází všechny aktivity robota a kam se vrací po ukončení dané akce. Je to takový referenční bod.
  • robotické pracoviště a robot jsou navzájem orientované pomocí souřadného systému. Základní nulový bod (X=0, Y=0, Z=0) se často pokládá do středu podstavy robota. Další nulové body se k němu vztahují - např. nulový bod konce ramena robota, nulový bod griperu, nulový bod nakládacího a odebíracího místa součásti ...
  • při programování robota se často postupuje tak, že si najedu robotem do požadovaného bodu dráhy a bod si uložím (tlačítko "Převzít bod").
  • např. pro zvedání součásti je vhodné mít možnost definovat pohyb inkrementálně (např.: X +25 mm). Přitom tohle X nemusí mít stejný směr jako je v základním souřadném systému. Z toho důvodu se používá sada nulových bodů, jak jsem zmínil výše.
  • pro odladění a kontrolu dráhy robota je potřeba spouštět program po krocích a v případě problému mít možnost upravit aktuální řádek programu způsobem, že si ručně popojedu kousek stranou a přepíšu/převezmu novou hodnotu.

Další rozsáhlá kapitola je samotná stavba programu a komunikace s okolními zařízeními.

Ještě bych ti doporučil se přihlásit na kurz základy ovládání robota, které pořádá třeba ABB. Dozvíš se tam principy jak robot funguje, jak se ovládá a jak se na programování robota dívá uživatel/progra­mátor.

Editováno 26.4.2021 12:50
 
Nahoru Odpovědět
26.4.2021 12:49
Avatar
Bohuslav Kolman:2.5.2021 10:06

Pro inspiraci https://augmentus.tech/

 
Nahoru Odpovědět
2.5.2021 10:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.