User Tools

Site Tools


Writing /var/lib/dokuwiki/data/meta/teaching/ie0117/proyectos/2014/i/proyecto_1/pyrovito_position_backup.meta failed
teaching:ie0117:proyectos:2014:i:proyecto_1:pyrovito_position_backup

Pyrovito position backup

José Antonio Garo b22758

Descripción:

Pyrovito es una aplicación de visualización que forma parte de la plataforma simuladora del robot manipulador de objetos utilizada en el robot TUM-Rosie. Dicha aplicación simula dos brazos y dedos, un sensor de torque y fuerza. También simula la fricción entre un objeto, una mesa y un dedo robot. El pyrovito está escrito en Python y hace uso de paquetes de Yarp y las librerías de OpenGL para su funcionamiento. Este proyecto pretende agregar el código necesario a Pyrovito para que cada vez que se cierre el simulador, el sea capaz de guardar un archivo con la posición de la cámara justo antes del cierre, además, que al iniciar se cargue ésta posición, haciendo más cómoda la visualización del usuario.

Objetivo General:

Modificar el código del pyrovito para tener acceso a la última visualización de la cámara y poder posicionarlo en ella al iniciar.

Objetivos específicos:

1. Investigar sobre el funcionamiento del pyrovito y como modificarlo adecuadamente. 2. Diseñar un archivo de configuración utilizando YAML con el objetivo de almacenar la última posición de la cámara. 3. Modificar Pyrovito para que al finalizar guarde un archivo con las últimas coordenadas de la cámara, además para que sea capaz de recargarlas al iniciar.

Justificación:

Debido que actualmente la posición por defecto del Pyrovito resulta incómoda para la su utilización, el usuario debe moverse hasta una posición que resulte útil, a lo mejor la última visualización antes dejar de utilizar el programa. Por esta razón es necesario agregar a Pyrovito la capacidad de almacenar las ultimas coordenadas de visualización, mediante un archivo de configuración que al cargar de nuevo el programa asigne las coordenadas anteriores.

Metodología:

1. Examinar Pyrovito, los paquetes necesarios de Yarp, avispy, YAML y Open GL. 2. Escribir y agregar código para guardar en un archivo las coordenadas de la última visualización, además introducir un método que cargue la configuración de este archivo al iniciar el programa.

Implementación:

YAML es un acrónimo recursivo que significa “YAML Ain't Another Markup Language (en castellano, “YAML no es otro lenguaje de marcado”). Como su nombre lo dice, YAML es un formato de serialización de datos legible por humanos que facilita el desarrollo de software en lenguajes como XML, C, Python, Perl, etc. Con el fin de obtener mas información sobre esta Herramienta, consulte la pagina www.yaml.org

*Para la implementación del Pyrovito backup se debe abrir una terminal y ejecutar los siguientes comandos e instrucciones

* Instalar las librerías de YAML desde debian.

   $sudo apt-get install python-yaml
   

*Instalar pyrovito:

cd ~local/src
git clone https://github.com/arcoslab/pyrovito.git
cd pyrovito
make xstow_install

El Programa pyrovito que se encuentra en la anterior dirección es el original, sin modificaciones al código. La opción de recuperar la última posición de la cámara, así como el radio de la visualización, la altura de la cámara y otras opciones, se puede implementar de la siguiente manera:

* Modificar pyrovito.

cd ~/local/src/pyrovito
nano pyrovito

Buscar la inicialización de la cámara:

*Agregar debajo de la inicialización de la cámara, siguiendo el orden gerárquico de los comandos

Texto:

 
 
 import yaml #imports the yaml libraries
 from avispy.engine import Camera_matrix
 from yaml import load, dump
 Try:
   from yaml import CLoader as Loader, CDumper as Dumper
 except ImportError:
   from yaml import Loader, Dumper
 #read the camera last position, saved in a yaml file
 temporal_file = open('~/local/src/pyrovito/Position_Backup.yaml','r')
 d = yaml.load(temporal_file, Loader=Loader)
 temporal_file.close()
      #here we load the camera last position to the camara inicialization.
 camera.camera_matrix.center_rot_frame = d['center_rot_frame']
 camera.camera_matrix.delta_pos = d['delta_pos']
 camera.camera_matrix.altitud = d['altitud']
 camera.camera_matrix.azimuth = d['azimuth']
 camera.camera_matrix.radius = d['radius']
 camera.camera_matrix.normal_angle = d['normal_angle']

*Buscar en el programa la acción de salir del programa.

*Agregar antes de terminate_handler(signal.SIGTERM,None)

Texto:

#here the user press q or quit the program, so its time to save the camera position.
               #this is a dictionary of the information in camera_matrix
               camera_matrix_Backup= dict( center_rot_frame = camera.camera_matrix.center_rot_frame.tolist(), delta_pos= camera.camera_matrix.delta_pos.tolist(),  altitud=camera.camera_matrix.altitud, azimuth=camera.camera_matrix.azimuth, radius=camera.camera_matrix.radius, normal_angle=camera.camera_matrix.normal_angle)
              #load the camera last position, saved in a yaml file, and write into it
              temporal_file = open('~/local/src/pyrovito/Position_Backup.yaml', "w" )
              yaml.dump(camera_matrix_Backup,temporal_file, Dumper=Dumper)
              temporal_file.close()

*Se guarda el Archivo pyrovito.

*Se abre un editor de texto Nano y se agrega el siguiente

Texto:

altitud: 0.0
azimuth: 0.0
center_rot_frame:
- [0.2908502793900505, 0.6783269473226277, -0.6747434086485758, 0.0]
- [-0.7177882324832013, 0.6209900335064857, 0.31488320309959433, 0.0]
- [0.6326026938666768, 0.3927390110768001, 0.6675102253082313, 0.0]
- [0.0, 0.0, 0.0, 1.0]
delta_pos: [0.0, 0.0, 0.0]
normal_angle: 0.0
radius: -3.3999999999999906

Con Ctrl-X se cierra el editor, se aceptan los cambios y se nombra al archivo Position_Backup.yaml Es importante recordar que este archivo debe estar en la carpeta o directorio del pyrovito.

*Ahora, se debe instalar el nuevo pyrovito con los datos recién agregados

make xstow_install

*Un ejemplo de Una visualización del pyrovito es la siguiente:

 pyrovito -r lwr --arm_right --arm_left --hand_right --hand_left -a ~/local/src/robot_descriptions/tum-rosie/kinematics/lwr/  -d ~/local/src/robot_descriptions/tum-rosie/kinematics/sahand/

Referencias: Pyrovito Code Sourse Pyyaml wiki PyYAML Documentation Dumping-collection-to-yaml-file-with-pyyaml YAML BOOK opengl yaml-parsing-and-python loading-serialised-object-from-yaml-and-replacing-current-object-with-it

teaching/ie0117/proyectos/2014/i/proyecto_1/pyrovito_position_backup.txt · Last modified: 2022/09/20 00:08 (external edit)