Diferencia entre revisiones de «Tutorial:ODE y robots modulares:Módulo»
(→Modelo de módulo) |
(→Modelo de módulo) |
||
Línea 73: | Línea 73: | ||
== Modelo de módulo == | == Modelo de módulo == | ||
[[Imagen:Module.png|thumb|400px|'''Figura 1''': El módulo empleado en este ejemplo]] | [[Imagen:Module.png|thumb|400px|'''Figura 1''': El módulo empleado en este ejemplo]] | ||
− | El módulo está formado por dos cuerpos, que denominaremos izquierdo y derecho. Tienen diferente masa y longitud, pero la altura y anchura son las mismas. | + | El módulo está formado por dos cuerpos, que denominaremos izquierdo y derecho. Tienen diferente masa y longitud, pero la altura y anchura son las mismas. Ambos cuerpos tienen como geometría un hexaedro. |
* '''Cuerpo izquierdo''': | * '''Cuerpo izquierdo''': | ||
** '''Masa''': MASS0 | ** '''Masa''': MASS0 | ||
Línea 80: | Línea 80: | ||
** '''Masa''': MASS1 | ** '''Masa''': MASS1 | ||
** '''Dimensiones''': W x L1 x H | ** '''Dimensiones''': W x L1 x H | ||
+ | La '''estructura de datos''' para representar el módulo está definida en el fichero '''module.h''': | ||
+ | |||
+ | struct MyModule { | ||
+ | dJointID joint; | ||
+ | dReal servo_ref_pos; | ||
+ | |||
+ | dBodyID body_left; | ||
+ | dGeomID geom_left; | ||
+ | |||
+ | dBodyID body_right; | ||
+ | dGeomID geom_right; | ||
+ | }; | ||
+ | |||
+ | Además de los dos cuerpos y sus correspondientes geometrías, la estructura tiene el identificador de la articulación y la posición angular en la que situar el servo: '''servo_ref_pos'''. | ||
== Funcionamiento del servo == | == Funcionamiento del servo == |
Revisión del 08:42 8 ene 2009
Contenido
Simulación de un módulo
|
|
|
Introducción
El siguiente paso para empezar a simular robots modulares es saber cómo implementar un servo. Construiremos un módulo constituido por dos cuerpos unidos mediante un servo. En la simulación de ejemplo, el usuario podrá establecer las posiciones de -90, 90 y 0 grados para este servo y verá cómo varían las posiciones relativas de los dos cuerpos.
Objetivo
- Aprender a simular un servo y construir nuestro primer módulo
Código
Programa principal | |
Creación y dibujo del módulo | |
Definición de las constantes. | |
Definición de los prototipos de modulo.cpp y las estructuras de datos. |
Compilación
Todos los ejemplos de este tutorial compilan tecleando "make". Sin embargo se describe a continuación cómo se compila directamente usando el GCC:
g++ -Iinclude -c -o servo_ex/servo.o servo_ex/servo.cpp g++ -Iinclude -c -o servo_ex/module.o servo_ex/module.cpp g++ -o servo servo_ex/servo.o servo_ex/module.o libdrawstuff.a -lm -lode -lX11 -lm -lGL -lGLU
Ejecución
Para probar el ejemplo, teclear:
./servo
Además de los mensajes impresos en pantalla por la drawstuff, aparecerá el siguiente menú:
Keys for moving the servo: 1: Set the servo angle to 90 degrees 2: Set the servo angle to 0 degrees 3: Set the servo angle to -90 degrees q: Quit
Por medio de las teclas '1', '2' y '3' el usuario puede establecer la posición del servo a 90, 0 y -90 grados respectivamente.
Capturas de pantalla
Visualización del módulo en las tres posiciones:
Vídeo
![]() |
video.mpg |
Modelo de módulo
El módulo está formado por dos cuerpos, que denominaremos izquierdo y derecho. Tienen diferente masa y longitud, pero la altura y anchura son las mismas. Ambos cuerpos tienen como geometría un hexaedro.
- Cuerpo izquierdo:
- Masa: MASS0
- Dimensiones: W x L0 x H
- Cuerpo derecho:
- Masa: MASS1
- Dimensiones: W x L1 x H
La estructura de datos para representar el módulo está definida en el fichero module.h:
struct MyModule { dJointID joint; dReal servo_ref_pos; dBodyID body_left; dGeomID geom_left; dBodyID body_right; dGeomID geom_right; };
Además de los dos cuerpos y sus correspondientes geometrías, la estructura tiene el identificador de la articulación y la posición angular en la que situar el servo: servo_ref_pos.
Funcionamiento del servo
Explicación del código
Enlaces
|
|
|