Diferencia entre revisiones de «Curva serpentinoide»

De WikiRobotics
Saltar a: navegación, buscar
(Noticias)
 
(No se muestran 63 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
[[Imagen:Serpentinoide-portada.png|thumb|300px|]]
+
[[Imagen:Serpentinoide-portada.png|thumb|400px|Gráfica de una curva serpentinoide (''Click para ampliar'')]]
  
 
== Introducción ==
 
== Introducción ==
La '''curva serpentinoide''' la descubrió en 1976 el '''profesor Hirose''', cuando realizaba su tesis doctoral en el Instituto de tecnología de Tokyo. Investigaba la biomecánica de las serpientes para su aplicación a la construcción de robots.
+
La '''curva serpentinoide''' (o curva serpenoide, serpenoid curve en inglés) la descubrió el '''profesor Hirose''' en 1976 cuando realizaba su tesis doctoral en el Instituto de tecnología de Tokyo. Investigaba la biomecánica de las serpientes para su aplicación a la construcción de robots.
 +
 
 +
La curva serpentinoide es indispensable para el estudio y construcción de '''robots ápodos''' (gusanos y serpientes). El autor de este artículo la ha estudiado en su [[Juan Gonzalez:Tesis|tesis doctoral]] para aplicarla a la locomoción de estos robots.
  
 
En este documento se describe la '''curva/onda serpentinoide''', sus parámetros, sus propiedas y se presentan los '''scripts de Octave/Matlab''' que las implementan.
 
En este documento se describe la '''curva/onda serpentinoide''', sus parámetros, sus propiedas y se presentan los '''scripts de Octave/Matlab''' que las implementan.
Línea 12: Línea 14:
 
La curva serpentinoide es aquella cuya [http://es.wikipedia.org/wiki/Geometr%C3%ADa_diferencial_de_curvas#Curvatura_y_torsi.C3.B3n curvatura] ''varía sinusoidalmente con la distancia'' a lo largo de la curva. Su '''curvatura''' está dada por la ecuación:
 
La curva serpentinoide es aquella cuya [http://es.wikipedia.org/wiki/Geometr%C3%ADa_diferencial_de_curvas#Curvatura_y_torsi.C3.B3n curvatura] ''varía sinusoidalmente con la distancia'' a lo largo de la curva. Su '''curvatura''' está dada por la ecuación:
  
<math>K(s) =  -\frac{2\pi k}{l}\alpha\sin\left(\frac{2\pi k}{l}s\right)</math>
+
{| {{tablabonita}}
 +
|<math>K(s) =  -\frac{2\pi k}{l}\alpha\sin\left(\frac{2\pi k}{l}s\right)</math>
 +
| ('''ec. 1''')
 +
|}
  
 
donde:
 
donde:
Línea 34: Línea 39:
  
 
{| {{tablabonita}}
 
{| {{tablabonita}}
| [[Imagen:Serpenoid-continuous-alpha-range.png|thumb|300px|'''Figura 1''': Forma de la curva serpentinoide para diferentes valores del ángulo de serpenteo (<math>\alpha</math>) (click para ampliar)]]
+
| [[Imagen:Serpenoid-continuous-alpha-range.png|thumb|300px|'''Figura 1''': Forma de la curva serpentinoide para diferentes valores del '''ángulo de serpenteo''' (<math>\alpha</math>) (click para ampliar)]]
| [[Imagen:Serpenoid-continuous-alpha-max.png|thumb|220px|'''Figura 2''': Curva serpentinoide de ángulo de serpenteo (<math>\alpha</math>) máximo. Se muestran dos ondulaciones (k=2) (click para ampliar)]]
+
| [[Imagen:Serpenoid-continuous-alpha-max.png|thumb|220px|'''Figura 2''': Curva serpentinoide de '''ángulo de serpenteo''' (<math>\alpha</math>) máximo. Se muestran dos ondulaciones (k=2) (click para ampliar)]]
 +
|}
 +
 
 +
==== Variación de la forma con <math>\alpha</math> ====
 +
 
 +
{| {{tablabonita}}
 +
| [[Imagen:Serp continuous alpha anim.gif]]
 +
 
 
|}
 
|}
  
 
=== Número de ondulaciones (k) ===
 
=== Número de ondulaciones (k) ===
 +
El '''parámetro k''' determina el número de ondulaciones de la curva serpentinoide.
 +
 +
En la '''figura 3''' se han representado tres curvas con el mismo valor del ángulo de serpenteo (<math>\alpha=70</math>) y misma longitud pero con diferentes valores de k. Al aumentar k, aumenta el número de ondulaciones, disminuye la altura pero la anchura permanece constante
 +
 +
{| {{tablabonita}}
 +
| [[Imagen:Serpenoid-continuous-k-range.png|thumb|300px|'''Figura 3''': Forma una curva serpentinoide de longitud l para diferentes valores del '''parámetro k''', manteniendo fijo el valor de <math>\alpha</math> a 70 (''click para ampliar'')]]
 +
|}
 +
 +
==== Variación de la forma con k ====
 +
En la siguiente animación se muestra cómo varía la forma de una curva serpentinoide continua de longitud fija l=1 y ángulo de serpenteo <math>\alpha</math>=70 con el parámetro k.
 +
Se puede apreciar una propiedad muy importante: '''La anchura en el eje x NO varía con k'''
 +
{| {{tablabonita}}
 +
| [[Imagen:Serp continuous k anim.gif]]
 +
 +
|}
 +
 +
=== Longitud (l) ===
 +
 +
La longitud l de la curva determina su escala. En la '''figura 4''' se muestra una curva serpentinoide con valores fijos del ángulo de serpenteo (<math>\alpha</math>) y de las ondulaciones (k) pero con distintas longitudes. La forma es la misma, pero escalada.
 +
 +
{|
 +
 +
|[[Imagen:Serpenoid-continuous-l-range.png|thumb|300px|'''Figura 4''': Forma de la curva serpentinoide con valores fijos del ángulo de serpenteo  <math>\alpha=70</math> y k=1 para diferentes valores de la '''longitud l'''. La longitud determina la escala (''click para ampliar'')]]
 +
|}
 +
 +
=== Puntos de Interés ===
 +
[[Imagen:Serpenoid-continuous-important-points.png|thumb|400px|'''Figura 5''': Situación de los puntos de máxima y nula curvatura en una serpentinoide de k=2 y <math>\alpha</math>=70 (''click para ampliar'')]]
 +
 +
==== Puntos de curvatura 0 ====
 +
 +
Los puntos de la curva serpentinoide en los cuales la curvatura es 0 se calculan igualando la ecuación 1 a cero:
 +
 +
<math>K\left(s\right)=0\,\Longrightarrow\, s=0,\,\frac{1}{2}\frac{l}{k},\,\frac{l}{k},\,\frac{3}{2}\frac{l}{k},\,2\frac{l}{k},\,\ldots\frac{1}{2}\frac{l}{k}n</math> con n = 0, 1, 2 ...
 +
 +
==== Puntos de Máxima curvatura ====
 +
Los puntos donde la curvatura es máxima se calculan igualando la derivada del valor absoluto de la curvatura a cero:
 +
 +
<math>\frac{d\left|K\left(s\right)\right|}{ds}=0\,\Longrightarrow\, s=\frac{1}{4}\frac{l}{k},\,\frac{3}{4}\frac{l}{k},\,\frac{5}{4}\frac{l}{k},\ldots\frac{1}{4}\frac{l}{k}\left(2n+1\right)</math>
 +
 +
En la figura 5 se muestra la situación de estos puntos en una curva serpentinoide de dos ondulaciones y ángulo de serpenteo de 70 grados. Los puntos de mínima curvatura coinciden con los cortes con el eje x. Lo puntos de máxima curvatura coinciden con los puntos con valor absoluto de sus ordenadas mayores
 +
 +
=== Pendiente de la curva <math>\alpha_s</math> ===
 +
 +
[[Imagen:Serpenoid-continuous-alpha s.png|thumb|402px|'''Figura 6''': <math>\alpha_s</math> en diferentes puntos de la curva serpentinoide]]
 +
 +
Denotamos '''la pendiente del vector tangente''' a la curva por el punto '''s''' como '''<math>\alpha_s</math>'''
 +
 +
Por definición, la curvatura se define como el ritmo de cambio del vector unidad tangente a la curva, es decir:
 +
 +
<math>K(s)=\frac{d\alpha_{s}}{ds}</math>
 +
 +
A partir de esa ecuación calculamos la pendiente de la curva mediante integración:
 +
 +
<math>\alpha_{s}=\alpha+\int_{0}^{s}K(s)ds</math>
 +
 +
llegando a la expresión:
 +
 +
{| {{tablabonita}}
 +
|<math>\alpha_{s}=\alpha\cos\left(\frac{2\pi k}{l}s\right)</math>
 +
| ('''ec. 2''')
 +
|}
 +
 +
En la figura 6 se muestra el valor de <math>\alpha_s</math> sobre una curva serpentinoide. En los puntos de máxima curvatura <math>\alpha_s=0</math> y en los de curvatura nula |<math>\alpha_s</math>|=<math>\alpha</math>
 +
 +
=== Formulación en coordenadas cartesianas ===
 +
 +
[[Imagen:Serpenoid-continuous-cartesian-coordinates.png|thumb|402px|'''Figura 7''': Cálculo de las coordenadas cartesianas de un punto s de la curva serpentinoide]]
 +
 +
Las coordenadas cartesianas ''(x,y)'' de un punto ''s'' situado en la curva serpentinoide están dadas por las ecuaciones 3 y 4
 +
 
{| {{tablabonita}}  
 
{| {{tablabonita}}  
| [[Imagen:Icono_aviso.png]] En construcción].  
+
| <math>x\left(s\right)=\int_{0}^{s}\cos\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math>
 +
|'''ec. 3'''
 +
|----
 +
| <math>y\left(s\right)=\int_{0}^{s}\sin\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math>
 +
| '''ec. 4'''
 
|}
 
|}
  
=== Pendiente de la curva <math>\alpha_s</math> ===
+
Estas integrales no tienen solución analítica, pero pueden ser resueltas numéricamente.<br>
 +
 
 +
Para su '''deducción''' hay que fijarse en el dibujo de la figura 7. En ella aparece una curva serpeninoide y un punto genérico situado a una distancia s. Sus coordenadas son ''x(s)'', ''y(s)''. La pendiente a la curva por el punto ''s'' es <math>\alpha_s</math>. "Ampliando" el punto ''s'', vemos que está aproximado por un segmento de longitud ''ds'', que forma un ángulo <math>\alpha_s</math> con el eje ''x''. Las proyecciones de este segmento son:
 +
 
 +
* <math>dx=ds\ \cos\alpha_{s}</math>
 +
* <math>dy=ds\ \sin\alpha_{s}</math>
 +
 
 +
La abscisa del punto ''s'' se obtiene por tanto mediante la integración de los ''dx''. Luego se aplica la ecuación anterior para sustituir ''dx'' por ''ds'' y finalmente se aplica la ecuación 2:
 +
 
 +
<math>x\left(s\right)=\int_{0}^{s}dx=\int_{0}^{s}\cos\alpha_{s}ds=\int_{0}^{s}\cos\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math>
 +
 
 +
El razonamiento para obtener ''y(s)'' es similar.
 +
 
 +
=== Altura y anchura de la curva serpentinoide ===
 +
 
 +
TODO: formulas para h(alfa,k), w(alfa,k) y lambda(alfa,k)
 +
 
 +
 
 
{| {{tablabonita}}  
 
{| {{tablabonita}}  
 
| [[Imagen:Icono_aviso.png]] En construcción].  
 
| [[Imagen:Icono_aviso.png]] En construcción].  
 
|}
 
|}
  
