Jednostka 2 / 9

Sztuczna inteligencja w robotyce i sterowaniu ruchem

Zyski:

  • Umiejętność konfigurowania i rozwiązywania problemów z kinematyką do przodu/odwrotną oraz planowaniem trajektorii za pomocą sztucznej inteligencji
  • Możliwość tworzenia bezpiecznej orbity poprzez podanie ograniczeń połączeń robota, ograniczeń prędkości i przyspieszenia jako kontekstu podpowiedzi
  • Możliwość numerycznej i fizycznej weryfikacji kinematyki i trajektorii generowanej przez sztuczną inteligencję

Przeniesienie chwytaka na końcu ramienia robota do określonego punktu w przestrzeni, w określonej orientacji; Brzmi prosto, ale kryją się za tym równania kinematyczne, wspólne granice, osobliwości i planowanie trajektorii. Tutaj inżynier mechatronik wykorzystuje razem trygonometrię, algebrę liniową i teorię sterowania. Sztuczna inteligencja jest potężną pomocą w tym procesie: może ustanawiać równania kinematyki w przód, sugerować podejścia do rozwiązań dla kinematyki odwrotnej, parametryzować trajektorię zgodnie z ograniczeniami prędkości/przyspieszenia. Robotyka jest jednak jedną z dziedzin mechatroniki o najwyższym ryzyku fizycznym; Jeśli sekwencja kątów wygenerowana przez sztuczną inteligencję zostanie wysłana do robota bez weryfikacji, ramię może uderzyć w siebie, otoczenie lub operatora. W tej części zobaczymy, jak skonfigurować i zweryfikować kinematykę oraz planowanie trajektorii za pomocą sztucznej inteligencji.

Kinematyka do przodu i odwrotna

Kinematyka do przodu (FK): Wyznaczanie położenia i orientacji efektora końcowego, jeśli znane są kąty przegubów. Rozwiązanie jest tylko jedno – bezpośrednie.

Kinematyka odwrotna (IK): Jeśli znane jest pożądane położenie funkcji końcowej, znalezienie kątów przegubowych, które to zapewnią. Zwykle ma więcej niż jedno rozwiązanie (jak łokieć w górę/w dół), czasami nie ma rozwiązań (punkt nieosiągalny), czasami ma rozwiązania nieskończone (osobliwość).

koncepcja

wejście

wyjście

Liczba rozwiązań

Kinematyka do przodu

kąty stawów

Skrajna pozycja/orientacja

singiel

Kinematyka odwrotna

Skrajna pozycja/orientacja

kąty stawów

Wiele/żaden/nieskończony

W przypadku dwuprzegubowego ramienia płaskiego kinematykę odwrotną można ustawić w AI i zweryfikować ręcznie w następujący sposób:

import numpy as npdef inverse_kinematik_2r(x, y, L1, L2): """IK dla ramienia płaskiego z 2 przegubami. Zwraca kąty w radianach (rozwiązanie z kolanem w dół).""" r2 = x**2 + y**2 # Kontrola dostępności: czy punkt jest w obszarze roboczym? jeśli np.sqrt(r2) > (L1 + L2) lub np.sqrt(r2) < abs(L1 - L2): raise ValueError("Punkt znajduje się poza dostępną przestrzenią roboczą") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t2 = np.clip(cos_t2, -1.0, 1.0) # bezpieczeństwo numeryczne t2 = np.arccos(cos_t2) # kolanko w dół t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np. Degrees(t1), np. Degrees(t2)# Walidacja: L1=L2=1, cel (1,1) -> oczekiwany t2=90 stopniprint(inverse_kinematik_2r(1,0, 1,0, 1,0, 1,0)) # ~ (0,0, 90,0)

Linie krytyczne są tutaj często pomijane przez sztuczną inteligencję: kontrola osiągalności (jest to punkt w obszarze roboczym) i „np.clip” (zapobiega przekroczeniu wartości wejściowych arccos poza ±1 z powodu błędu zaokrąglenia). Bez tych dwóch zabezpieczeń kod wygeneruje NaN lub ulegnie awarii w nieprawidłowym miejscu.

Wskazówka: prosząc o rozdzielczość IK, wyraźnie powiedz AI, aby „dodała kontrolę dostępności i ograniczyła wejście arccos do klipu”. Te dwie linie zapobiegają cichym błędom, które powodują najwięcej problemów w terenie.

Wspólne granice, osobliwość i wielokrotne rozwiązania

Każdy przegub prawdziwego robota ma zakres kąta (np. -170° do +170°), ograniczenie prędkości i ograniczenie przyspieszenia. Nawet jeśli IK podaje matematycznie ważny kąt, nie można go zastosować, jeśli kąt ten wykracza poza fizyczny zakres złącza. Dodatkowo w niektórych konfiguracjach robot popada w osobliwość: dwie osie są wyrównane, traci się jeden stopień swobody, a prędkości stawów próbują osiągnąć nieskończoność przy niewielkim ruchu końcówki.

Dlatego samo rozwiązanie HR nie wystarczy; Każde rozwiązanie musi przejść filtr akceptowalności:

def Solution_gecerli_mi(acilar_deg, limity_deg): """bóle: [t1,t2,...], limity: [(min,max),...]""" dla bólu, (amin, amax) w zip(acilar_deg, limity_deg): jeśli nie (amina <= ból <= amax): return False, f"Przekroczono limit stawu: {pain:.1f} deg ({amine},{amax}) z wyjątkiem" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limity)) # (Prawda, 'OK')print(cozum_valid_mi([0.0, 150.0], limity)) # (False, 'Joint limit przekroczony...”)

AI może dać „matematyczne” rozwiązanie IK; ale wspólne granice i unikanie osobliwości są specyficzne dla twojego systemu i muszą być podane jako kontekst podpowiedzi.

Planowanie orbity

Przeprowadzenie robota z punktu A do punktu B nie polega na narysowaniu linii prostej pomiędzy dwoma kątami. Nagła zmiana prędkości powoduje wstrząsy mechaniczne i wibracje. Zamiast tego stosuje się profile miękkie: trapezoidalny profil prędkości (stałe przyspieszenie – stała prędkość – stałe hamowanie) lub krzywą S (gładszy, gdzie przyspieszenie jest również ograniczone). Kiedy sztuczna inteligencja generuje trajektorię, musisz podać cel, czas trwania i ograniczenia.

import numpy as npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Profil prędkości trapezowej dla pojedynczego przegubu. Zwracana jest tablica pozycji.""" odległość = abs(q1 - q0) kierunek = np.sign(q1 - q0) t_speed = v_max / a_max Distance_speed = 0.5 * a_max * t_speed**2 if 2 * odległość_prędkości > odległość: # profil trójkątny (v_max nieosiągalny) t_speed = np.sqrt(odległość / a_max) t_constant = 0,0 v_peak = a_max * t_speed else: t_constant = (odległość - 2 * odległość_prędkość) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... obliczenie pozycji dla każdego t (w oparciu o fazy przyspieszania/stałej/hamowania) return t, T, v_peak, czas trwania, vz = trapezoidal_trajectory(0.0, 90.0, v_max=60.0, a_max=120.0)print(f"Całkowity czas trwania: {duration:.3f} s, maksymalna prędkość: {vz:.1f} stopień/s")

Kontrola logiczna jest następująca: jeśli odległość jest mała, silnik nigdy nie osiągnie v_max, a profil zmieni się z trapezowego na trójkątny. Jeśli sztuczna inteligencja nie spełni tego warunku, dla krótkich ruchów zostanie obliczony nieprawidłowy czas trwania. Możesz to sprawdzić, testując kod ze znaną wartością (na przykład bardzo małą odległością).

Słaba podpowiedź/silna podpowiedź

SŁABY: „Napisz trajektorię, która prowadzi ramię robota z punktu A do B”. (Brak ograniczeń: ograniczenie prędkości? przyspieszenie? rozstaw stawów? Ślepy wynik.) SILNY: „Wygeneruj trajektorię od punktu do punktu w przestrzeni przegubów dla robota 6-osiowego. Ograniczenie prędkości dla każdego przegubu wynosi 90 stopni/s, ograniczenie przyspieszenia to 180 stopni/s^2, zakres kątów podano w tabeli. Użyj trapezoidalnego profilu prędkości, jeśli odległość jest mała, wpada w profil trójkątny. Wynik każdego połączenia to Napisz także funkcję weryfikującą, która sprawdza, czy nie przekracza ona limitów połączenia: {{table}}.

Weryfikacja: Od symulacji do robota

Trajektoria wygenerowana przez sztuczną inteligencję jest weryfikowana w następującej kolejności przed trafieniem do robota:

  1. Liczbowe: Czy kąt połączenia, prędkość i przyspieszenie każdego kroku mieszczą się w granicach?
  2. Kolizja: Czy ramię koliduje na swojej trajektorii ze sobą lub z otoczeniem (wizualizacja/symulacja, jeśli to możliwe)?
  3. Osobliwość: Czy orbita przechodzi przez obszar osobliwości (czy wyznacznik Jakobianu zbliża się do zera)?
  4. Powolny test sprzętu: Uruchom robota z niską prędkością (np. 10%) i monitoruj go wizualnie.
  5. Stopniowy wzrost prędkości: Po sprawdzeniu wszystkiego prędkość wzrasta krok po kroku do wartości nominalnej.
Przestroga: Uruchamiając robota po nowej trajektorii po raz pierwszy, sterowanie prędkością powinno być zawsze niskie, a wyłącznik awaryjny powinien być dostępny. Nawet jeśli sygnał wyjściowy AI jest „poprawny matematycznie”, przesunięcie, odwrócenie osi lub zaczepienie kabla w konfiguracji fizycznej zostaną wykryte dopiero podczas powolnych testów.

Mini etui

Inżynier automatyk Ece prosi sztuczną inteligencję o kod trajektorii we wspólnej przestrzeni na potrzeby aplikacji typu „podnieś i umieść”. Sztuczna inteligencja tworzy profil trapezowy, ale kiedy Ece testuje ruch na krótki dystans, widzi, że czas jest ujemny: kod nie poradził sobie z przypadkiem profilu trójkątnego, w którym nie można osiągnąć v_max. Ece koryguje to, informując, że „jeśli odległość jest niewielka, wpadnij w trójkątny profil”. Następnie porównuje kąty połączeń podane przez sztuczną inteligencję z własną tabelą graniczną i stwierdza, że ​​połączenie 5 chciało w jednym punkcie +125°, podczas gdy limit wynosił +120°. Ponownie planuje trajektorię i monitoruje ją, tym razem uruchamiając robota z prędkością 10%. W pierwszej rundzie widzi, że chwytak zbytnio zbliża się do stołu i koryguje przesunięcie Z. Sztuczna inteligencja zwróciła roboczy zarys w ciągu kilku minut; ale trzy oddzielne walidacje (profil trójkątny, granica połączenia, powolny test) pozwoliły wykryć trzy odrębne rzeczywiste problemy.

Typowe błędy

  • Korzystanie z rozwiązania IK bez wspólnych ograniczeń i kontroli dostępności.
  • Nie przycina wpisów arccos/arcsin, ale tworzy NaN w przypadku błędu zaokrąglenia.
  • Żądanie orbity bez ograniczania prędkości/przyspieszenia i powodowania wstrząsu mechanicznego.
  • Ignorowanie stref osobliwości i pozwalanie na gwałtowny wzrost prędkości połączeń.
  • Pominięcie przejścia profilu trapezowo-trójkątnego na krótkim odcinku i obliczenie błędnego czasu.
  • Przeprowadzenie pierwszego testu orbitalnego przy pełnej prędkości i bez dostępu do E-stopu.

Podsumowując

  • Kinematyka jazdy do przodu ma jedno rozwiązanie; kinematyka odwrotna może dawać wiele, nieistniejących lub nieskończonych rozwiązań.
  • Rozwiązania IK są z konieczności filtrowane pod kątem wspólnych ograniczeń, dostępności i osobliwości.
  • Planowanie trajektorii; Wykorzystuje miękkie, kompatybilne z ograniczeniami profile, takie jak trapezowe lub krzywe S.
  • W niewielkiej odległości profil zmienia się z trapezowego na trójkątny; należy to obsłużyć w kodzie.
  • AI przyspiesza matematykę; W wierszu zachęty powinny pojawić się ograniczenia i kontekst instalacji fizycznej.
  • Nowa trajektoria jest zawsze uruchamiana po raz pierwszy z niskim przełożeniem prędkości i dostępnym wyłącznikiem awaryjnym.

Zadanie aplikacji

Wybierz model ramienia z dwoma lub trzema przegubami (z rzeczywistymi lub urojonymi długościami połączeń i ograniczeniami przegubów). Niech sztuczna inteligencja wygeneruje funkcję kinematyki odwrotnej i planistę trajektorii w tym kontekście. Następnie: (1) ręcznie zweryfikuj wyjście IK ze znanym celem (czy cofasz kąty i wracasz do tego samego punktu co FK), (2) sprawdzasz, czy kod je wychwytuje podając przynajmniej jeden niedostępny punkt i jedną wspólną granicę przekraczającą cel, (3) sprawdź, czy na małej odległości czas orbity okazuje się rozsądny. Zapisz, ile problemów z walidacją znalazłeś w pierwszej wersji kodu i która warstwa wychwyciła każdy z nich.