Rúbrica PR5071/03 — Robot UR3e amb Visió OAK-D
Mòdul: 5071 — Models d'IA | Resultat d'Aprenentatge: RA4 | Pràctica: PR5071/03
Cada dimensió es puntua de 0 a 10. La nota final és la mitjana ponderada de les cinc dimensions.
| Dimensió | Pes |
|---|---|
| D1 — Configuració Docker i entorn | 15% |
| D2 — Detecció d'objectes OAK-D | 25% |
| D3 — Calibració i transformació de coordenades | 20% |
| D4 — Control del robot UR3e / URSim | 25% |
| D5 — Integració i documentació | 15% |
D1 — Configuració Docker i entorn
Avalua la qualitat del docker-compose.yml, la correcta definició dels serveis i la personalització amb el nom de l'alumne.
| Nivell | Puntuació | Descripció |
|---|---|---|
| Excel·lent | 9–10 | El docker-compose.yml és completament funcional. Els dos serveis (ursim i oak-detection) arrenquen sense errors. Els contenidors s'anomenen exactament ursim-nom-cognom i oak-nom-cognom amb el nom real de l'alumne. El Dockerfile del servei oak-detection instal·la totes les dependències correctament (depthai, ultralytics, ur_rtde, opencv-python-headless, numpy). La xarxa interna robot_net està definida i els serveis es comuniquen per nom de servei. Les regles udev per a la càmera OAK-D estan incloses. Les variables d'entorn (ALUMNE, ROBOT_IP) estan configurades. |
| Bé | 7–8 | El docker-compose.yml és funcional amb errors menors. Tots dos serveis arrenquen. Els noms dels contenidors estan personalitzats però amb algun error de format (p. ex. majúscules o espais). Totes les dependències estan instal·lades. Pot faltar alguna variable d'entorn opcional o la configuració de les regles udev. |
| Acceptable | 5–6 | El fitxer docker-compose.yml existeix i té l'estructura correcta, però hi ha errors que calen correccions manuals per arrencar els serveis (p. ex. ports incorrectes, nom d'imatge erroni). Els noms dels contenidors no estan personalitzats o fan servir el nom per defecte. Falta alguna dependència. La comunicació entre serveis funciona de forma bàsica. |
| Insuficient | 0–4 | El docker-compose.yml no existeix o no arrenca. Els serveis no es comuniquen entre ells. No hi ha personalització del nom de l'alumne. El Dockerfile és incorrecte o incomplet. L'alumne no ha pogut demostrar que l'entorn funciona. |
D2 — Detecció d'objectes OAK-D
Avalua que el pipeline DepthAI és funcional, que YOLOv8 (o el model alternatiu) detecta objectes correctament i que les coordenades 3D obtingudes són coherents.
| Nivell | Puntuació | Descripció |
|---|---|---|
| Excel·lent | 9–10 | El script deteccio_objectes_nom_cognom.py inclou el nom real de l'alumne. El pipeline DepthAI arrenca sense errors i captura frames en temps real. YOLOv8n (o MobileNetSSD com a alternativa documentada) detecta l'objecte diana especificat. Les coordenades 3D (X, Y, Z en mm) es mostren per a cada detecció i són coherents amb la posició real de l'objecte (error < 30 mm a 500 mm de distància). Els quadres delimitadors i l'etiqueta de classe es dibuixen sobre el frame. El llindar de confiança és aplicat correctament. El codi conté comentaris en català. |
| Bé | 7–8 | El pipeline DepthAI és funcional. La detecció d'objectes funciona però amb imprecisions en les coordenades 3D (error entre 30–80 mm). Els quadres delimitadors es mostren correctament. El nom de l'alumne apareix al fitxer però el llindar de confiança no s'aplica o s'aplica de forma incorrecta. Els comentaris en català són parcials. |
| Acceptable | 5–6 | El pipeline s'inicia però hi ha errors intermitents. La detecció funciona en la majoria de casos, però les coordenades 3D no estan disponibles (funciona com a detecció 2D sense profunditat) o els valors de profunditat no són fiables. El nom de l'alumne no apareix al fitxer o a la sortida visual. |
| Insuficient | 0–4 | El pipeline no s'inicia o produeix errors constants. La detecció d'objectes no funciona. Les coordenades 3D no s'obtenen. El codi és pseudocodi o copiat sense adaptació. |
D3 — Calibració i transformació de coordenades
Avalua la comprensió del concepte de calibració mà-ull, la correcta implementació de la transformació de coordenades i la coherència de la matriu T_cam2robot resultant.
| Nivell | Puntuació | Descripció |
|---|---|---|
| Excel·lent | 9–10 | L'alumne demostra comprensió clara de la diferència entre eye-in-hand i eye-to-hand a la memòria. S'han mesurat i documentat els 3 punts de calibració reals (o simulats de forma coherent). La matriu T_cam2robot 4x4 és matemàticament vàlida (la submatriu de rotació és ortogonal, det(R) ≈ 1). L'error RMS de calibració és inferior a 5 mm. La funció transformar_coordenades aplica correctament la transformació homogènia i retorna la posició en metres. El codi de calibració s'executa sense errors i imprimeix l'error RMS. |
| Bé | 7–8 | La matriu de transformació és funcional però l'error RMS és entre 5–15 mm. Els punts de calibració estan documentats però el procediment de mesura no s'explica detalladament. La funció de transformació funciona però conté errors menors (p. ex. no comprova det(R)). L'alumne distingeix les dues configuracions mà-ull però amb alguna imprecisió conceptual. |
| Acceptable | 5–6 | S'ha definit una matriu de transformació (manualment o estimada), però no ha estat calculada a partir de punts de calibració reals. La transformació s'aplica correctament en el codi però els resultats numèrics no han estat validats. L'alumne menciona el concepte de calibració mà-ull però no demostra comprensió de les dues configuracions. |
| Insuficient | 0–4 | No s'ha implementat cap transformació de coordenades. La matriu d'identitat s'usa com a substitut sense justificació. El codi de calibració no existeix o no funciona. L'alumne no demostra comprensió del problema de calibració mà-ull. |
D4 — Control del robot UR3e / URSim
Avalua que la connexió RTDE és funcional, que el robot executa els moviments ordenats correctament i que s'apliquen els paràmetres de seguretat adequats.
| Nivell | Puntuació | Descripció |
|---|---|---|
| Excel·lent | 9–10 | La connexió ur_rtde al robot (o URSim) s'estableix correctament i sense errors. El robot és mogut a la posició HOME amb moveL. Els paràmetres de seguretat s'apliquen: velocitat ≤ 0.10 m/s i acceleració ≤ 0.05 m/s² per als moviments principals; velocitat ≤ 0.05 m/s per al descens final. La verificació de seguretat (Z mínim, radi màxim) és implementada i descartaria posicions perilloses. El moviment en dues fases (aproximació + descens) és correctament implementat. La posició TCP final s'obté via getActualTCPPose() i es registra. La connexió RTDE es tanca correctament al final (stopScript). El robot estava en mode Remote Control (evidenciat per captura de pantalla o log). |
| Bé | 7–8 | La connexió RTDE funciona i el robot executa moviments. Els paràmetres de velocitat i acceleració s'apliquen però amb valors superiors als recomanats (0.15–0.25 m/s). El moviment en dues fases existeix però l'altura d'aproximació és insuficient (< 5 cm). La verificació de seguretat és parcial (comprova Z però no el radi horitzontal). La posició TCP final s'obté però no es registra al JSON. |
| Acceptable | 5–6 | La connexió RTDE s'estableix però el robot no executa moviments autònom (cal intervenció manual). O el robot es mou però amb velocitat per defecte (sense paràmetres de seguretat explícits). No hi ha moviment en dues fases ni verificació de seguretat. El mode Remote Control no es documenta. |
| Insuficient | 0–4 | La connexió RTDE no funciona o no s'ha intentat. No hi ha codi de control del robot. L'alumne no ha pogut demostrar cap moviment del robot (ni al simulador). |
D5 — Integració i documentació
Avalua que el script integrat funciona end-to-end, que el fitxer JSON de resultat es genera amb el nom de l'alumne i que les preguntes de reflexió demostren comprensió dels conceptes.
| Nivell | Puntuació | Descripció |
|---|---|---|
| Excel·lent | 9–10 | El script robot_vision_nom_cognom.py (amb el nom real) executa el pipeline complet sense errors: detecció → transformació → moviment → JSON. El fitxer resultat_nom-cognom.json existeix, conté tots els camps especificats (metadades amb alumne i timestamp, detecció amb coordenades, transformació, posició TCP final del robot) i usa el nom real de l'alumne. Les 5 preguntes de reflexió estan respostes a la memòria amb profunditat, demostrant comprensió real dels conceptes (no respostes genèriques). La memòria inclou captures de pantalla del sistema en funcionament. El diagrama de flux Mermaid és coherent amb el codi implementat. |
| Bé | 7–8 | El script d'integració executa la majoria de passos però s'atura abans del moviment final (p. ex. per problemes de calibració). El fitxer JSON existeix i conté els camps principals però manca algun camp (p. ex. la matriu T_cam2robot o la posició TCP final). Les preguntes de reflexió estan respostes però algunes de forma superficial (1–2 frases sense justificació). Les captures de pantalla mostren l'entorn funcionant parcialment. |
| Acceptable | 5–6 | El script d'integració existeix i s'executa fins a la detecció o la transformació, però no fins al moviment del robot. El fitxer JSON és incomplet (manca el timestamp, les coordenades o l'alumne). Tres o menys preguntes de reflexió estan respostes. No hi ha captures de pantalla o el diagrama Mermaid no coincideix amb el codi. |
| Insuficient | 0–4 | No hi ha script d'integració o no s'executa. El fitxer JSON no existeix o no conté el nom de l'alumne. Menys de dues preguntes de reflexió respostes. No hi ha evidències del sistema en funcionament. |
Taula de qualificació
| Dimensió | Pes | Puntuació (0–10) | Puntuació ponderada |
|---|---|---|---|
| D1 — Configuració Docker | 15% | ||
| D2 — Detecció OAK-D | 25% | ||
| D3 — Calibració i transformació | 20% | ||
| D4 — Control UR3e / URSim | 25% | ||
| D5 — Integració i documentació | 15% | ||
| TOTAL | 100% | /10 |
Lliurament
| Element | Obligatori |
|---|---|
docker-compose.yml funcional amb contenidors personalitzats |
Sí |
deteccio_objectes_nom_cognom.py (nom real) |
Sí |
robot_vision_nom_cognom.py (nom real) |
Sí |
resultat_nom-cognom.json (nom real, generat automàticament) |
Sí |
| Captures de pantalla del sistema en funcionament | Sí |
| Respostes a les 5 preguntes de reflexió (memòria o README) | Sí |
| Codi de calibració (punts mesurats o justificació del mode simulació) | Sí |
| Extensió AP5071/01 (opcional) | No |
Nom de l'alumne als fitxers
Els noms dels contenidors Docker, els fitxers Python, el fitxer JSON de resultat i la variable ALUMNE han de contenir el teu nom i cognom reals (sense accents, en minúscules, unit per guió). No s'accepten lliuraments amb "nom-cognom" sense substituir.
Mode simulació
Si no disposes de hardware real (UR3e + OAK-D Pro-W), pots fer la pràctica en mode simulació (URSim + webcam o vídeo). En aquest cas has de documentar explícitament a la memòria quines parts s'han executat en simulació i quines diferències esperes respecte al hardware real. La puntuació màxima disponible en mode simulació és de 8/10 per a les dimensions D2 i D4.