Noticias:

¿Cansado de tu avatar? AQUI TIENES DONDE ELEGIR

Menú Principal

Dudas giroscopicas

Iniciado por Minipepito, 23 de Marzo de 2010, 10:01:51 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Jetro

El archivo que has subido a Megaupload no sirve tal como está. Para que podamos usarlo tienes que usar la opción Pack&Go de NXT-G que incluye toda la información necesaria como (en este caso) los MyBlocks necesarios para que un programa funcione. (Tools > Create Pack and Go...)

Asimismo, mientras el programa total (o la compresión en zip) no pese más de 192kb puedes adjuntarlo directamente a tu siguiente mensaje

Minipepito

Cambiado el enlace a un programa sin blocks.

Jetro

Estoy leyendo el programa, pero hay algunas cosas que no acabo de entender....
Vayamos por partes.

Para inicializar variables no hace falta escribir una valor mediante otro bloque. Lo puedes hacer directamente desde el panel de configuración de cada variable. Así para resetear Calibrar simplemente puedes escribir el valor 0 en ese panel del bloque que usas para resetearlo y listo.

Lo mismo va para la variable 'verdadero'

A continuación pones en marcha el motor y acto seguido haces una lectura del giroscopio con el offset (diferencia) obtenido anteriormente. Luego vuelves a usar la Diferencia para sumarla a la lectura obtenida, pero de ese modo anulas la corrección que acabas de hacer! ¿Puedes explicar porqué haces eso?

Siempre es buena idea añadir anotaciones al código para que pasado un tiempo puedas saber fácilmente porqué en un determinado momento decidiste hacer algo de X manera... y para que otros entiendan porqué el código se ha escrito así ;)




Una cosa. Si tienes NXT-G 2.0 ¿podrías hacerme el favor de crear un Pack and Go tanto del programa con MyBlocks como el otro? - quiero comprobar algo sobre el comportamiento de variables al trasladar programas a otro equipo. Gracias de antemano.

Minipepito

Gracias por lo de las variables, jejeje, estaba seguro de que posteando el programa iba a depurarse y mejorar mucho.

El porqué de volver a sumar el offset, no lo entiendo, pero explicaré por qué lo añadí y qué efecto tiene.

  Fue la segunda respuesta de jetro en este post  la que me hizo realizar ese cambio, y no me pidáis explicaciones al respecto, pues no lo entiendo ni yo. El caso es que si no lo sumas en los giros hacia el  + o lo restas en los giros al -, suma en grados el offset por cada cantidad de giro fijo, en mi caso, cada 60 grados hacia el + y cada 30 al -. Como la cantidad de grados en mi caso, son múltiplos de mi offset(15), estoy casi seguro de que hay una regla más precisa.

Ahí va el programa empaquetado: http://www.megaupload.com/?d=PCL5UTV2

Intentaré mejorar las explicaciones dentro del programa o_o.


Jetro

No he tenido tiempo de analizar el código más allá de algunas pautas básicas de programación.

Hay una diferencia muy notable entre el archivo rbt y el rbtx. Este último se crea con el Pack and Go y con ese método me es posible acceder a las variables usados en el programa como si fuesen míos mientras que de la otra manera las variables no me muestran el panel de configuración correcto y no aparecen en mi lista de variables creados.

