Diferencia entre revisiones de «Tutorial:ODE y robots modulares:Robot ápodo»

De WikiRobotics
Saltar a: navegación, buscar
(Modelo de control)
(Modelo de control)
Línea 137: Línea 137:
 
Para el control del robot usaremos la misma idea que para [[Tutorial:ODE y robots modulares:Configuración PP|la configuración PP]] del capítulo anterior: un '''modelo bioinspirado''' basado en '''generadores sinusoidales''' que hacen oscilar las articulaciones.
 
Para el control del robot usaremos la misma idea que para [[Tutorial:ODE y robots modulares:Configuración PP|la configuración PP]] del capítulo anterior: un '''modelo bioinspirado''' basado en '''generadores sinusoidales''' que hacen oscilar las articulaciones.
  
Se usan dos grupos de generadores, que denominaremos verticales y horizontales para controlar las articulaciones de cabeceo y viraje respectivamente. El esquema se muestra en la figura 2. Los generadores pares son los verticales y los impares los horizontales.  
+
Se usan dos grupos de generadores, que denominaremos verticales y horizontales para controlar las articulaciones de cabeceo y viraje respectivamente. El esquema se muestra en la '''figura 2'''. Los generadores pares son los verticales y los impares los horizontales.  
  
Las posiciones de referencia de los servos se calculan mediante las siguientes ecuaciones:
+
'''Las posiciones de referencia de los servos''' se calculan mediante las siguientes ecuaciones:
 
* '''Módulos verticales''':
 
* '''Módulos verticales''':
 
** <math>\varphi_{vi}\left(n\right)=A_{v}\sin\left(\frac{2\pi}{N}n+\frac{i}{2}\Delta\phi_{v}+\phi_{0}\right) </math>, para valores de i pares entre [0,MOD-1]
 
** <math>\varphi_{vi}\left(n\right)=A_{v}\sin\left(\frac{2\pi}{N}n+\frac{i}{2}\Delta\phi_{v}+\phi_{0}\right) </math>, para valores de i pares entre [0,MOD-1]

Revisión del 01:16 11 ene 2009

Desplazamiento lateral inclinado

Simulación de un robot ápodo del grupo cabeceo-viraje

Capítulo anterior
Índice

Introducción

En este ejemplo se simula un robot ápodo del grupo cabeceo-viraje de 16 módulos. El usuario puede establecer los diferentes modos de caminar mediante el teclado: línea recta, desplazamiento lateral, rotación, rodar, girar, etc. Para la generación de todos los movimientos se utiliza la misma técnica de generadores sinusoidales que en el ejemplo de la cocnfiguración PP.

Objetivo

  • Mostrar cómo mover un robot ápodo de cualquier número de módulos

Código

Programa principal
Creación y dibujo del robot
Definición de las constantes.
Definición de los prototipos de robot.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 snake_ex/snake.o snake_ex/snake.cpp
g++ -Iinclude -c -o snake_ex/robot.o snake_ex/robot.cpp
g++ -o snake snake_ex/snake.o snake_ex/robot.o libdrawstuff.a -lm -lode -lX11 -lGL -lGLU

Ejecución

Para probar el ejemplo, teclear:

./snake

Además de los mensajes impresos en pantalla por la drawstuff, aparecerá el siguiente menú:

Keys for selecting the gaits: 
1: Straight
2: Turning
3: Side-winding
4: Inclined side-winding
5: Flapping
6: S-shaped rotating
7: U-sahped rotating
8: Rolling
q: Quit simulation

Mediante las diferentes teclas se pueden seleccionar las 8 maneras de caminar del robot ápodo

Capturas de pantalla

Visualización del robot moviéndose de diferentes maneras:

Movimiento en línea recta
Desplazamiento lateral inclinado
La serpiente rodando

Vídeo

Snake video thumb.png video.mpg

Clasificación de robots ápodos

Snake classification.png
Figura 1: Clasificación de los robots ápodos: grupo cabeceo-cabeceo (izquierda), viraje-viraje (centro) y cabeceo-viraje (derecha)

