Spisu treści:

Robot do rysowania dotykowego: 5 kroków (ze zdjęciami)
Robot do rysowania dotykowego: 5 kroków (ze zdjęciami)

Wideo: Robot do rysowania dotykowego: 5 kroków (ze zdjęciami)

Wideo: Robot do rysowania dotykowego: 5 kroków (ze zdjęciami)
Wideo: Ludzie, którzy zamienili się w zwierzęta 😲🤔 2024, Listopad
Anonim

W ramach moich studiów magisterskich na dep. Wzornictwo przemysłowe na Uniwersytecie w Eindhoven stworzyłem urządzenie do rysowania dotykowego, które może służyć do poruszania się półautonomicznym samochodem w ruchu ulicznym. Interfejs nazywa się scribble i pozwala użytkownikowi doświadczyć uchwytów dotykowych w przestrzeni 2D za pomocą zmiennej siły i lokalizacji. Chociaż koncepcja nie jest tym, o czym jest ta instrukcja, możesz przeczytać więcej o Scribble tutaj:

Scribble wykorzystuje konfigurację łącznika 5 bar, która pozwala mu poruszać się o dwa boczne stopnie swobody (DoF). Ta konfiguracja jest dość popularna wśród prototypistów do tworzenia robotów rysujących, oto kilka przykładów:

www.projehocam.com/arduino-saati-yazan-kol-…

blogs.sap.com/2015/09/17/zegar-działania-pogoda…

www.heise.de/make/meldung/Sanduhr-2-0-als-Bausatz-im-heise-shop-erhaeltlich-3744205.html

Mechanicznie roboty te są łatwe do wykonania. Potrzebują tylko podstawowych połączeń i mają dwa siłowniki, które mogą wytwarzać dość płynne ruchy. Ta struktura jest idealna dla projektantów, którzy są zainteresowani tworzeniem ruchomych struktur. Chociaż nie jestem inżynierem mechanikiem, uważam, że kinematyka jest dość trudna do przełożenia na kod. Dlatego dostarczę podstawowy kod Arduino, który określa kinematykę przednią i odwrotną, dzięki czemu możesz łatwo użyć tego w przyszłych projektach!;-)

Proszę pobrać poniższy kod!

* EDIT: dla podobnego projektu zajrzyj na https://haply.co *

Krok 1: Budowanie struktury

Budowanie struktury
Budowanie struktury

W zależności od celu, jaki masz na myśli, powinieneś najpierw zaprojektować strukturę z 5 łącznikami. Zastanów się nad wymiarami, siłownikami, których chcesz użyć i jak zamocować złącza, aby uzyskać płynne ruchy.

W przypadku mojego prototypu uruchamiam swój kod na Arduino DUE, który jest kontrolowany przez port szeregowy przez program na moim Macu, który został stworzony w Open Frameworks. Program wykorzystuje połączenie UDP do komunikacji z symulatorem jazdy opartym na Unity 3D.

Prototyp Scribble wykorzystuje łożyska 5 mm i jest wykonany z 5 mm akrylu wycinanego laserowo. Siłownikami są silniki dotykowe Franka van Valeknhoefa, które umożliwiają uruchamianie, odczytywanie położenia i wysyłanie zmiennej siły. To czyniło je idealnymi dla pożądanych właściwości dotykowych Scribble. Więcej o jego siłownikach można znaleźć tutaj:

Krok 2: Poznaj swoje wartości sprzętowe

Poznaj swoje wartości sprzętowe
Poznaj swoje wartości sprzętowe

Kinematyka do przodu oparta jest na stacji pogodowej Plot clock firmy SAP:

Jak pokazano w ich konfiguracji, jest przedłużone, aby ramię trzymało marker do rysowania. Zostało to usunięte, ponieważ nie służyło prototypowi bazgrołów. Sprawdź ich kod, jeśli chcesz ponownie dodać ten komponent. Nazwy na zdjęciu są takie same w mojej konfiguracji.