De momento lo único que he hecho es simplificar el código para que veas que puedes conseguir el mismo resultado con la mitad de bloques (entre configuración de variables y otros cambios que podrás ver en este programa.

Espero que puedas acceder a la descarga porque he tenido que esperar 6 horas para poder descargar la tuya.
http://www.megaupload.com/?d=XEFUAWR2

Cuando comentes el programa incluye también una descripción general de lo que se supone que hace el programa. De lo contrario es muy difícil saber si efectivamente hace lo que debe.

Minipepito

El arreglo que propones, ya lo intenté en su día con idénticos resultados, el robot se para al comezar a girar, de nuevo no sabría explicar el porqué, jejeje, por lo que volvemos al programa como estaba antes.

Cita de: Jetro en 27 de Marzo de 2010, 22:58:39 PM
Cuando comentes el programa incluye también una descripción general de lo que se supone que hace el programa. De lo contrario es muy difícil saber si efectivamente hace lo que debe.
No sé si lo que me pides es que comente su funcionamiento dentro del programa, pues si te refieres a que simplemente diga que hace, ya lo expliqué en el post en el que aparcece por primera vez el programeja
Cita de: Minipepito en 27 de Marzo de 2010, 00:00:20 AM

Aquí, una pequeña aplicación, http://www.megaupload.com/?d=KATU8RYV, que hace que unas orugas giren 90 grados en sentido positivo, pero si algo detiene el giro por completo antes de llegar a los 90 grados,  los motores se paran.

Jetro

No encuentro en el programa ninguna función que compruebe si el robot se ha girado 90º. El giroscopio solo indica con qué velocidad estás girando, no detecta cuantos grados has girado. Para saber eso tienes que calcular cuanto tiempo estuviste girando a X velocidad y calcular la distancia aunque te advierto que ese calculo va a ser muy poco preciso.

En cuanto a la descripción del programa. Efectivamente me refiero a que lo incluyas dentro del mismo programa. Puedes hacerlo de la manera más efectiva pinchando en el icono del NXT al principio de la barra de secuencia donde colocas los bloques NXT-G.

En cuanto a los cambios que hice, eliminando un número considerable de bloques. Ahora mismo te da igual, pero te aseguro que medida que vas haciendo programas más grandes querrás usar el mínimo número de bloques para evitar que la interfaz de programación se vuelva lenta por la cantidad de datos que maneja y para que el programa te quepa en el NXT. El programa que hace para el Mastermind pesaba unos 64kb compilado y la memoria del NXT es de 256kb de los cuales unos 125kb son usados por el firmware  (un poco menos con FW v1.29). Añade a ello que cuanto más grande el programa (=más bloques usa) más tarda en compilarse. Con el Mastermind me desesperaba cada vez que tenía que descargar una pequeña modificación.


WiWaEdu

Para ir contrastando mas valores, con el programa inicial de Minipepito a mi me da un valor de "-10" donde a el le daba 15 y carlichi obtenía 4

Como puedo saber la velocidad a que esta girando, mirando la pantalla es imposible!!!!! (Cuando gira rápido, claro.)

PD: ¿Esto últimos programas que estáis subiendo no se pueden ver con NXT-G v1.1?
||

Jetro

Cita de: wiwaedu en 29 de Marzo de 2010, 17:04:09 PM
Como puedo saber la velocidad a que esta girando, mirando la pantalla es imposible!!!!! (Cuando gira rápido, claro.)
Tienes varias maneras. Una es accionar el sensor mediante un motor que no está unido al NXT

Otra opción es la de mantener emparejado el NXT con el PC medianta Bluetooth. Si seleccionas un bloque sensor giroscópico en NXT-G podrás ver en la pantalla del PC el valor de este.

Finalmente puedes guardar el valor del giroscopio a intervalos determinados en un bloque de archivo (File Block) y descargartelo al PC después de la prueba para analizar los datos.

CitarPD: ¿Esto últimos programas que estáis subiendo no se pueden ver con NXT-G v1.1?
NXT-G 2 dispone de una función Pack&Go (que crea ficheros rbtx) que hace un paquete completo de todos los datos necesarios para poder usar un programa en otro PC: MyBlocks, sonidos, imágenes etc. Pero el archivo rbtx también se puede abrir con un descompresor estándar (WinRar por ejemplo). Contiene un archivo ini que se puede abrir luego con un editor de texto (notepad) para ver dónde tienen que ir los diferentes elementos que se encuentran en el archivo comprimido para que todo funcione bien.

Minipepito




Cita de: Jetro en 28 de Marzo de 2010, 17:19:25 PM
No encuentro en el programa ninguna función que compruebe si el robot se ha girado 90º

Que no la encuentres, no quiere decir que no esté, jejeje... Como me quería asegurar que parara al llegar a los 90 grados, no le digo al robot que pare cuando llegue a los 90, si no que pare cuando pase de 89, esta, es una de las dos condiciones para salir del bucle. Ahí, puedes cambiar el número de grados que quieres que gire, pero recuerda que el programa funciona girando en positivo y con un offset positivo.

En lo referente al número de grados que gira, ese fue el origen de este post, "mi giroscopio marca que gira estando parado"
Cita de: Minipepito en 23 de Marzo de 2010, 23:40:13 PM
Perdón por no haber mencionado que conocía la necesidad de calibrar y añadir el offset en las mediciones siguientes. Aquí adjunto el enlace de la página oficial, que calibra el giroscopio y nos marca la velocidad de rotación en grados/segundo:
http://www.hitechnic.com/file.php?f=836-Gyro_Test.zip

A continuación, el enlace a una pequeña modificación mía en la que muestra los grados totales que gira:
http://www.megaupload.com/?d=FHX0LMPW

Entiendo perfectamente que el giroscopio hay que calibrarlo, de hecho dará una lectura inicial distinta en mi pueblo (+ de 600m de altitud) que si la tomaramos al nivel del mar. Pero, que estando en reposo,  marque una velocidad de 15 grados por segundo, me parece exagerado, cuando antes de calibrarlo entiendo que no tendría que marcar nunca más de +-1 grado/segundo.

Y la única manera que tengo de saber si todos los giroscopios de hitechnic están tan "gyrolocos" como el mío, es si, dos o tres de vosotros, hermanos en el ladrillo, publicáis el resultado que leeréis en la pantalla del nxt, si ejecutáis el programa que se puede descargar del enlace a megaupload del primer post, o aquí, que es el mismo, jejeje:
http://www.megaupload.com/?d=FHX0LMPW

El único lenguaje que sé usar y uso es Nxt-G. De nuevo, muchas gracias por vuestra colaboración.

Aquí, ya adjunté una aplicación para medir los grados que gira, y al comprobar que contiunamente iba aumentando el número de grados con el giroscopio en reposo, llegué a la conclusión de que el giroscopio estaba roto, conclusión que hoy ha sido ratificada por el equipo técnico de la tienda donde lo adquirí, pues al conectar varios giroscopios a mi ladrillo y ejecutar el programa del que estoy hablando, no sumaban ningún grado por lo menos durante 10 ó 15 segundos (como ya nos comentó carlichi en su día), cuando el ex-mío hubiera sumado al menos un grado cada segundo como tantas veces apunté. Se ha pasado  a mi ex-giroscopio por una serie de pruebas que ha desarrollado el  equipo técnico, dando errores en todas ellas. Pero la prueba irrefutable que nos ha convencido a todos los presentes, ha sido la siguiente:

Se colocan el giroscopio a comprobar y el giroscopio de referencia, sobre una superficie horizontal, separados unos 25 cm el uno del otro.
Se sujeta firmemente cada uno con una de nuestras manos.
Se levantan hasta colocarlos uno al lado de cada oreja.
Se agitan sin demasiada intensidad.
El que suena como unas maracas, está roto.

    Jajajaja, ¿cómo iba yo a saber que no tenía que hacer ningun ruido? ¡¡¡Si nunca tuve uno...!!! jajajaja.... Ya tengo mi giroscopio nuevo y nadie  ha salido herido.

Wiwaedu, el dato al que te refieres, es el offset, el cual no tiene mayor importancia, se calibra y "ya ta", jejeje.

Jetro

#40
Me alegro que tu tenacidad haya resultado en que finalmente se ha detectado que tu giroscopio efectivamente estaba estropeado. A lo largo de los mensajes me ha costado a veces separar la desviación (offset) de la deriva (drift) y como a veces me ha dado la sensación de que una cosa se mezclaba con otra no acababa de ver que efectivamente estaba estropeado. Buen detalle el de la detección. Habrá que apuntarlo.

En cuanto al programa. ya había visto tus 89º/s pero me parece que está confundiendo dos cosas. Lo que tu quieres es detectar cuando el robot ha completado un giro de 90º, pero el giroscopio te va a indicar cuando el robot está girando a 90º por segundo.

Para que veas esa diferencia, coloca el giroscopio, como ya has hecho tantas veces, en la mesa en reposo y mira la lectura que te da en pantalla. Ahora gíralo suavemente 90º y dejalo de nuevo en reposo. Observarás que las lecturas aumentan mientras estás girando, pero (si lo haces suavemente) nunca llegan a 90 y que cuando dejes el giroscopio nuevamente en reposo la lectura vuelve a ser de 0.

Para hacerlo de esta manera necesitas una brújula, no un giroscopio.

C0n el giroscopio es posible calcular la distancia recorrida, pero para ello deberás hacer una media de las lecturas obtenidas y luego multiplicarlo por el tiempo que ha durado el giro para eliminar los segundos de la lectura del giroscopio (1º/s*1s=1º).

Minipepito

#41
Cita de: Jetro en 30 de Marzo de 2010, 06:57:13 AM
A lo largo de los mensajes me ha costado a veces separar la desviación (offset) de la deriva (drift) y como a veces me ha dado la sensación de que una cosa se mezclaba con otra no acababa de ver que efectivamente estaba estropeado.
Debido a mi inexperiencia, no supe disociar una cosa de  la otra, pero si que muchas veces recalcaba, que mi programa, el cual indica los grados girados y no la velocidad, me indicaba que estaba girando al añadir grados al total continuamente.

Aquí ha estado tu error y el de la tienda: al dar por normal el offset, dabáis por normal el resultado de este programa http://www.megaupload.com/?d=FHX0LMPW sin haberlo probado ninguno de los  que dabáis el resultado por normal. Los únicos que lo probaron, fueron  carlichi y wiwaedu, cuyos resultados me reafirmaron en el convencimiento del funcionamiento anómalo de mi ex-sensor.

No sé cuantas veces he repetido ya en este post, que el programa arriba indicado y mi rutina de giro, calculan  el número total de grados que se ha girado, y de la única manera que conozco, multiplicando el tiempo por la velocidad angular. Pero voy a repetirlo de nuevo y por última vez, pues si alguien no se entera ahora, queda claro  que, o no presta interés a lo que escribo, o toma por falsas sin hacer ninguna prueba al respecto mis afirmaciones sobre el funcionamiento de mis  programas.

Los dos programas subidos por mí hasta el momento, los dos, los dos, los dos, calculan los grados totales que se ha girado, multiplicando la velocidad (datos que salen por el giroscopio) por el tiempo transcurrido, 0,01 segundos en los dos programas. En su día, el programa incorporaba un contador de tiempo que se reseteaba después de cada medición y posterior cálculo de grados girados, pero como el tiempo calculado así, siempre era igual al  tiempo que le digo al programa que espere entre repetición del bucle y repetición, opté por suprimirlo y usar como medida de tiempo el tiempo marcado por mí.


Coloco mi giroscopio en la mesa como ya he hecho tantas veces, lo giro 90 grados hacia la derecha, lo dejo quieto y marca 90, si ahora lo giro 180 grados hacia la izquierda y lo dejo parado de nuevo, me marca -90, espero que con este ejemplo quede claro que ya desde el principio del post, mis programas calculan los grados totales que gira, siendo valores postivos al girar a la derecha y negativos  al girar a la  izquierda.

Las brújulas, sirven para marcar al norte magnético  por lo que el cálculo de grados se haría tomando al norte magnético como punto de referencia, tras lo cual calcularíamos nuestra posición inicial y final y en su diferencia estaría el número de grados girados. Con un giróscopo es mucho más sencillo, pues el punto de referencia lo pones donde te apetezca, pudiendo hacerlo coincidir con la posición inicial, lo que simplifica enormemente los cálculos. De hecho, en la actualidad, un tipo de giroscopio modificado que apunta siempre al norte geográfico, hace ya tiempo que sustituyó a las brújulas en todo lo referente a navegación.

Espero que entienda todo el mundo por qué pedía con tanta insistencia que no respondiera gente sin giroscopio hasta que se resolviera lo ya resuelto, pues sin un giroscopio en la mano es muy difícil analizarlo, como aquí está quedando patente.

Edit Me he dado cuenta de que si el tiempo se baja de 0,05 segundos, mi estimación sin el uso de un reloj empieza a dar fallos evidentes en el cálculo de grados. No me había dado cuenta antes porque el programa que calcula los grados totales y los muestra en pantalla tiene un tiempo de 0,1.