Los robots ápodos se pueden clasificar en tres grupos dependiendo de la conexión entre sus módulos, como se muestra en la figura 1. Los grupos son: cabeceo-cabeceo, viraje-viraje y cabeceo-viraje.

En este capítulo se simula la locomoción de un robot ápodo del grupo cabeceo-viraje.

Modelo de robot

Figura 1: Modelo de robot. Unión de módulos de cabeceo y viraje (pinchar para ampliar)

El robot está constituido por la unión en cadena de MOD módulos, numerados desde el módulo 0 hasta el MOD-1. Los impares son de cabeceo y los pares de viraje. En la Figura 1 se muestra la geometría de los dos primeros módulos del robot, el 0 y el 1.

El robot está formado por:

  • MOD módulos iguales, de masa MASS y dimensiones (W,L,H).
  • MOD articulaciones, de cuales las impares son de cabeceo y las pares de viraje. Sus ejes de rotación son el x (1,0,0) y el z (0,0,1) respectivamente.
  • MOD+1 cuerpos:
    • El izquierdo y derecho están formados por una única geometría hexaédrica, de dimensiones (W,L/2,H) y masa MASS/2
    • Los cuerpos centrales están compuestos por la unión de dos geometrías hexaédricas. Tienen masa MASS y dimensiones (W,L,H)
    • 2*MOD geometrías, de dimensiones (W,L/2,H). Los cuerpos centrales tiene dos geometrías, denominadas 1 y 2,

Las posiciones de los elementos con respecto al origen de coordenadas son:

Cuerpo izquierdo: (0,-L/4,H/2)
Cuerpo derecho: (0, -MOD*L + l/4, H/2)
Cuerpo central i: (0, -L(i+1), H/2)
Articulación i (0, -iL-L/2, H/2)

Las dos geometrías de los cuerpo central están desplazadas -L/4 y L/4 a lo largo del eje y.

La estructura de datos está definida en el fichero robot.h:

struct MySnake {
  dJointID joint[MOD];       //-- Robot joints
 
  dBodyID body[MOD-1];       //-- Central bodies
                             //-- Every central body is composed of two boxes  
  dGeomID geom1[MOD-1];      //-- One in the left and another 
  dGeomID geom2[MOD-1];      //-- in the right
 
  dBodyID body_left;         //-- This is the body on the left of the snake
  dGeomID geom_left;         //-- and its geometry (a box)
 
  dBodyID body_right;        //-- This is the body on the right of the snake 
  dGeomID geom_right;        //-- and its geometry (a box)
 
  dReal servo_ref_pos[MOD];  //-- Reference positions for the servos
};

Modelo de control

Figura 2: Modelo de control para los robots ápodos del grupo cabeceo-viraje

Para el control del robot usaremos la misma idea que para la configuración PP del capítulo anterior: un modelo bioinspirado basado en generadores sinusoidales que hacen oscilar las articulaciones.

Se usan dos grupos de generadores, que denominaremos verticales y horizontales para controlar las articulaciones de cabeceo y viraje respectivamente. El esquema se muestra en la figura 2. Los generadores pares son los verticales y los impares los horizontales.

Las posiciones de referencia de los servos se calculan mediante las siguientes ecuaciones:

  • Módulos verticales:
    • <math>\varphi_{vi}\left(n\right)=A_{v}\sin\left(\frac{2\pi}{N}n+\frac{i}{2}\Delta\phi_{v}+\phi_{0}\right) </math>, para valores de i pares entre [0,MOD-1]
  • Módulos horizontales:
    • <math> \varphi_{hi}\left(n\right)=A_{h}\sin\left(\frac{2\pi}{N}n+\frac{\left(i-1\right)}{2}\Delta\phi_{h}+\Delta\phi_{v}+\phi_{0}\right)+o_{h} </math>, para valores de i impares entre [1,MOD-1]

Espacio de control

Espacio de formas

Explicación del código

Función Robot_new()

Función Robot_Render()

Función servos_sim()

Función sequence_generation()

Funciones Main y Command()

Enlaces

Capítulo anterior
Índice