Skip to content

misarmientoc/Robotica_lab4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Robotica_lab4

Laboratorio 4 de robótica 2023-2

Laboratorio 4 Robótica

Integrantes:

  • Norma Lorena Martinez Zavala
  • Miguel Angel Sarmiento Cabarcas
  • Jaime Andres Sanchez Peralta

Objetivos:

• Crear todos los Joint Controllers con ROS para manipular servomotores Dynamixel AX-12 del robot Phantom X Pincher.
• Manipular los tópicos de estado y comando para todos los Joint Controllers del robot Phantom X Pincher.
• Manipular los servicios para todos los Joint Controllers del robot Phantom X Pincher.
• Conectar el robot Phantom X Pincher con MATLAB o Python usando ROS.

Descripción de la solución planteada

El primer paso para la elaboración de este laboratorio fué tomar las medidas de los estabones del robot, para ello se mide de junta a junta, como se muestra en la siguiente imagen: IMG-20231105-WA0037.jpg

Medidas de los eslabones: IMG-20231105-213426.jpg

Desarrollo de la cinemática directa:

Se hizo uso de SerialLink para la construcción del robot a partir de los parámetros DH estandar, también se calculó la matriz de transformación homogenea que relaciona el sistema de coordenadas de World con el sistema de coordendas del TCP (H0TCP).

El diagrama que describe el robot pincher es el siguiente

image

Los marcos de referencia para describir el robot a través de los parámetros DH con base en el diagrama del robot pincher y las distancias de las articulaciones ya medidas son:

image

PhantomII =

PhantomII:: 4 axis, RRRR, stdDH, slowRNE

image

tool: t = (0, 0, 0.065), RPY/xyz = (0, 0, 0) deg
H0TCP = 4×4
0 0 1.0000 0.1700 0 -1.0000 0 0 1.0000 0 0 0.1850 0 0 0 1.0000 image

q1 = 1×4
0.4363 0.4363 0.3491 -0.3491

image

q2 = 1×4
-0.6109 0.6109 -0.5236 0.5236

image

q3 = 1×4
1.4835 -0.3491 0.9599 0.4363

image

q4 = 1×4
1.3963 -0.6109 0.9599 -0.7854

image

Codigo

Para iniciar el control de los motores del pincher, se debe modificar el archivo de configuracion de dynamixel one motor que se encuentra en el sitio web del curso, agregando los parametros correspondientes a los 5 motores que forman parte del brazo robotico. Luego, se debe escribir el codigo en python que importe las siguientes dependencias.

image

Para trabajar con ROS en python, se necesita importar el módulo de rospy, que proporciona las funciones y clases esenciales para interactuar con el sistema. También se utiliza el módulo de numpy, que permite realizar cálculos numéricos y operaciones matriciales de forma eficiente. Además, se requieren varios tópicos y mensajes específicos de ROS, como el tipo JointTrajectory, que representa una secuencia de posiciones y velocidades de las articulaciones.

La función Join_publisher se encarga de crear un objeto Publisher que publica en el tópico joint_trajectory, que es usado por el controlador del brazo robótico. Dentro de un bucle, mientras rospy esté activo, se envían los puntos guardados al motor. Esta función es una función residual de pruebas anteriores y no se utiliza en el código principal del programa.

image

Este código de python usa las funciones callback y listener para trabajar con los datos de los servomotores del robot. El listener inicializa el nodo de ROS y se suscribe al tópico de los estados de las articulaciones. El callback guarda una variable global con el ángulo de cada articulación en grados, usando una conversión simple de radianes a grados 180/pi.

image

La función jointCommand es una función que envía un comando de dynamixel al motor especificado, usando el servicio de transmitir al motor. El comando de dynamixel tiene cuatro parámetros: el número de comando, el identificador del motor, el nombre de la dirección de memoria y el valor nuevo. La función espera a que el servicio esté disponible y luego envía el comando. Después, espera un tiempo para ROS y devuelve el resultado del comando.

image

Cuando se ejecuta este archivo desde la terminal, se inicia el nodo de ROS y se suscribe al topic de los motores para recibir sus datos. Estos datos se muestran en la terminal junto con el nombre del grupo. A continuación, se crean listas con las posiciones posibles para enviar a los motores, tanto en bits como en grados. Se hace una lista de listas con estas posiciones y se le presentan al usuario en formato de grados.

image

El programa inicia un bucle while que se ejecuta indefinidamente, solicitando al usuario que ingrese un número de posición para controlar el pincher. Mediante un bucle for, se envían los comandos correspondientes a cada motor usando la función join_command, junto con un límite de torque por seguridad. La posición real de cada motor se muestra en la consola, junto con el error respecto a la posición deseada.

image

MATLAB

Partiendo del codigo ejemplo sync_write.m se genera un archivo que permite controlar 4 motores al tiempo y se genera un switch case para seleccionar cada una de las posiciones y para cerrar el ciclo y la comunicacion.

image

Desarrollo

A continuación se muestra el pantallazo donde el robot alcanza cada una de las posiciones que son seleccionadas por el usuario:

image

En el siguiente video se observa el movimiento del robot

https://youtu.be/kAmjaRHJvHw?si=97m7ebpFJ07SqSqx

Conclusiones

-El programa creado logra establecer una comunicación humano-máquina mediante la terminal, aunque la interfaz podría ser más intuitiva en próximos laboratorios. Se tiene como objetivo diseñar una interfaz más atractiva en futuras operaciones.

-Para realizar este laboratorio, se utilizaron los repositorios de referencia como base. Los archivos de la carpeta de Dynamixel One Motor, en particular los scripts, fueron los más relevantes para el proyecto. Estos archivos facilitaron el desarrollo del programa y el aprendizaje de los conceptos de control de motores Dynamixel.

About

Laboratorio 4 de robótica 2023-2

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •