Sunteți pe pagina 1din 6

INTELIGENŢĂ ARTIFICIALĂ 2019-2020

CURS 3

2.5 Aplicaţie: Programarea mişcării unui robot cu evitarea


obstacolelor
2.5.1 Introducere
La nivelul, numit nivel obiect, al sarcinilor robotice se efectuează mişcări pentru manipularea
pieselor sau sculelor. O aplicaţie foarte frecventă pentru acest nivel de programare este
asamblarea pieselor complexe (mecanice, electromecanice sau electronice). Un element
important în astfel de aplicaţii este generarea unor traiectorii care să evite obstacolele. În acest
mod se permite programatorului să specifice poziţiile iniţială şi finală, fără a se preocupa de
traiectoria pe care sistemul o va alege între aceste două poziţii.

Un subprogram de asamblare tipic este acela care înşurubează componenta c2 în componenta


c1. Aici este nevoie de generarea únei traiectorii care să evite obstacolele atunci când
componentele c1 şi c2 se deplasează între poziţiile iniţială şi finală (figura 2.15). Această
generare se face automat, fără specificare explicită în program, încă de la faza de compilare a
programului, deci off-line. Dar anomaliile de funcţionare pot determina interpretorul de
instrucţiuni de programare în limbajul robot, să introducă noi acţiuni în program pentru a
corecta erorile apărute. Aceste noi acţiuni determină o generare on-line a traiectoriilor libere
de coliziuni cu obstacole. Întârzierile permise sunt de ordinul secundelor.

Obstacol

Figura 2.15 Generarea traiectoriei la o operaţie de asamblare

2.5.2 Detectarea coliziunilor


Pentru a putea detecta coliziunile într-o aplicaţie robotică este nevoie să se dispună de o
reprezentare 3D a corpurilor prezente în spaţiul de operare. O metodă care poate fi folostă este
să se reprezinte anvelopa exterioară a obiectelor cu suprafeţe simple: plane, sferice sau
cilindrice. Suprafaţa cea mai simplă ar fi sfera: cu o astfel de reprezentare detectarea

CURS 3 IA 2019/2020 1/6


Figura 2.16 Reprezentări geometrice simple

coliziunilor constă în calcularea distanţelor între centrele sferelor. se obţine astfel informaţie
nunumai despre existenţa sau inexistenţa unei coliziuni, dar şi despre distanţa dintre punctele
cele mai apropiate ale obiectelor, ceea ce este o informaţie foarte importantă pentru generarea
traiectoriilor.

Sfera aceasta este definită prin centru şi raza ei, exprimate în raport cu un sistem de referinţă
ataşat obiectului. Aproximarea rămăne totuşi grosieră, dar utilă pentru detectarea lipsei
coliziunii. Dacă intersecţia dintre sferele, care aproximează anvelopele a două obiecte, este
vidă atunci se poate trece la o aproximare mai fină, mai precisă a obiectelor.

Dacă sfera este locul geometric al punctelor egal depărtate de un punct, atunci putem imagina
în aceeaşi manieră şi alte reprezentări, în figura 2.16:
 "baston" - locul geometric al punctelor egal depărtate de un segment de dreaptă, în
special pentru obiectele lungi cum sunt cuplele de roboţi.
 "pernă" - locul geometric al punctelor egal depărtate de un dreaptunghi, în special
pentru obiectele plate cum sunt mesele de montaj, zidurile, solul, tavanul.
 "zar" - locul geometric al punctelor egal depărtate de un paralelipiped.
Alegerea acestor tipuri de suprafeţe simplifică foarte mult calculul distanţelor între obiecte.
De exemplu calculul distanţelor între două "bastoane" este dat de calculul distanţei între două
segmente de dreaptă.

Astfel pentru fiecare obiect avem două reprezentări:


 o sferă (aproximarea grosieră),
 un baston, o pernă sau un zar, sau reuniuni ale lor, articulate sau nu.

Pentru a detecta o coliziune în spaţiul de operare robotic este suficient acum să calculăm
distanţele între suprafeţele de aproximare a obiectelor mobile (obiectele deplasate, robotul şi
componentele lui) şi celelalte obiecte prezente.

2.5.3 Generarea traiectoriilor


Am descris mai devreme un mod de reprezentare a obiectelor util în detectarea coliziunilor
pentru o anumită poziţie din deplasarea obiectelor. Acest rezultat poate fi folosit pentru a
verifica dacă o traiectorie este sau nu liberă de coliziuni.

