Sie sind auf Seite 1von 17

ESCUELA SUPERIOR POLITECNICA DEL LITORAL

FACULTAD DE INGENIERIA EN ELECTRICIDAD Y


COMPUTACION
CENTRO DE VISION Y ROBOTICA

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>

<node pkg="nxt_ros" type="nxt_ros.py" name="nxt_ros"
output="screen" respawn="true">
<rosparam command="load" file="$(find
learning_nxt)/robot.yaml" />
</node>
<node pkg="learning_nxt" type="my_nxt.py" name="my_nxt"
output="screen" respawn="true" />


</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 *

global gyro_once
global offset
offset = 0


def callback_gyro(msg):
offset = msg.calibration_offset.z
print "/////////////OFFSET %f"%offset,"//////////////////"
gyro_once.unregister()


def callback_imu(msg):
# calibrate_orientation_avelocity(msg.orientation.z,
msg.angular_velocity.z)
angle = msg.angular_velocity.z*180.0/math.pi
print rospy.get_name() + ": I heard oz:
%f"%msg.orientation.z," avz: %f"%msg.angular_velocity.z," angle:
%f"%angle
if angle-offset > 10.0 or angle - offset < -10.0:
writter_motors(-50)
time.sleep(2.00)
writter_motors(0)
quit()
else:
writter_motors(50)


def calibrate_orientation_avelocity():
Header header

geometry_msgs/Quaternion orientation
float64[9] orientation_covariance # Row major about x, y, z axes

geometry_msgs/Vector3 angular_velocity
float64[9] angular_velocity_covariance # Row major about x, y, z
axes

geometry_msgs/Vector3 linear_acceleration
float64[9] linear_acceleration_covariance # Row major x, y z

rospy.loginfo("Calibrating Gyro Orientation and z angular
velocity. Don't move the robot now")
start_time = rospy.Time.now()
cal_duration = rospy.Duration(2.0)
orientation = 0
avelocity = 0
count = 0
tmp_time = rospy.Time.now()
while rospy.Time.now() < start_time + cal_duration:
rospy.sleep(0.01)
sample_orientation = msg.orientation.z
sample_avelocity = msg.angular_velocity.z
now = rospy.Time.now()
orientation += sample_orientation
avelocity += sample_avelocity
count += 1
tmp_time = now
orientation = orientation / count
avelocity = avelocity / count
rospy.loginfo("Gyro calibrated with orientation
%f"%orientation," and z angular velocity %f"%avelocity)
# return orientation


def listener_gyro():
rospy.Subscriber("gyro_imu",Imu, callback_imu)
rospy.spin()


def writter_motors(effort):
pub = rospy.Publisher('joint_command', JointCommand)
pub.publish(JointCommand("l_wheel_joint",effort))
pub.publish(JointCommand("r_wheel_joint",effort))


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

roslaunch learning_nxt robot.launch
rosmake learning_nxt






















7. PROBLEMAS ENCONTRADOS

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

Das könnte Ihnen auch gefallen