[en] The objective of this project is to apply the concept of Programming by demonstration to the collaborative robot of Universal Robot from the Robotics Laboratory of the Polytechnic School of Engineering of Vilanova i la Geltrú (EPSEVG). Programming by demonstration is a technique that allows a robot to learn to perform a task through the demonstration of the same task by a human being. The selected task is the writing of words in capital letters. The system is based on a vision subsystem formed by two cameras that capture the three-dimensional movement of an object held by the human demonstrator. The captured images are automatically processed with the aim of eliminating transition strokes (such as the lifting of the hand between continuous strokes of a letter) and thus obtaining a representation closer to the letter drawn. The processed image is classified using machine learning techniques through a multi-layer convolutional neural network that was previously trained using the EMNIST Letters dataset. Once all the letters that make up the word have been classified by the neural network, the system communicates with the robot and gives it the necessary instructions to write that word using a writing system associated with the robotic arm. These instructions are composed of scripts that define the linear, curved and angular movements necessary for the robot to physically reproduce the letters and write the indicated word. The tests carried out showed that, in good lighting conditions, the vision and recognition systems were able to identify the letters correctly, reaching an average accuracy of 92% in a set made up of 20,800 samples. It was also possible to detect that the errors are mainly due to poor lighting, a writing speed that is too fast by the demonstrator or an unclear tracing of the letter by the demonstrator. The few errors that have existed have confused letters with similar strokes or letters with complex strokes.

[es] El presente proyecto tiene como objetivo aplicar el concepto de programación por demostración en el robot colaborativo de Universal Robot del laboratorio de Robótica de la Escuela Politécnica Superior de Ingeniería de Vilanova i la Geltrú (EPSEVG). La programación por demostración es una técnica que permite a un robot aprender a realizar una tarea a través de la demostración de la misma tarea por parte de un ser humano. La tarea seleccionada es la escritura de palabras en letras mayúsculas. El sistema está basado en un subsistema de visión formado por dos cámaras que capturan el movimiento tridimensional de un objeto sujetado por el demostrador humano. Las imágenes capturadas son tratadas automáticamente con el objetivo de eliminar trazos de transición (como el levantamiento de la mano entre trazos continuos de letra) y así obtener una representación más cercana a la letra trazada. La imagen procesada se clasifica utilizando técnicas de machine learning a través de una red neuronal convolucional de múltiples capas que fue entrenada previamente utilizando el dataset EMNIST Letters. Una vez clasificadas por la red neuronal todas las letras que conforman la palabra, el sistema se comunica con el robot y le da las instrucciones necesarias para escribir esa palabra mediante un sistema de escritura asociado al brazo robótico. Dichas instrucciones están compuestas por scripts que definen los movimientos lineales, curvos y angulares necesarios para que el robot reproduzca físicamente las letras y escriba la palabra indicada. Las pruebas realizadas demostraron que, en condiciones de iluminación buenas, los sistemas de visión y de reconocimiento pudieron identificar las letras correctamente, alcanzando una precisión promedio del 92% en un conjunto formado por 20.800 muestras. También se pudo detectar que los errores son debidos principalmente a una iluminación deficiente, a una velocidad de escritura del demostrador demasiado rápida o a un trazado no claro de la letra por parte del demostrador. Los escasos errores que han existido han confundido letras con trazos similares o letras con trazos complejos.