Metoda cea mai simplă este să se eşantioneze traiectoria cu un anumit pas şi să se verifice
pentru fiecare poziţie în parte. Pentru rezultate utile trebuie lucrat cu un pas foarte fin, dar
atunci timpul de calcul devine foarte mare.

CURS 3 IA 2019/2020 2/6


Se poate surmonta acest inconvenient folosind un criteriu de distanţă adecvat în raport cu
obstacolul cel mai apropiat, la fiecare pas. Intuitiv aceasta se exprimă astfel: dacă considerăm
două puncte de eşantionare vecine A şi B de pe traiectorie, separate de distanţa d, se poate
spune că segmentul AB este liber de obstacole dacă distanţa de la obstacolul cel mai apropiat
este mai mare de 0,5d atât faţa de A cât şi faţa de B. Această idee presupune că obiectele au
reprezentare sferică, altfel lucrurile se complică (figura 2.17).

B
dB obstacol
d

A
dA

traiectorie

Figura 2.17 Exemplu de aplicare a unui criteriu simplu de evitare a obstacolelor

Criteriul de distanţă poate fi astfel corectat pentru a evita această situaţie.


Avem:

d
min d A , d B   k 
2

unde:
 dA, dB sunt distanţele între obiectele mobile şi obstacolul cel mai apropiat, pentru A
respectiv B.
 d este distanţa între obiectele mobile în A şi în B
 k este o constantă care depinde de geometria obiectului deplasat şi de tipul "măinii"
robotului.
Dacă are loc o reorientare a obiectului între A şi B, se utilizează un criteriu similar:

min d A , d B   k '  

unde  este amplitudinea rotaţie obiectului deplasat între A şi B.

Dacă se aplică astfel de criterii atunci se poate lucra cu un pas de discretizare mai mare şi ca
urmare se micşora timpul de calcul. Dacă pentru un segment nu sunt îndeplinite criterile
impuse atunci se împarte segmentul în două părţi şi se reia procedura până când sau se
respectă criteriile impuse sau pănă cănd se detectează o coliziune (adică dA sau dB devin  0).

Generarea traiectoriei libere de obstacole între o poziţie iniţială S şi una finală G se face
atunci după următorii paşi. Se împarte problema în trei etape:
 deplasarea obiectului cu aceeaşi orientare din S până într-o poziţie în care acesta poate
fi rotit astfel încât să aibă orientarea din G,
 reorientarea obiectului în această poziţie intermediară,

CURS 3 IA 2019/2020 3/6


 deplasarea obiectului cu orientarea din G pănă în poziţia din G.

Poziţia de reorientare este aleasă de preferinţă chiar în S sau G. Dacă criteriul ales pentru
orientare indică că acest lucru este imposibil, trebuie avută în vedere o abordare euristică
pentru a gasi poziţia în care reorientarea este posibilă. Poziţia respectivă este aceea care
furnizează maximum de spaţiu posibil.

Spaţiul de lucru al robotului este suprapus unei grile 3D cu puncte repartizate pe cele trei axe
X, Y, Z. În fiecare dintre punctele acestei grile poate fi mutat un sistem de coordonate care
este ataşat obiectului deplasat. Fiecare dintre aceste puncte este considerat ca fiind nodul unui
graf. Soluţia problemei, adică găsirea unei traiectorii între S şi G libere de coliziuni, se va
obţine prin aplicarea algoritmului A. La fiecare pas se va selecţiona pentru a fi dezvoltat "cel
mai bun" nod prezent în open list. Selecţia va avea în vedere un criteriu de pinzănd de
lungimea drumului şi va fi definit de o funcţie de evaluare f care urmează să fie prezentată.
Nodul selecţionat va fi retras din open list şi pentru el se va face un test de detectare a
coliziunilor. Dacă se detectează coliziuni atunci nodul nu se dezvoltă şi este plasat în closed
list. Dacă nu există coliziuni atunci nodul este dezvoltat în sensul că i se generează un număr
(de exemplu 5 ca în figura 2.18) succesori. Detecţia de coliziuni nu se face decât în nodurile
selecţionate, cu ajutorul funcţiei f, din open list.

Figura 2.18 Căutarea drumului în spaţiul 3D

Se poate utiliza o funcţie de evaluare de următorul tip:

f (n)  wg  g (n)  wh  h(n)


unde:
 wg, wh sunt factori de ponderare
 g(n) estimarea pentru cel mai bun drum de la S la n, g*(n).
 h(n) estimarea celui mai bun drum de la n la G, h*(n).