W zależności od sprzętu algorytm musi znać właściwości sprzętu:

int lewySiłownik, prawySiłownik; //kąt zapisu do siłownika w stopniach, zmień na pływaki, jeśli chcesz uzyskać większą dokładność

int poz X, poz Y; //współrzędne położenia wskaźnika

Ustaw rozdzielczość swoich wartości wejściowych

int posStepsX = 2000;

int posStepsY = 1000;

Wymiary twojej konfiguracji, wartości w mm (patrz zdjęcie SAP)

#define L1 73 // długość ramienia silnika, patrz rysunek SAP (lewy i prawy są takie same)

#define L2 95 // ramię przedłużające długość, patrz obraz SAP (lewy i prawy są takie same)

#define rangeX 250 // maksymalny zasięg w kierunku X dla punktu do przemieszczenia (od lewej do prawej, 0 - maxVal)

#define rangeY 165 // maksymalny zasięg w kierunku Y dla punktu do przemieszczenia (od 0 do maksymalnego zasięgu podczas pozostawania w środku)

#define originL 90 //odległość przesunięcia od największej minimalnej wartości X do pozycji środkowej siłownika

#define originR 145 //odległość przesunięcia od największej minimalnej wartości X do pozycji środkowej siłownika, w tym przypadku odległość między dwoma silnikami

Krok 3: Kinematyka do przodu

Kinematyka do przodu
Kinematyka do przodu

Jak wspomniano w poprzednim kroku, kinematyka do przodu oparta jest na algorytmie SAP.

Pustka aktualizuje zdefiniowane wcześniej pożądane wartości kąta lewego i prawego siłownika. Na podstawie podłączonych wartości X i Y obliczy kąty proste, aby uzyskać wskaźnik do tej pozycji.

void set_XY(double Tx, double Ty) //podaj swoją wartość X i Y{ // niektóre wartości, których potrzebujemy, ale nie chcemy oszczędzać na długo double dx, dy, c, a1, a2, Hx, Hy; //mapowanie rozdzielczości wejściowej do zakresu konfiguracji w świecie rzeczywistym int realX = map(Tx, 0, posStepsX, 0, rangeX); //swap if mapping if inverse int realY = map(Ty, posStepsX, 0, 0, rangeY); //swap if mapping if inverse // oblicz kąt dla lewego siłownika // kartezjański dx/dy dx = realX - originL; //uwzględnij przesunięcie dy = realY; // biegunowa długość (c) i kąt (a1) c = sqrt(dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = kąt_powrotu(L1, L2, c); leftActuator = piętro(((M_PI - (a2 + a1)) * 4068) / 71); //kąt końcowy i przelicz z rad na deg // oblicz kąt dla prawego siłownika dx = realX - originR; //uwzględnij przesunięcie dy = realY; c = sqrt(dx * dx + dy * dy); a1 = atan2(dy, dx); a2 = kąt_powrotu(L1, L2, c); rightActuator = floor(((a1 - a2) * 4068) / 71); //końcowy kąt i przelicz z rad na deg }

Dodatkowa pustka do obliczenia kąta:

double return_angle(double a, double b, double c) { // reguła cosinusa dla kąta między c a return acos((a * a + c * c - b * b) / (2 * a * c)); }

Krok 4: Kinematyka odwrotna

Kinematyka odwrotna
Kinematyka odwrotna

Kinematyka odwrotna działa na odwrót. Podłączasz obrót siłowników w stopniach, a pustka zaktualizuje wcześniej zdefiniowaną pozycję.

Należy pamiętać, że potrzebne będą siłowniki lub osobny czujnik, który odczyta kąt ramienia. W moim przypadku zastosowałem siłowniki, które potrafią jednocześnie odczytywać i zapisywać swoją pozycję. Możesz poeksperymentować z tym i rozważyć dodanie jakiejś kalibracji, aby mieć pewność, że twój kąt jest poprawnie odczytany.

Zalecana: