Distance per frame

Como sabéis los mas asiduos, he pasado los 3 últimos meses intentando crear un vídeo RLV para el rodillo Fortius. En mi ultimo post, afinando aún mas los RLV, parecía que por fin había conseguido mi propósito, pero no. Debido a un incompleto entendimiento de uno de los conceptos fundamentales de los RLV, mis vídeos nunca estaban bien sincronizados con el perfil de la etapa.

El concepto en cuestión es el de “distance per frame“. Los archivos RLV tienen unos registros que se llaman así. Se componen de un número de frame y un valor que indica la distancia que es necesario recorrer con el rodillo a esa altura del vídeo para que se pase al siguiente frame.
Este dato se calcula a partir de la velocidad a la que nos movíamos mientras se grabó el vídeo y su tasa de frames por segundo, por ejemplo, si he grabado un tramo a 50Km/h, que son 13,8m/s y el video fue grabado a 25fps, en ese tramo el valor de distancia por frame será de 13,8 / 25 = 0,555 metros por frame.
Me he pasado semanas haciendo números, porque yo entendía que desde un registro hasta el siguiente el valor de distancia por frame se mantenía constante… y ademas no se me ocurría ninguna otra posibilidad.
Pregunté por el tema a Phil, el que hace los videos oficiales, y no obtuve ninguna respuesta (no les hace gracia que la gente haga sus propios vídeos). Pregunté a B. Maesen (Wesp_im), el que hace las camisetas oficiales del VR y aunque el no sabía nada, me puso en contacto con Hannes Schellnast, un Austriaco que ha hecho un par de vídeos a mano, usando una variante del sistema de hojas de cálculo de Carsten Jost.
El ha sido quien, después de investigar un poco se ha dado cuenta de una cosa muy importante. Desde un registro de distance per frame a otro, el valor de distancia NO se mantiene constante, sino que se interpola desde el valor de origen hasta el de fin. Una vez entendido esto, ya he podido corregir mi conversor para que saque unos valores de distance per frame adecuados.

Frame number Distance per Frame
0 0,5
1 0,5
8 1
9 1
Esto es lo que yo pensaba que ocurría:
Lo que yo pensaba que ocurria
Y esto lo que ocurría en realidad:
Lo que que ocurria en realidad

Como se ve, el valor de distancia por frame varía de forma lineal en el intervalo que no está definida, es decir, entre el frame 2 y el 7. Esto explica todos los comportamientos anómalos que obtenía en mis pruebas ya que en cuanto creaba un registro nuevo, mis valores estimados de velocidad no coincidían con los que al final calculaba el software de Fortius y todo se desfasaba.

En palabras del propio Hannes: “Teóricamente la distancia cubierta se calcularía vía una integral desde el frame 1 hasta el 9. En nuestro caso hemos interpolado valores discretos para los puntos de distancia por frame. Esto significa que no usaremos integración gracias a que los saltos entre frames son discretos y no infinitesimales. Supongo que el algoritmo que usa Tacx calcula la nueva distancia cubierta para cada paso de frame al siguiente con el valor de distancia por frame interpolado. Hay que tener en cuenta que la dependencia entre frames y distancia cubierta no será lineal para el rango de frames entre el 1 y el 9. Debido al uso de valores de frame discretos se produce un pequeño error de cuantización respecto al valor que saldría con un cálculo teórico basado en integrales. Este error es tan pequeño que se puede despreciar.”


Distancias recorridas

Ahora ya comprendido el funcionamiento he cambiado la generación de los .rlv y parece que todo coincide, casi a la perfección. A Hannes le debo una y probablemente le envie un regalito, ¿alguna sugerencia de algo que enviarle que no se rompa de aqui a Austria?