Reamintim că drumurile sunt alcătuite din segmente de dreaptă care unesc puncte vecine din
grila 3D la care este raportat spaţiul de operare al robotului.
 g(n) este lungimea celui mai bun drum de la S la n descoperită până la momentul
prezent, valoarea lui g(n) poate eventual să scadă dacă n se va regenera în cele ce urmează,
 h(n) este distanţa în linie dreaptă între n şi G, în măsura în care această traiectorie este
liberă de obstacole. h(n) este un prag inferior pentru h*(n) şi prin urmare ne asigurăm că vom
găsi drumul cel mai scurt posibil (în sensul grilei 3D) între poziţiile S şi G, cel puţin pentru
wg  wh  1 .

w
Din considerente practice (timp de calcul în primul rând) se aleg totuşi wg  h , favorizând
2
în acest mod o abordare depth - first în raport cu abordarea breadth - first.

CURS 3 IA 2019/2020 4/6


P

S
G
În acest punct se
detectează o coliziune Direcţia de evitare a obstacolului
O indicată de procedura “bug-euristic”

Figura 2.19 Ocolirea unui obstacol folosind procedura “bug – euristic”

Unele experimente au determinat introducerea unui al treilea termen în funcţia de evaluare:

f (n)  wg  g (n)  wh  h(n)  wi  i(n)

Ideea este de a evita înscrierea pe traiectorii prea apropiate de obstacole şi ca urmare să se


penalizeze nodurile în care distanţa faţă de obstacol este mai mică decât un prag prestabilit.
i(n) este definit ca fiind suma penalităţilor de-alungul drumului celui mai bun de la S la n.

2.5.4 Abordare euristică


Căutarea unei traiectorii libere de obstacole poate fi mult accelerată utilizând abordări
euristice pentru evitarea obstacolelor.
Se pot da două exemple:
 "bug heuristic" (bug=insectă, în americană, salt peste "zid") utilizată în raport cu
căutarea în graf (graph search).
 "dog heuristic"(dog=câine, trecerea printr-o poartă) utilizată pentru modificarea
orientării obiectului deplasat de fiecare dată când este necesar.

Aceste două abordări sunt reprezentate sub forma caracteristicilor obstacolelor prezente în
spaţiul de lucru al robotului, indicând o manieră fericită de a le evita. Un exemplu tipic pentru
"bug heuristic" este prezentat în figura 2.19.

În timpul căutării drumului de la S la G, o coliziune este detectată între un obiect mobil şi


obstacolul O. În acest punct algoritmul de evitare a obstacolului consultă procedura "bug
heuristic" cu privire la obstacolul care încurcă. Informaţia furnizată indică în ce direcţie, în
raport cu obstacolul, să se facă trecerea. Algoritmul caută atunci în grila 3D, în direcţia
furnizată, un punct P fără coliziuni. În acest stadiu se forţează algoritmul A să treacă prin P
modificând funcţia de evaluare f, pentru toate nodurile n dintre S şi P. Pentru aceste puncte h
este o estimare a lungimii celui mai bun drum de la n la P şi de la P la G. De fapt nu e chiar un
algoritm A propriu zis pentru că apare şi temenul i(n) şi apar şi ponderile w. Algoritmul
continuă să folosească noua funcţie de evaluare până ce se întâlneşte un al obstacol care
poate fi evitat cu o euristică de tip "bug". Funcţia h ţine cont de acest nou punct de trecere. Şi

CURS 3 IA 2019/2020 5/6


aşa mai departe. În figura 2.20 se prezintă o traiectorie generată în acest caz pentru o
problemă cu mai multe obstacole.

O2

P1 P3

G
S
P2

O1 O3

Figura 2.20 Traiectorie obţinută prin aplicarea procedurii “bug – euristic”

Al doilea tip de abordare euristică numit "dog euristic" (face referire la problema unui câine
care trebuie să treacă printr-o poartă când are un os mare în gură) constă în deplasarea printre
obstacole dar cu reorientarea obiectului deplasat. Atunci când nu se depistează un punct de
trecere una din variantele rămase este reorientarea obiectului deplasat şi reluarea căutării unui
drum. Obiectul respectiv este rotit în jurul a două axe perpendiculare pe direcţia de căutare a
unui punct de trecere. Pentru economie de timp de calcul incremenţii nu sunt foarte mici, se
poate alege de exemplu 30 grade.

Remarcă: Timpul cel mai important de calcul pentru probleme de genul celei prezentate mai
sus, este consumat pentru detectarea coliziunilor.

CURS 3 IA 2019/2020 6/6

S-ar putea să vă placă și