TORCS es un proyecto de software libre,escrito en C++ y multiplataforma, que simula la física necesaria para efectuar carreras de coches. Soporta OpenGL para representar los modelos y dispone de muchos circuitos de todo tipo, al igual que coches de muy diferente tipología. También soporta entrada por volante, joystick, ratón o teclado.
Hasta aquí no hay nada nuevo, pero ¿y si os dijera que permite programarte tus propios robots para que piloten esos coches? Aunque el proyecto lleva un tiempo sin actualizarse, merece la pena echarle un vistazo y exprimir su potencial en un entorno mucho más complejo que el de Robocode, que ya vimos anteriormente.
Programar estos robots sí representa un reto muy serio y nada fácil, teniendo que controlar muchísimas variables y teniendo que respetar unas reglas en el juego, estamos hablando de palabras mayores.
TORCS funciona en Linux, MacOS, Windows y FreeBSD así como en cualquier sitio donde podamos compilar las fuentes y que dispongan de las librerías (y compatibilidad) necesarias. Junto con la instalación se nos incluirán las pistas por defecto, organizadas en Road, Oval y Dirt (Carreteras, óvalos y rallies) así como una decente colección de coches a los que podemos sumar más coches de rallies, GT's, roadsters y deportivos, todos de la década de los 60. Si estamos en Linux, TORCS está como paquete en la mayoría de distribuciones importantes, así que es la instalación más sencilla desde nuestro gestor de paquetes favorito.
Un primer vistazo
Si nos fijamos, en el directorio donde tenemos TORCS hay un fichero que llama poderosamente la atención de todo friki automovilístico: trackeditor
Pues sí, es justamente eso, un editor de circuitos muy rudimentario pero que cumple perfectamente su cometido. En el directorio "doc" hay un tutorial que cubre en pocas páginas todo lo necesario para su uso, es simple pero eficaz. Las pistas se crean en ficheros de formato AC3D y XML, donde se definen los parámetros básicos de la pista, las texturas y la geometría.
Los coches están bajo el directorio "cars" y se definen de una manera parecida a las pistas: el modelo está hecho en AC3D y su comportamiento se encapsula y define en un fichero XML.
Los parámetros principales SIN componente física de dicho XML son:
section name="Driver"
: posición del piloto dentro del coche.section name="Sound"
: sonido del coche en WAV, así como la escala de las RPM del motor para definir cómo reproducirlo.section name="Graphic Objects"
: que contiene toda la información de tacómetros,velocímetros,etc.
Por otra parte, tenemos los parámetros que SÍ definen el comportamiento físico del coche, que están dentro de la sección , de los cuales podemos destacar:
body length,body width y body height
: Dimensiones del coche, indispensable para calcular, junto al resto de componentes, datos tan importantes como la transferencia de masas y, junto a esta, la adherencia de las ruedas bajo carga.overall length y overall width
: dimensiones de la caja de colisiones.mass,mass repartition coefficient,front-rear weight repartition,etc
: coeficientes de reparto de masas.Aerodynamics,Front Wing,Rear Wing
: configuración de carga aerodinámica así como el coeficiente aerodinámico general del coche.Engine
: donde se engloban inertia,data points (para el Torque) y muchos datos más.Gearbox
: con los ratios de la caja de cambio para cada marcha.Steer
: con la configuración del volante y ratio de dirección.
La lista es demasiado larga, pero aún faltan cada una de las ruedas por separado, las suspensiones, los frenos, las barras anti-roll, etc. Como vemos esto es de todo menos sencillo, imaginad ahora programar un robot que sea capaz de reaccionar en un entorno tan complejo, tan variable, no controlado totalmente por nosotros. Y tengamos en cuenta que nuestros robots deberán poder pilotar cualquier tipo de coche con cualquier tipo de configuración de la manera más eficiente posible.
En el próximo artículo veremos cómo afrontar este reto y en qué se resume a nivel de API un entorno tan rico y complejo como este.
Más información | TORCS en Sourceforge