Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'V-REP'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 1 wynik

  1. Hexapod w V-REP. Import i konfiguracja modelu. W niniejszym artykule opisany został proces importu i konfiguracji własnego modelu robota kroczącego do programu symulacyjnego V-REP. Virtual Robot Evaluation Platform (V-REP) jest środowiskiem programistycznym służącym do symulacji robotów. Jeśli dysponujesz modelami swojego robota, dobrałeś napędy i czujniki, ale masz wątpliwości czy wszystko zadziała jak należy to V-REP może znacznie ułatwić Ci pracę. Ten wpis brał udział konkursie na najlepszy artykuł o elektronice lub programowaniu. Sprawdź wyniki oraz listę wszystkich prac » Partnerem tej edycji konkursu (marzec 2020) był popularny producent obwodów drukowanych, firma PCBWay. Ze względu na mnogość rozwiązań i przykładów z zakresu robotów stacjonarnych, chciałbym skupić się na opisie przygotowania modelu robota kroczącego do symulacji. V-REP dostarcza środowisko edytorskie, w którym użytkownik może tworzyć własne modele robotów. Niestety dostarczany interfejs jest bardzo nieefektywny. Prostszym i mniej czasochłonnym rozwiązaniem jest import gotowego modelu z innego programu edytorskiego. Możemy dodawać obiekty zapisane w plikach *.dxf, *.obj, *.stl oraz *.3ds. Interfejs graficzny programu V-REP Import modelu z innego edytora 3D Modele, które posłużyły w tym przykładzie utworzono w programie AutodeskInventor 2020. Program ten umożliwia łatwy eksport części czy całego złożenia do dowolnego formatu obsługiwanego przez V-REP za wyjątkiem formatu *.3ds. W celu importu modelu (najlepiej importować złożenie) korzystamy z paska menu -> File -> Import -> Mesh… Model robota w programie Inventor (po lewej) oraz V-REP (po prawej) Po imporcie złożenia do symulatora łatwo zauważyć, że model stanowi jedną bryłę zamiast oddzielnych elementów robota. Należy taką bryłę odpowiednio pogrupować (klikamy pasek menu -> Edit -> Grouping/Merging -> Divide selected shapes), pamiętając o wcześniejszym zaznaczeniu naszego modelu. W wyniku takiej operacji pojawia się znacznie więcej elementów niż jest to pożądane. Dlatego też należy połączyć z powrotem części, które mają stanowić zespoły nieprzemieszczające się względem siebie (Edit -> Grouping/Merging -> Merge selected shapes). Przed przystąpieniem do grupowania, warto usunąć części, które powtarzają się wielokrotnie, w tym przypadku są to nogi robota. Do konfiguracji działania modelu w symulatorze wystarczy nam tylko jedna lub dwie nogi (w moim przypadku zostawiłem dwie nogi ponieważ miałem wykonane dwa typy nóg, jeśli się przyjrzycie, dostrzeżecie różnicę 😉 ). Model podzielony na poszczególne elementy oraz usunięty nadmiar części Tak przygotowany model gotowy jest do powielenia. Kopiujemy model do nowej sceny w celu uproszczenia go i nadania jego elementom właściwości obiektów dynamicznych. W celu uproszczenia części w tym przykładzie wykorzystano konwersję zaimportowanego modelu do postaci prostych kształtów (Edit -> Morph selection into convex shapes). Kształty takie (bryły) reprezentowane są przez trójkąty opisujące ich powierzchnię (MES). Liczba elementów skończonych rzutuje na złożoność obliczeń, dlatego należy starać się uzyskać jak najmniejszą ich liczbę przy zachowaniu zarysu kształtów oryginalnych części. Warstwa modeli dynamicznych konstrukcji jest niewidoczna podczas symulacji. Model dynamiczny części (po prawej) – przełączanie pomiędzy warstwami Przeguby Aby umożliwić ruch odpowiednim częściom robota, wprowadzamy do układu przeguby. W tym celu należy wybieramy z paska menu -> Add -> Joint -> Revolute. Następnie, po zaznaczeniu przegubu, korzystając z narzędzi Position oraz Orientation ustawiamy przegub w pożądanym miejscu (rysunek powyżej, na modelu po lewej widoczne są pomarańczowe przeguby). Operację tą wykonujemy dla kolejnych przegubów nogi. Dzięki usunięciu „nadmiarowych” nóg oszczędzamy mnóstwo czasu w tym momencie – tworzymy jedynie 3 lub 6 przegubów zamiast wszystkich 18. Elementy te symulują działanie napędów robota, dlatego istotne jest ustawienie odpowiedniego momentu obrotowego. Można to uzyskać korzystając z obliczeń lub doświadczalnie – wszystko zależy od przeznaczenia naszego modelu symulacyjnego. Każdemu z przegubów można zaimplementować regulator: Parametr proporcjonalny dostarcza część sygnału sterującego proporcjonalną do błędu pozycji. Im większy jest błąd, tym większy jest sygnał sterujący, wymuszający korekcję położenia. Człon całkujący rośnie z czasem i jest proporcjonalny do sumy błędów. Człon ten minimalizuje (tłumi) błąd jaki powstaje w wyniku stałego obciążenia i powoduje dojście do pozycji zadanej. Ostatni parametr – różniczkujący jest tym większy im większa jest różnica błędu w kolejnych próbkach. Jest więc odpowiedzialny za tłumienie zmian błędu (tłumi oscylacje). Parametry dynamiczne przegubu - napędu Łańcuch kinematyczny Po odpowiednim pogrupowaniu części, stworzeniu ich reprezentacji dynamicznej oraz dodaniu przegubów, musimy utworzyć łańcuch kinematyczny. Dodajemy dwa obiekty typu Dummy – jeden nazwany foot_Tip, drugi foot_Target. Tip jest swego rodzaju TCP (ang. Tool Central Point) nogi podczas Target będzie odpowiadać za docelowe położenia TCP podczas ruchu robota. Stworzono zatem połączenie pomiędzy tymi dwoma obiektami oraz zbudowano drzewo dziedziczenia pomiędzy obiektami reprezentującymi elementy robota. Model ze zdefiniowanym TCP oraz punktem docelowym Następnie dodano nową grupę kinematyczną w celu powiązania punktów ze sobą. Korzystając z okna parametrów kinematyki, dodano element TIP jako końcówkę łańcucha. Od tego momentu w chwili przesunięcia elementu TARGET, element TIP będzie za nim podążać. Na tym etapie konfiguracji modelu można sprawdzić jej poprawność, wyłączając dynamikę w oknie właściwości modułu obliczeniowego. Następnie należy włączyć symulację oraz wybrać i przesunąć obiekt TARGET. Jeśli wszystkie kroki zostały wykonane poprawnie, noga powinna podążać za celem. Definiowanie łańcucha kinematycznego Po wykonaniu powyższych instrukcji powielono przygotowany model nogi. Skopiowane nogi umieszczono w odpowiednich miejscach. Tak przygotowany model jest gotowy do wprawienia w ruch za pomocą skryptów napisanych w języku LUA. Model gotowy do implementacji kodu sterującego Skrypty W systemie V-REP każdy skrypt jest identyfikowany z obiektem np. robotem. Wyjątkiem jest skrypt odpowiadający za symulację otoczenia. Takie zastosowanie umożliwia użytkownikowi pełną elastyczność w tworzeniu modeli, korzystania z odczytów sensorów, sterowania przegubami. W efekcie daje to możliwość budowania systemów sterowania i testowania różnych algorytmów sterowania. Przebieg sterowania pomiędzy skryptami w V-REP Skrypt główny (MainScript) uruchamia kolejne skrypty potomne utożsamione z naszymi modelami (ChildScript), które są wykonywane w trybie wątkowym lub bezwątkowym. W trybie wątkowym skrypty te pracują przez cały czas w tle, natomiast bezwątkowe są wywoływane w każdym kroku symulacji, podejmują pewne akcje i kończą swoje działanie. Najszybszym sposobem, na sprawdzenie poprawności wykonania modelu w V-REP jest wykorzystanie skryptów z przykładów dostępnych w programie, np. „hexapod” . Należy jednak zaznaczyć, że skrypty te będą działały jedynie dla hexapodów posiadające trzy stopnie swobody na każdą nogę (skrypty dodałem również w załączniku). Dostępne skrypty obsługują ruch nóg robota względem środka ciężkości oraz ruch modelu w przestrzeni symulatora. Napisane są w języku Lua, który jest opisany między innymi na stronie producenta programu V-REP. Obydwa skrypty wykorzystywane w symulatorze przypisane są do konkretnego elementu (części) robota. W przypadku sterowania nogami jest on przypisany do wizualnej części odpowiadającej za korpus robota. Takie rozwiązanie pozwala na zapewnienie sterowania nogami bez konieczności tworzenia oddzielnych skryptów na każdą nogę z osobna. Należy zaznaczyć również, że sterowanie nogami robota polega na wyznaczeniu kolejnych położeń celu, do którego dana noga ma podążać (hexa_footTarget..i). Konfiguracja modelu w edytorze graficznym pozwala na rozwiązanie odwrotnego zadania kinematyki przez symulator. Układem odniesienia dla trajektorii opisanych w skrypcie jest układ współrzędnych części, do którego ten skrypt jest przypisany. Podczas inicjacji programu/symulacji skrypt odwołuje się do obiektów footTarget, a następnie tworzy listy celów oraz końcówek nóg robota. robotBase=sim.getObjectHandle('hexa_legBase') legTips[i]=sim.getObjectHandle('hexa_footTip'..i-1) legTargets[i]=sim.getObjectHandle('hexa_footTarget'..i-1) Na inicjację składa się również wyzerowanie pozycji bazowej oraz pobranie współrzędnych końcówek nóg. W celu zapewnienia odpowiedniej kolejności przenoszenia nóg podczas danego typu chodu zadeklarowano tablicę indeksów kolejnych nóg robota. Indeks ten jest wykorzystywany w funkcji określającej przesunięcie nóg względem początku układu odniesienia. W funkcji inicjacyjnej ustawiane są też domyślne wartości parametrów chodu takie jak prędkość kroku, wysokość kroku, kierunek ruchu itp.. legMovementIndex={1,4,2,6,3,5} stepProgression=0 stepVelocity=0.5 stepAmplitude=0.16 stepHeight=0.04 movementStrength=1 realMovementStrength=0 movementDirection=0*math.pi/180 rotation=0 Funkcja sysCall_init wykonywana jest tylko raz (podczas pierwszego wywołania skryptu) i odpowiada za przygotowanie symulacji. W tym przypadku wykorzystana jest do nadania parametrów bazowych modelom. Funkcja functionsysCall_actuation() jest wykonywana w każdym momencie działania symulacji podczas fazy sterowania, z częstotliwością ustawioną w programie. Kod zawarty w tej funkcji odpowiada za obsługę wszystkich funkcji sterujących, które zapewnia symulator (kinematyka odwrotna, dynamika itp.). Tutaj znajdują się odwołania do wartości parametrów chodu w czasie rzeczywistym. Zawarta w funkcji functionsysCall_actuation() pętla for odpowiada za ustawienie działania nóg robota w zależności od jej indeksu. Nadając odpowiednie indeksy nogom, zrealizowano ruch trójpodporowy. Ponadto w pętli tej zawarte są obliczenia wyznaczające położenie kolejnych końcówek nóg robota w każdym momencie jego ruchu. Trajektorie wyznaczane są na płaszczyźnie i realizowane są poprzez skręcenie kolejnych przegubów nogi. Zmienna md (ang. movement direction) zawiera informację o aktualnym kierunku ruchu robota, a za pomocą tablicy p przekazywana jest informacja o położeniu punktu docelowego w kolejnych chwilach symulacji. for leg=1,6,1 do sp=(stepProgression+(legMovementIndex[leg]-1)/6) % 1 offset={0,0,0} if (sp<(1/3)) then offset[1]=sp*3*stepAmplitude/2 else if (sp<(1/3+1/6)) then s=sp-1/3 offset[1]=stepAmplitude/2-stepAmplitude*s*6/2 offset[3]=s*6*stepHeight else if (sp<(2/3)) then s=sp-1/3-1/6 offset[1]=-stepAmplitude*s*6/2 offset[3]=(1-s*6)*stepHeight else s=sp-2/3 offset[1]=-stepAmplitude*(1-s*3)/2 end end end md=movementDirection+math.abs(rotation)*math.atan2(initialPos[leg][1]*rotation,-initialPos[leg][2]*rotation) offset2={offset[1]*math.cos(md)*realMovementStrength,offset[1]*math.sin(md)*realMovementStrength,offset[3]*realMovementStrength} p={initialPos[leg][1]+offset2[1],initialPos[leg][2]+offset2[2],initialPos[leg][3]+offset2[3]} sim.setObjectPosition(legTargets[leg],antBase,p) end Skrypt sterujący całym robotem zawiera funkcję odpowiadającą za przekazywanie wartości parametrów takich jak: prędkość chodu, wysokość kroku czy kierunek ruchu. Dodatkowo wykorzystano funkcję moveBody, w której zdefiniowano sekwencje ruchów. W funkcji głównej wywoływana jest ona z odpowiednim indeksem aby uruchomić sekwencję o tym samym indeksie. Do wywoływania danych funkcji służy funkcja sysCall_threadmain(). Część kodu w niej zawarta wykonywana jest w momencie rozpoczęcia danego wątku, aż do jego zakończenia. Wątek może rozpocząć się wraz ze startem symulacji, ale także w trakcie jej działania. Tutaj też pobierane są informacje z interfejsu graficznego o położeniu elementów bazowych układu, określana jest pozycja startowa robota oraz nadane zostają wartości zmiennych. Podsumowanie Powyższy tekst stanowi ogólny opis czynności, które należy wykonać w celu wykonania prostej symulacji w programie V-REP. Na proces ten składa się: Import modelu z edytora 3D oraz przygotowanie poszczególnych członów robota Wykonanie modelu dynamicznego robota wraz z dodaniem przegubów Zdefiniowanie łańcucha kinematyki Implementacja skryptów w celu weryfikacji modelu Tekst ten powstał ze względu na małą popularność opisywanego symulatora oraz jeszcze mniejszą dostępność kompletnych opracowań dotyczących robotów kroczących. Pisząc ten tekst miałem nadzieję na w miarę przystępne nakreślenie procesu modelowania robota w symulatorze, jednak w przypadku chęci praktycznego wykorzystania tych informacji należałoby się zaznajomić z podstawami obsługi V-REP. Dlatego też bardzo docenię każdą sugestię co przydałoby się opisać dokładniej lub gdzie przydałoby się zaprezentować różne podejścia (np. dobór nastaw regulatorów). Dla inspiracji dodam, że na podstawie testów w V-REP udało mi się opracować konstrukcję hexapoda (mam nadzieję że jest choć trochę podobny do tego z artykułu): skrypty.rar
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.