12 comentarios en “Distance per frame

  1. Pep

    Tu tio tendrías que estar en la Nasa pero ya!

    Te felicito Makinolo! Por tu perseverancia, empeño y inteligencia. Me muero de ganas por correr la etapa..

    Tu web está pero que muy bien! he mirado videos, escuchado música, visto consejos de todo tipo… me encanta.

    Nos vemos!

  2. Rafa Rios

    Enhorabuena Makinolo, por tu trabajo y por tu pagina web, muchos tendrían que aprender de ti.

    Un saludo

  3. Makinolo Autor del post

    Pep, si yo estuviera en la NASA no formarían astronautas a la suficiente velocidad para reemplazar los que palmarían por mi culpa jajaja

    Gracias a todos por vuestras palabras, ánimos y donaciones 😉

  4. xavi

    Buenas Makinolo, me he comprado un tacx fortius, y llevo un tiempo x la red “investigando” que es todo lo que se puede hacer con el, encontré tu web por casulidad, y relamente hay que darte la enhorabuena porque no queda gente que se lo curre, lo comparta y a un nivel como el tuyo. Eres el puto amo del planeta tierra!!!!!!!!!!!!!!!!
    Animo y RVL a tope

  5. Makinolo Autor del post

    Hola Xavi, gracias por tus palabras. Si te acabas de comprar el fortius y aun no conoces nuestra página de la liga en español, ya estas tardando en apuntarte!!
    http://web.ciclismovirtual.com

    Alli podrás encontrar el RLV de la subida al puerto de la cruz verde que ha sido el primero. Dentro de poco publicaré otro y en cuanto llegue el buen tiempo intentaré grabar mas.

  6. chus

    Gran trabajo, si necesitas un voluntario para grabarte los grandes puertos asturianos ( angliru, lagos de covadonga, subida al naranco, el acebo, etc ) aqui tienes uno que los tiene todos a menos de 50kms de su casa.

    Intentaria hacerlos yo, pero no se si sere capaz.

  7. Makinolo Autor del post

    Bueno, si consigues un buen video y un track GPS del recorrido me los pasas y montamos las subidas, aunque la verdad es que prefiero ir yo y de paso darme un homenaje gastronómico por la zona jajaja

  8. N.E.V.

    Hola Makinolo. A ver si me puedes dar un poco de luz…
    Tengo un Tacx Flow. La comunicación entre el rodillo (el freno que va ne la rueda) y el panel de control (que va en el manillar) se hace mediante un cable de 6 hilos (conector tipo RJ). Mi idea es sustituir el panel de control que va ne el manillar por el ordenador, comunicando el rodillo con el pusto pararelo del ordenador y programar luego en VB6 para que me haga etapas preprogamadas. ¿Tienes idea de como se hace la comunicación entre el rodillo y el panel de control? En un principio pense que sería algo sencillo, por ejemplo un pulso para la cadencia de pedaleo, otro para la velocidad y 4 para codificar la posición del freno electromagnetico (que tiene 14 posiciones, desde -4 hasta +9). Pero entonces me salen 7 cables (los 6 que he dicho más un común) por lo que no parece que sea tan simple. Si alguien sabe algo… yo con un multimetro he estado enredando pero no he conseguido sacar nada claro… Muchas gracias.

    PD: el tacx Flow y el i-magic son iguales para lo que estoy preguntando, por si alguien sabe algo.

  9. Makinolo Autor del post

    Hola. Lo que tratas de hacer no lo veo muy factible. Yo tambien en su dia estuve midiendo con un multímetro las señales de los cables y llegué a la conclusión de que habia un par de hilos para la cadencia, otro par para la velocidad (mediante pulsos como bien dices) pero el resto no supe identificarlos aunque si tuviera un poco mas de conocimientos de electrónica moderna, me atrevería a decir que usa 2 hilos para una comunicacion I2C o similar (comunicacion serie) para pasarle la información de la dureza a algun tipo de microcontrolador que controla la corriente que pasa por los electroimanes.
    Creo que es mas sencillo para lo que quieres encontrar la descripción de las estructuras de datos y las llamadas a la DLL del driver del rodillo que sustituir la propia pieza de hardware. Eso si, que sea mas sencillo no significa que yo las tenga… ya me gustaría 🙂

  10. Makinolo Autor del post

    Tengo algo de información que me acaba de llegar que te puede resultar util:

    Pin number Function
    1 Cadence signal
    2 Ground
    3 Brake pulse signal
    4 50Hz or 60Hz synchronize signal
    5 +Vdd
    6 Speed signal

    La numeración de los pines va de izquierda a derecha mirando el conector de la consola.
    No se que tipo de señal hay que mandar por el pin 3 para controlar la cantidad de frenado, por lo que parece el freno no lleva ninguna electrónica compleja (no lleva micro). El pin 4 sirve basicamente para saber si el freno está enchufado a la corriente y a que tipo de red (50 o 60hz) me imagino que para modular la señal del pin 3 que será la que activa los electro imanes.

  11. g.

    Hola, es curioso que al intentar hacer el proceso inverso, calcular la distancia en un punto dado del recorrido según la información de frames en el rlv, se obtienen resultados mucho más precisos si se interpolan únicamente si el distanceperframe siguiente es inferior al distanceperframe anterior, y si es igual o superior no se interpola y se toma el distanceperframe anterior. Casi es perfecto, en la inmensa mayoría de los rlvs que he probado. No sé si es que debe ser así, o si la desviación según la técnica usada en la interpolación (la lineal, la única de la wikipedia que consigo entender) se comporta así. Un saludo.

  12. g.

    Nada, ni caso a mi anterior comentario. Equivocado todo, menos mal que nadie lo habrá leído.

Deja un comentario

Tu dirección de correo electrónico no será publicada.