FUNDAMENTOS DE ROBOTICA PROFESOR: ING. WILTON AGILA PARALELO: 2 PROYECTO ROBOT OPERATION SISTEM UTILIZANDO EL GIROSCOPIO EN EL LEGO NXT
INTEGRANTES: Diego Robalino 201021698 Daniel Chiang 200511483 Christopher Baidal 200828325
FECHA: 18/AGOSTO/2013 NDICE
1. INTRODUCCIN .................................................................................................................... 3 2. QU ES ROS? ....................................................................................................................... 3 3. OBJETIVO DE ROS ................................................................................................................. 4 4. OBJETIVO DEL PROYECTO .................................................................................................... 5 5. TAREA A REALIZAR: .............................................................................................................. 5 6. PROGRAMACIN DESDE ROS DE LA TAREA A REALIZAR POR EL ROBOT TRIBOT NXT....................... 6 6.1. PROGRAMA DE COMUNICACIN BLUETOOTH. ......................................................................... 6 7. PROBLEMAS ENCONTRADOS ............................................................................................. 14 8. CONCLUSIONES Y RECOMENDACIONES ........................................................................... 16 9. BIBLIOGRAFIA: ....................................................................................................................... 17
1. INTRODUCCIN
ROS (Robot Operating System) proporciona bibliotecas y herramientas para ayudar a los desarrolladores de software crear aplicaciones robticas. Proporciona una abstraccin del hardware, de los controladores de dispositivos, las bibliotecas, visualizadores, paso de mensajes, gestin de paquetes, y mucho ms. 2. QU ES ROS?
ROS es un meta-sistema operativo de cdigo abierto para usar en robtica. Provee diferentes servicios que se esperaran de un sistema operativo, como abstraccin de hardware, control de dispositivos en bajo nivel, funciones que se usan comnmente, Comunicacin de procesos mediante mensajes y administracin por paquetes. Tambin incluye herramientas y libreras que permiten obtener, construir, escribir y ejecutar programas entre varios computadores. ROS es similar en algunas cosas con otros frameworks usados en robtica, tales como Player, Orocos, Yarp, Orca, Microsoft Robotics Studio, entre otros. ROS no es un framework en tiempo real, aunque s es posible integrarlo con cdigo en tiempo real, por ejempo el robot PR2 de Willow Garage usa un sistema que se encarga de transportar mensajes en tiempo real. Incluso se ha integrado con el toolkit de tiempo real de OROCOS.
3. OBJETIVO DE ROS
El objetivo de ROS no es ser un framework con las mejores caractersticas, en vez de esto, el objetivo principal de ROS es permitir el reusar de cdigo en la investigacin y el desarrollo de la robtica. ROS es un framework distribuido de procesos (llamados nodos) que permiten ser diseados y acoplados de una manera sencilla en tiempo de ejecucin. Estos nodos son organizados en packages y stacks, con lo que pueden ser fcilmente compartidos y distribuidos. 4. OBJETIVO DEL PROYECTO 1. Dar rdenes al robot TRIBOT NXT desde ROS mediante comunicacin inalmbrica (Bluetooth). 2. Programando el robot TRIBOT desde ROS: fomentar en el estudiante habilidades para aplicar los conocimientos adquiridos durante el curso en el desarrollo de una de las tareas de carcter interdisciplinario. 5. TAREA A REALIZAR:
Evitar volcamientos laterales: interesa que el robot Tribot se desplace de manera segura evitando volcamientos laterales. Para ello, el robot debe retroceder cuando detecta pendientes laterales superiores a 30. Procedimiento de implementacin de la tarea a realizar por el robot, incluir en el informe los archivos punto. Para implementar un nuevo robot NXT en ROS es necesario primero crear un nuevo paquete dentro de nuestro workspace que dependa de los paquetes rospy y nxt_ros para lo cual ejecutamos el siguiente comando:
una vez creado nuestro paquete sern necesario crear el archivo de configuracin de nuestro robot con extencion .yaml que sirve para indicarle a ROS el nombre de mi robot, en que puertos se encuentran conectados los diferentes tipos de sensores y actuadores, el nombre de cada uno y su respectiva frecuencia de operacin. Este archivo lo definiremos de la siguiente forma: roscreate-pkg learning_nxt rospy nxt_ros
Adicionalmente es necesario crear el archivo ejecutable de nuestro nuevo paquete que tiene extensin .launch que nos servir para definir que nodos deben ejecutarse y dentro de que paquete se encuentran cada uno de ellos. Adems podemos definir el archivo .yaml del que debern obtener cada nodo los parmetros con que deben ejecutarse. Este archivo lo definimos de la siguiente forma:
6. PROGRAMACIN DESDE ROS DE LA TAREA A REALIZAR POR EL ROBOT TRIBOT NXT 6.1. PROGRAMA DE COMUNICACIN BLUETOOTH.
Para poder utilizar de manera eficiente la conexin bluetooth fue necesario modificar el archivo en nxt_ros.py de la librera NXT-ROS para que la conexin se establezca usando la mac address del robot. <launch>
</launch> nxt_robot: - type: motor name: r_wheel_joint port: PORT_A desired_frequency: 1.5 - type: motor name: l_wheel_joint port: PORT_B desired_frequency: 1.5 - type: gyro name: gyro frame_id: gyro_link port: PORT_3 offset: 0 desired_frequency: 1.0 Los cambios necesarios fueron: 1. Importar la librera bluetooth de python.
2. En el main del archivo aadir el llamado a la funcin de conexin bluetooth que contiene esa librera envindole la mac address como parmetro.
3. Para ver la mac address del robot es necesario prenderlo, ir a la opcin de settings y seleccionar NXT Version y la direccin de la mac address es la que se presenta como ID
PROGRAMA DE LECTURA DEL SENSOR Y CONTROL DE LA TAREA A REALIZAR. La librera NXT-ROS en el instante que es ejecutada crea por defecto tpicos, en los cuales los diferentes sensores y actuadores escriben y leen informacin. Es as que para poder obtener la informacin de los sensores es necesario crear un nodo que se suscriba a los tpicos creados por la librera y de igual forma publique en los tpicos a los cuales la librera suscribe a los actuadores. Una vez inicializado el robot la librera NXT-ROS calibra el giroscopio y nos devuelve un valor offset (posicin angular inicial) que se va a utilizar como referencia ms adelante. Este valor es obtenido leyendo el tpico Gyro que utiliza el tipo de mensajes Gyro.msg que tiene el siguiente formato:
La funcin que controla al robot toma la velocidad angular devuelta por el giroscopio a travs del tpico Gyro_Imu utilizando el tipo de mensajes Imu.msg de mensajes que tiene el siguiente formato: Header header geometry_msgs/Vector3 calibration_offset geometry_msgs/Vector3 angular_velocity float64[9] angular_velocity_covariance
Para ello nosotros creamos el nodo my_nxt.py de la siguiente forma:
#!/usr/bin/env python import roslib; roslib.load_manifest('learning_nxt') import rospy import math import time from learning_nxt.msg import *
def main(): rospy.init_node('my_nxt') global gyro_once gyro_once = rospy.Subscriber("gyro",Gyro, callback_gyro) listener_gyro()
if __name__ == '__main__': try: main() except rospy.ROSInterruptException: writter_motors(0) pass
El nodo my_nxt.py utilizando la velocidad angular obtenida calcula el angulo actual de inclinacin del giroscopio. Si la diferencia entre el offset y el angulo calculado es mayor a 10 el robot retroceder durante un lapso pequeo de tiempo para evitar asi que se volqu lateralmente. Una vez que tengamos todo preparado compilaremos nuestro paquete ejecutando:
Finalmente pondremos a correr nuestro paquete utilizando el comando:
Si todo funciona bien el robot empezara a funcionar y veremos una salida como la siguiente:
Para efecto de este proyecto ensamblamos un nuevo diseo de robot por un modelo que utilice 2 ruedas de soporte a los costados de la parte trasera a manera de auto en lugar de una sola rueda central para obtener mayor estabilidad como se muestra en la siguiente imagen
No existen ejemplos en la documentacin del NXT-ROS acerca de cmo trabajar con la librera por lo cual fue necesario revisar el cdigo fuente de la librera. Fue necesario crackear la librera NXT-ROS para poder conseguir una conexin bluetooth ms estable debido a que por defecto la librera trata de conectarse con cualquier dispositivo bluetooth visible que se encuentre en el medio. La conexin bluetooth solo se pueden realizar con el dispositivo integrado en la computadora mientras que si intentamos usar un adaptador bluetooth no funciona debido a que se exede el tiempo de espera por coneccion establecido en la librera bluetooth. Cuando se opera mediante la conexin de bluetooth la frecuencia de adquisicin de datos no puede ser mayor a 1.5Hz.
Debido a que la adquisicin de datos es lenta fue necesario reducir el ngulo de trabajo del giroscopio de 30 a 10 grados. No existen ejemplos en la documentacin del NXT-ROS acerca de cmo trabajar con la librera por lo cual fue necesario revisar el cdigo fuente de la librera. La calibracin del giroscopio no es una buena referencia debido a que en el instante que el robot se detenga el giroscopio toma una nueva referencia independientemente de la posicin en que se encuentre. El diseo del tribot no era practico para este proyecto debido a que teniendo solo una rueda de soporte en la parte trasera el equilibrio del robot era muy inestable ante inclinaciones lo que provocaba que el robot llegue a volcarse antes de poder darle la orden de que retroceda
8. CONCLUSIONES Y RECOMENDACIONES
Se recomienda que antes de tomar este curso se debera haber tomado fundamentos de programacin. Se recomienda que la universidad de facilidad para practicar con los equipos en horarios fuera de clase Concluimos que la utilizacin de ROS nos permite programar al robot NXT de una forma mas robusta que utilizando el software NXT PROGRAMING.
9. BIBLIOGRAFIA:
[1] Foote, T. (2012). WritingPublisherSubscriber(python). Recuperado el 10 de Agosto del 2013, desde: http://www.ros.org/wiki/ROS/Tutorials/WritingPublisherSubscriber %28python%29