Pelnas:
- Gebėjimas AI pagalba nustatyti ir spręsti tiesioginės/atvirkštinės kinematikos ir trajektorijų planavimo problemas
- Galimybė sukurti saugią orbitą nurodant roboto jungties ribas, greičio ir pagreičio apribojimus kaip kontekstą raginimui
- Gebėjimas skaitmeniniu ir fiziniu būdu patikrinti AI sukurtą kinematinę ir trajektorinę išvestį
Griebtuvo atvedimas roboto rankos gale į tam tikrą erdvės tašką, tam tikra orientacija; Tai skamba paprastai, tačiau už jo yra kinematinės lygtys, jungtinės ribos, singuliarumai ir trajektorijos planavimas. Čia mechatronikos inžinierius kartu naudoja trigonometriją, tiesinę algebrą ir valdymo teoriją. Dirbtinis intelektas yra galinga pagalba šiame procese: jis gali nustatyti tiesiogines kinematikos lygtis, pasiūlyti atvirkštinės kinematikos sprendimo būdus, parametruoti trajektoriją pagal greičio / pagreičio apribojimus. Tačiau robotika yra viena iš didžiausią fizinę riziką keliančių mechatronikos sričių; Jei AI sugeneruota kampo seka siunčiama robotui be patikrinimo, ranka gali atsitrenkti į save, aplinką ar operatorių. Šiame skyriuje pamatysime, kaip nustatyti ir patikrinti kinematiką ir trajektorijų planavimą naudojant AI.
Pirmyn ir atvirkštinė kinematika
Priekinė kinematika (FK): galinio efektoriaus padėties ir orientacijos nustatymas, jei žinomi jungties kampai. Yra tik vienas sprendimas – tiesioginis.
Atvirkštinė kinematika (IK): jei žinoma norima galinės funkcijos padėtis, suraskite jungties kampus, kurie tai užtikrins. Paprastai jis turi daugiau nei vieną sprendinį (pvz., alkūnė aukštyn/žemyn), kartais neturi sprendimų (nepasiekiamas taškas), kartais turi begalinius sprendimus (singuliarumas).
koncepcija
įvestis
išvestis
Sprendimų skaičius
Pirmyn kinematika
sąnarių kampai
Ekstremali padėtis/orientacija
vienišas
Atvirkštinė kinematika
Ekstremali padėtis/orientacija
sąnarių kampai
Keli/nėra/begalinė
Dviejų jungčių plokščiosios rankos atvirkštinę kinematiką galima nustatyti AI ir patikrinti rankiniu būdu taip:
importuoti numpy kaip npdef inverse_kinematik_2r(x, y, L1, L2): """IK 2 sąnarių plokštumai. Grąžina kampus radianais (sprendimas alkūne žemyn).""" r2 = x**2 + y**2 # Prieinamumo patikrinimas: ar taškas yra darbo srityje? jei np.sqrt(r2) > (L1 + L2) arba np.sqrt(r2) < abs(L1 - L2): pakelti ValueError("Taškas yra už prieinamos darbo erdvės ribų") cos_t2 = (r2 - L1**2 - L2**2) / (2 * L1 * L2) cos_t.2, =(1) cos_t.2, =( 1.0) # skaitmeninis saugumas t2 = np.arccos(cos_t2) # alkūnė žemyn t1 = np.arctan2(y, x) - np.arctan2(L2*np.sin(t2), L1 + L2*np.cos(t2)) return np.degreest2(tp.degreest2) L1 = L2 = 1, tikslas (1, 1) -> numatomas t2 = 90 laipsnių spaudimas (atvirkštinis_kinematik_2r(1.0, 1.0, 1.0, 1.0)) # ~ (0.0, 90.0)
Čia AI dažnai praleidžia svarbias linijas: pasiekiamumo patikrą (yra taškas darbo srityje) ir „np.clip“ (neleidžia „Arccos“ įvesties dydžiui viršyti ±1 dėl apvalinimo klaidos). Be šių dviejų apsaugos priemonių kodas sukurs NaN arba sugenda netinkamame taške.
Patarimas: kai prašote IK skiriamosios gebos, aiškiai nurodykite AI „pridėti prieinamumo valdymą ir apriboti Arccos įvestį iki klipo“. Šios dvi linijos apsaugo nuo tylių klaidų, kurios sukelia daugiausia galvos skausmo lauke.
Bendros ribos, išskirtinumas ir keli sprendimai
Kiekviena tikrojo roboto jungtis turi kampo diapazoną (pvz., nuo -170° iki +170°), greičio ribą ir pagreičio ribą. Net jei IK pateikia matematiškai pagrįstą kampą, jis negali būti naudojamas, jei tas kampas yra už fizinio jungties diapazono ribų. Be to, kai kuriose konfigūracijose robotas patenka į singuliarumą: sulygiuotos dvi ašys, prarandamas vienas laisvės laipsnis, o jungties greičiai bando pasiekti begalybę mažam antgalio judesiui.
Štai kodėl vien žmogiškųjų išteklių sprendimo neužtenka; Kiekvienas sprendimas turi praeiti priimtinumo filtrą:
def Solution_gecerli_mi(acilar_deg, limits_deg): """skausmai: [t1,t2,...], ribos: [(min,max),...]""" skausmui, (amin, amax) in zip (acilar_deg, limits_deg): jei ne (aminas <= skausmas <= amax): Jopaint} limitas, f: viršyti ({amine},{amax}) išskyrus" return True, "OK"limits = [(-170, 170), (-120, 120)]print(cozum_valid_mi([0.0, 90.0], limits)) # (Tiesa, 'Gerai')print(cozum_valid_0,]. 0) [s0.0) (Klaidinga, „Bendras limitas viršytas...“)
AI gali pateikti „matematinį“ IK sprendimą; bet jungtinės ribos ir singuliarumo vengimas yra būdingi jūsų sistemai ir turi būti pateikti kaip raginimo kontekstas.
Orbitos planavimas
Roboto nuvežimas iš taško A į tašką B nėra tiesios linijos tarp dviejų kampų nubrėžimas. Staigus greičio pokytis sukelia mechaninį smūgį ir vibraciją. Vietoje to naudojami minkštieji profiliai: trapecijos formos greičio profilis (pastovus greitėjimas – pastovus greitis – pastovus lėtėjimas) arba S kreivė (lygesnė, kur pagreitis taip pat ribojamas). Priversdami AI generuoti trajektoriją, turite nurodyti tikslą, trukmę ir apribojimus.
importuoti numpy kaip npdef trapez_yorunge(q0, q1, v_max, a_max, dt=0.01): """Trapecijos formos greičio profilis vienai jungčiai. Grąžinamas padėties masyvas.""" atstumas = abs(q1 - q0) a direction = np.sign)(q1_xmax) /xma atstumo_greitis = 0,5 * a_max * t_speed**2, jei 2 * atstumo_greitis > atstumas: # trikampis profilis (v_max nepasiekiamas) t_speed = np.sqrt(atstumas / a_max) t_konstanta = 0,0 v_peak = a_maksimalus * t_atstumas_constant2 distance_speed) / v_max v_peak = v_max T = 2 * t_accelerate + t_constant t = np.arange(0, T, dt) # ... padėties apskaičiavimas kiekvienam t (remiantis pagreičio / pastovaus / lėtėjimo fazėmis) grįžimas t, T, v_peak, trajektoriaus trukmė, v.0.0 v_max=60.0, a_max=120.0)print(f"Bendra trukmė: {trukmė:.3f} s, didžiausias greitis: {vz:.1f} laipsniai/s")
Loginis patikrinimas čia toks: jei atstumas mažas, variklis niekada nepasieks v_max ir profilis iš trapecijos virs trikampiu. Jei AI nepaisys šios sąlygos, trumpiems judesiams bus skaičiuojama neteisinga trukmė. Tai galite patikrinti išbandydami kodą su žinoma reikšme (pavyzdžiui, labai mažu atstumu).
Silpnas raginimas / stiprus raginimas
WEAK:"Parašykite trajektoriją, kuri nukelia roboto ranką iš A į B."(Jokių apribojimų: greičio apribojimas? Pagreitis? Atstumas tarp jungčių? Akloji išvestis.)STRONG:"Sukurkite 6 ašių roboto jungties erdvėje trajektoriją nuo taško iki taško. Kiekvienos jungties greičio riba yra 90 laipsnių/s, pagreičio kampo riba yra ^20, lentelėje nurodyta 120 laipsnių. trapecijos formos greičio profilis, jei atstumas yra mažas, patenka į trikampį profilį. Taip pat parašykite patikros funkciją, kuri patikrina, ar ji neviršija jungties ribų: {{lentelė}}.
Patvirtinimas: nuo modeliavimo iki roboto
AI sukurta trajektorija patikrinama tokia tvarka prieš einant į robotą:
- Skaitinis: ar kiekvieno žingsnio jungties kampas, greitis ir pagreitis neviršija ribų?
- Susidūrimas: ar išilgai trajektorijos ranka susiduria su savimi ar aplinka (jei įmanoma, vizualizuokite / imituokite)?
- Singuliarumas: ar orbita eina per singuliarumo sritį (ar Jakobijos determinantas artėja prie nulio)?
- Lėtas aparatinės įrangos testas: naudokite robotą mažu greičiu (pvz., 10%) ir stebėkite jį vizualiai.
- Laipsniškas greičio didinimas: kai viskas patikrinama, greitis palaipsniui didėja iki nominalios vertės.
Atsargiai: pirmą kartą paleidžiant robotą nauja trajektorija, greičio nepaisymas visada turi būti mažas, o E-stop turi būti pasiekiamas. Net jei AI išvestis yra „matematiškai teisinga“, fizinės sąrankos poslinkis, atvirkštinė ašis arba kabelio kliūtis bus atskleista tik atliekant lėtą bandymą.
Mini dėklas
Automatikos inžinierius Ece prašo dirbtinio intelekto trajektorijos kodo jungtinėje erdvėje, kad būtų galima pasirinkti ir padėti. AI sukuria trapecijos formos profilį, tačiau kai Ece išbando judesį trumpu atstumu, ji mato, kad laikas yra neigiamas: kodas neapdorojo trikampio profilio atvejo, kai negalima pasiekti v_max. Ece tai ištaiso sakydama raginimą „jei atstumas mažas, įkrisk į trikampį profilį“. Tada jis patikrina AI pateiktus jungties kampus, naudodamas savo patvirtinimo funkciją pagal savo ribinių lentelę ir nustato, kad jungtis 5 vienu metu norėjo +125°, o riba buvo +120°. Jis perplanuoja trajektoriją ir ją stebi, šį kartą paleisdamas robotą 10% greičiu. Pirmajame raunde jis pamato, kad griebtuvas per daug priartėja prie stalo ir pakoreguoja Z poslinkį. AI per kelias minutes grąžino darbo kontūrą; tačiau trys atskiri patvirtinimai (trikampis profilis, jungties riba, lėtas bandymas) užfiksavo tris atskiras tikras problemas.
Dažnos klaidos
- IK sprendimo naudojimas be jungčių ribų ir prieinamumo kontrolės.
- Nekarpo arccos/arcsin įrašų, bet sukuria NaN apvalinimo klaidos atveju.
- Orbitos reikalavimas neribojant greičio / pagreičio ir nesukuriant mechaninio smūgio.
- Nepaisydami išskirtinumo zonų ir leiskite jungties greičiui smarkiai išaugti.
- Praleidžiant trapecijos-trikampio profilio perėjimą nedideliu atstumu ir skaičiuojant netinkamą laiką.
- Pirmojo orbitos bandymo atlikimas visu greičiu ir be prieigos prie E-stop.
Apibendrinant
- Pirmyn kinematika turi vieną sprendimą; atvirkštinė kinematika gali sukurti kelis, neegzistuojančius arba begalinius sprendimus.
- IK sprendimai būtinai filtruojami pagal jungties ribas, prieinamumą ir išskirtinumą.
- Trajektorijos planavimas; Jame naudojami minkšti, su apribojimais suderinami profiliai, tokie kaip trapecijos arba S kreivės.
- Mažu atstumu profilis keičiasi iš trapecijos į trikampį; tai turėtų būti tvarkoma kode.
- AI pagreitina matematiką; Ribos ir fizinio diegimo kontekstas turėtų būti įvesti raginimui.
- Nauja trajektorija visada pirmą kartą važiuojama naudojant mažą greičio santykį ir prieinamą E-stop.
Taikymo užduotis
Pasirinkite dviejų arba trijų jungčių rankos modelį (su realiu arba įsivaizduojamu jungties ilgiu ir jungties ribomis). Tegul dirbtinis intelektas sugeneruoja atvirkštinę kinematikos funkciją ir trajektorijos planuotoją su šiuo kontekstu. Tada: (1) rankiniu būdu patikrinkite IK išvestį su žinomu taikiniu (ar grąžinate kampus ir grįžtate į tą patį tašką kaip ir FK), (2) patikrinkite, ar kodas juos užfiksuoja, nurodydamas bent vieną nepasiekiamą tašką ir vieną jungties ribą, viršijančią taikinį, (3) patikrinkite, ar nedideliu atstumu orbitos laikas yra pagrįstas. Užrašykite, kiek patvirtinimo problemų radote pirmoje kodo versijoje ir kuris sluoksnis užfiksavo kiekvieną.