2011-04-05 22 views
6

Estoy intentando mover un robot con una brújula. Usamos la brújula para hacer que el robot se mueva en línea recta, usa 2 ruedas y se mueven un poco diferente. Así que establecemos un valor entre 0 y 359 como dirección, y luego verificamos la dirección actual, calculamos el error y lo solucionamos. Como error = current_direction - dirección real.Brújula: de 359 a 0 grados

El problema es que si, por ejemplo, nuestra dirección init es de 90 grados y nuestro robot está en 45, el error será 45 y lo arreglará. Si es 0, el error será 90 y lo arreglará. El problema es que si se mueve un poco más que 0 y va, por ejemplo, a 359, el error será -269, así que en lugar de mover 90 en una dirección, se moverá -269 en la otra.

Uso el signo del error para decidir qué rueda mover para fijar la dirección. alguna idea de cómo solucionarlo?

Respuesta

6
if (error > 180) { 
    error -= 360; 
} 

if (error < -180) { 
    error += 360; 
} 
+3

Una vez tuve un robot que podía confundirse tanto que tuvimos que cambie esos 'if's a' while's: D –

+0

@Jakub Hampl: ¿Lo llamó Dizzybot? : D – Piskvor

2

si su error es mayor a 180 °, debe hacer un rack desde 360 ​​e invertir el letrero. Al hacerlo, puede estar seguro de que su robot siempre se moverá en la dirección más corta.

1

Si su error es> 180 grados simplemente cambie su algoritmo de corrección para calcular la corrección moviéndose en la dirección opuesta. Una simple declaración if-else debería hacer.

1

No sé mucho sobre NXT y Mindstorm, pero básicamente es un problema común en movimientos circulares. Simplemente podría usar dos sistemas de coordenadas diferentes y traducir entre sí, esa es la manera más elegante. De lo contrario, podrías restar 360 de tu error, si el signo es negativo, pero eso es un truco y no una forma elegante de resolver el problema ;-)

+0

Hmmm, coordenadas polares? Elegante, pero creo que podría ser más lento de calcular (especialmente en una plataforma incrustada). – Piskvor

+0

Sí, podría tener razón, ya que las cosas incrustadas son en su mayoría cosas altamente pirateadas, pero no creo que NXT esté tan incrustado; ;) – tamasgal

+2

Estaba pensando en términos de velocidad de la CPU y todo lo que viene con eso. Aunque no estoy muy familiarizado con la arquitectura, no creo que NXT tenga un quad-core i5 @ 2.8GHz, ¿verdad? Supongo que la velocidad sería de decenas de MHz, cientos al máximo. Sí, eso es más de lo que mi computadora tenía hace veinte años, pero aún tienes que tomar el rendimiento en serio bajo tales restricciones. – Piskvor