=== Formulación ===
+
=== Scripts en octave/Matlab ===
 +
 
 
{| {{tablabonita}}  
 
{| {{tablabonita}}  
 
| [[Imagen:Icono_aviso.png]] En construcción].  
 
| [[Imagen:Icono_aviso.png]] En construcción].  
 
|}
 
|}
 
  
 
== Curva Serpentinoide Discreta ==
 
== Curva Serpentinoide Discreta ==
Línea 63: Línea 166:
 
|}
 
|}
  
 +
== Autor ==
 +
* [[Juan Gonzalez:Main| Juan González-Gómez]]
  
 +
== Licencia ==
 +
{|{{tablabonita}}
 +
| [[Imagen:Cc logo.png]] This work is licensed under a [http://creativecommons.org/licenses/by-sa/2.5/es/ Creative Commons Attribution-ShareAlike 2.5 Spain License].
 +
|}
  
 
== Repositorio ==
 
== Repositorio ==
Línea 74: Línea 183:
 
== Bibliografía ==
 
== Bibliografía ==
 
* S. Hirose. '''Biologically Inspired Robots (Snake-like Locomotor and Manipulator)'''. Oxford Science Press, 1993.
 
* S. Hirose. '''Biologically Inspired Robots (Snake-like Locomotor and Manipulator)'''. Oxford Science Press, 1993.
 +
* Juan Gonzalez-Gomez, "'''Robótica Modular y Locomoción: Aplicación a Robots Ápodos'''". Tesis doctoral. Universidad Autónoma de Madrid. Noviembre-2008 ([[Juan Gonzalez:Tesis|Más información]])
  
 
== Noticias ==
 
== Noticias ==
 +
* '''18/Enero/2015''': Página migrada a [https://github.com/Obijuan/My-Ipython-notebooks/tree/master/serpenoid-curve este python notebook] en github. Se puede visualizar [http://nbviewer.ipython.org/github/Obijuan/My-Ipython-notebooks/blob/master/serpenoid-curve/Serpenoid-Curve-es.ipynb desde este enlace]
 +
* '''28/Jun/2010''': Animación de la forma de la curva continua con el parámetro k
 +
* '''22/Jun/2010''': Animación de la forma de la curva continua con el parámetro alfa
 +
* '''15/Jun/2010''':
 +
** Script Octave de la curva serpentinoide migrado a Matlab
 +
** Documentación sobre los parámetros l, k y <math>\alpha</math>
 
* '''16/Enero/2009''': Creado repositorio y comenzada esta página
 
* '''16/Enero/2009''': Creado repositorio y comenzada esta página
  
 
[[Categoría:SVN]]
 
[[Categoría:SVN]]

Revisión actual del 13:02 18 ene 2015

Gráfica de una curva serpentinoide (Click para ampliar)

Introducción

La curva serpentinoide (o curva serpenoide, serpenoid curve en inglés) la descubrió el profesor Hirose en 1976 cuando realizaba su tesis doctoral en el Instituto de tecnología de Tokyo. Investigaba la biomecánica de las serpientes para su aplicación a la construcción de robots.

La curva serpentinoide es indispensable para el estudio y construcción de robots ápodos (gusanos y serpientes). El autor de este artículo la ha estudiado en su tesis doctoral para aplicarla a la locomoción de estos robots.

En este documento se describe la curva/onda serpentinoide, sus parámetros, sus propiedas y se presentan los scripts de Octave/Matlab que las implementan.

Curva Serpentinoide Continua

Definición

La curva serpentinoide es aquella cuya curvatura varía sinusoidalmente con la distancia a lo largo de la curva. Su curvatura está dada por la ecuación:

<math>K(s) = -\frac{2\pi k}{l}\alpha\sin\left(\frac{2\pi k}{l}s\right)</math> (ec. 1)

donde:

l Longitud de la curva. l>0
s Distancia a lo largo de la curva. <math>s\in\left[0,l\right]</math>
k Número de ondulaciones. k>0
<math>\alpha</math> Ángulo de serpenteo. <math>\alpha\in\left[0,121\right]</math>

Ángulo de serpenteo <math>\alpha</math>

El ángulo de serpenteo <math>\alpha</math> es la pendiente de la curva en el punto s=0 y determina la forma que tendrá la curva.

En la figura 1 se muestra la forma para ángulos de serpenteo de 0, 30, 60 y 90. Para <math>\alpha=0</math> es una recta situada sobre el eje x de longitud l. Al aumentar <math>\alpha</math> la curva se eleva, ganando en altura pero reduciéndose en anchura.

En la figura 2 se muestra la curva serpentinoide para <math>\alpha=121</math> grados, que es su valor máximo. A partir de ahí se producen colisiones entre los puntos de la curva.

Figura 1: Forma de la curva serpentinoide para diferentes valores del ángulo de serpenteo (<math>\alpha</math>) (click para ampliar)
Figura 2: Curva serpentinoide de ángulo de serpenteo (<math>\alpha</math>) máximo. Se muestran dos ondulaciones (k=2) (click para ampliar)

Variación de la forma con <math>\alpha</math>

Serp continuous alpha anim.gif

Número de ondulaciones (k)

El parámetro k determina el número de ondulaciones de la curva serpentinoide.

En la figura 3 se han representado tres curvas con el mismo valor del ángulo de serpenteo (<math>\alpha=70</math>) y misma longitud pero con diferentes valores de k. Al aumentar k, aumenta el número de ondulaciones, disminuye la altura pero la anchura permanece constante

Figura 3: Forma una curva serpentinoide de longitud l para diferentes valores del parámetro k, manteniendo fijo el valor de <math>\alpha</math> a 70 (click para ampliar)

Variación de la forma con k

En la siguiente animación se muestra cómo varía la forma de una curva serpentinoide continua de longitud fija l=1 y ángulo de serpenteo <math>\alpha</math>=70 con el parámetro k. Se puede apreciar una propiedad muy importante: La anchura en el eje x NO varía con k

Serp continuous k anim.gif

Longitud (l)

La longitud l de la curva determina su escala. En la figura 4 se muestra una curva serpentinoide con valores fijos del ángulo de serpenteo (<math>\alpha</math>) y de las ondulaciones (k) pero con distintas longitudes. La forma es la misma, pero escalada.

Figura 4: Forma de la curva serpentinoide con valores fijos del ángulo de serpenteo <math>\alpha=70</math> y k=1 para diferentes valores de la longitud l. La longitud determina la escala (click para ampliar)

Puntos de Interés

Figura 5: Situación de los puntos de máxima y nula curvatura en una serpentinoide de k=2 y <math>\alpha</math>=70 (click para ampliar)

Puntos de curvatura 0

Los puntos de la curva serpentinoide en los cuales la curvatura es 0 se calculan igualando la ecuación 1 a cero:

<math>K\left(s\right)=0\,\Longrightarrow\, s=0,\,\frac{1}{2}\frac{l}{k},\,\frac{l}{k},\,\frac{3}{2}\frac{l}{k},\,2\frac{l}{k},\,\ldots\frac{1}{2}\frac{l}{k}n</math> con n = 0, 1, 2 ...

Puntos de Máxima curvatura

Los puntos donde la curvatura es máxima se calculan igualando la derivada del valor absoluto de la curvatura a cero:

<math>\frac{d\left|K\left(s\right)\right|}{ds}=0\,\Longrightarrow\, s=\frac{1}{4}\frac{l}{k},\,\frac{3}{4}\frac{l}{k},\,\frac{5}{4}\frac{l}{k},\ldots\frac{1}{4}\frac{l}{k}\left(2n+1\right)</math>

En la figura 5 se muestra la situación de estos puntos en una curva serpentinoide de dos ondulaciones y ángulo de serpenteo de 70 grados. Los puntos de mínima curvatura coinciden con los cortes con el eje x. Lo puntos de máxima curvatura coinciden con los puntos con valor absoluto de sus ordenadas mayores

Pendiente de la curva <math>\alpha_s</math>

Figura 6: <math>\alpha_s</math> en diferentes puntos de la curva serpentinoide

Denotamos la pendiente del vector tangente a la curva por el punto s como <math>\alpha_s</math>

Por definición, la curvatura se define como el ritmo de cambio del vector unidad tangente a la curva, es decir:

<math>K(s)=\frac{d\alpha_{s}}{ds}</math>

A partir de esa ecuación calculamos la pendiente de la curva mediante integración:

<math>\alpha_{s}=\alpha+\int_{0}^{s}K(s)ds</math>

llegando a la expresión:

<math>\alpha_{s}=\alpha\cos\left(\frac{2\pi k}{l}s\right)</math> (ec. 2)

En la figura 6 se muestra el valor de <math>\alpha_s</math> sobre una curva serpentinoide. En los puntos de máxima curvatura <math>\alpha_s=0</math> y en los de curvatura nula |<math>\alpha_s</math>|=<math>\alpha</math>

Formulación en coordenadas cartesianas

Figura 7: Cálculo de las coordenadas cartesianas de un punto s de la curva serpentinoide

Las coordenadas cartesianas (x,y) de un punto s situado en la curva serpentinoide están dadas por las ecuaciones 3 y 4

<math>x\left(s\right)=\int_{0}^{s}\cos\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math> ec. 3
<math>y\left(s\right)=\int_{0}^{s}\sin\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math> ec. 4

Estas integrales no tienen solución analítica, pero pueden ser resueltas numéricamente.

Para su deducción hay que fijarse en el dibujo de la figura 7. En ella aparece una curva serpeninoide y un punto genérico situado a una distancia s. Sus coordenadas son x(s), y(s). La pendiente a la curva por el punto s es <math>\alpha_s</math>. "Ampliando" el punto s, vemos que está aproximado por un segmento de longitud ds, que forma un ángulo <math>\alpha_s</math> con el eje x. Las proyecciones de este segmento son:

  • <math>dx=ds\ \cos\alpha_{s}</math>
  • <math>dy=ds\ \sin\alpha_{s}</math>

La abscisa del punto s se obtiene por tanto mediante la integración de los dx. Luego se aplica la ecuación anterior para sustituir dx por ds y finalmente se aplica la ecuación 2:

<math>x\left(s\right)=\int_{0}^{s}dx=\int_{0}^{s}\cos\alpha_{s}ds=\int_{0}^{s}\cos\left(\alpha\cos\left(\frac{2\pi k}{l}s\right)\right)ds</math>

El razonamiento para obtener y(s) es similar.

Altura y anchura de la curva serpentinoide

TODO: formulas para h(alfa,k), w(alfa,k) y lambda(alfa,k)


Icono aviso.png En construcción].

Scripts en octave/Matlab

Icono aviso.png En construcción].

Curva Serpentinoide Discreta

El ángulo de doblaje varía de forma sinusoidal a lo largo del eje corporal:

Ángulo de doblaje

Icono aviso.png En construcción].

Autor

Licencia

Cc logo.png This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 Spain License.

Repositorio

Para obtener la versión actual del SVN:

svn co http://svn.iearobotics.com/serpenoid/trunk

Bibliografía

  • S. Hirose. Biologically Inspired Robots (Snake-like Locomotor and Manipulator). Oxford Science Press, 1993.
  • Juan Gonzalez-Gomez, "Robótica Modular y Locomoción: Aplicación a Robots Ápodos". Tesis doctoral. Universidad Autónoma de Madrid. Noviembre-2008 (Más información)

Noticias

  • 18/Enero/2015: Página migrada a este python notebook en github. Se puede visualizar desde este enlace
  • 28/Jun/2010: Animación de la forma de la curva continua con el parámetro k
  • 22/Jun/2010: Animación de la forma de la curva continua con el parámetro alfa
  • 15/Jun/2010:
    • Script Octave de la curva serpentinoide migrado a Matlab
    • Documentación sobre los parámetros l, k y <math>\alpha</math>
  • 16/Enero/2009: Creado repositorio y comenzada esta página