Transformaciones

Translation2d

Las operaciones en un Translation2d llevan a cabo operaciones en el vector representado por Translation2d.

  • Adición: La adición ente 2 Translation2d a y b se puede lograr usando plus en Java, o el operador + en C++. Adición suma los 2 vectores.

  • Substracción: Substracción entre dos Translation2d puede lograrse usando minus en Java, o el operador binario - en C++. Substracción resta los dos vectores.

  • Multiplicación: La multiplicación de un Translation2d y un escalar puede lograrse usando times en Java el operador * en C++. Esto multiplica el vector por el escalar.

  • División: La división de un Translation2d y un escalar puede lograrse usando div en Java, o el operador / en C++. Esto divide el vector entre el escalar.

  • Rotación: La rotación de un Translation2d por una rotación contraria a las manecillas del reloj \(\theta\) sobre el origen puede ser logrado al usar rotateBy. Esto es equivalente a multiplicar el vector por la matriz \(\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}\)

  • Adicionalmente, usted puede rotar un Translation2d 180 grados al usar unaryMinus en Java, o el operador unario - en C++.

Rotation2d

Las transformaciones para Rotation2d son solo operaciones aritméticas en la medida del ángulo representadas por Rotation2d.

  • plus (Java) o + (C++): suma el componente de rotación de other al componente de rotación de éste``Rotation2d``.

  • minus (Java) o el binario - (C++): Sustrae el componente de rotación de other al componente de rotación de éste Rotation2d.

  • unaryMinus (Java) o el unario - (C++): Multiplica el componente de rotación por un escalar de -1.

  • times (Java) o * (C++) : Multiplica el componente de rotación por un escalar.

  • div (Java) o /: Divide el componente de rotación por un escalar.

Transform2d y Twist2d

WPILib proporciona 2 clases, Transform2d (Java, C++), que representa una transformación a una pose, y Twist2d` (Java, C++) que representa un movimiento a lo largo de un arco. Tanto``Transform2d`` como Twist2d tienen componentes x, y y \(\theta\).

Transform2d representa una transformación relativa. Tiene un componente de rotación y traslación. Transformar un Pose2d por un Transform2d rota el componente de traslación de la transformación por la rotación de la pose, y entonces suma el componente de traslación y el componente de rotación de la pose. En otras palabras, Pose2d.plus(Transform2d) regresa \(\begin{bmatrix} x_p \\ y_p \\ \theta_p \end{bmatrix}+\begin{bmatrix} cos\theta_p & -sin\theta_p & 0 \\ sin\theta_p & cos\theta_p & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix}x_t \\ y_t \\ \theta_t \end{bmatrix}\)

Twist2d representa un cambio en distancia a través de un arco, Usualmente, esta clase es usada para representar el movimiento de un tren motriz, donde el componente x es la distancia frontal manejada, el componente y es la distancia manejada hacia un lado (Izquierda positiva), y el componente \(\theta\) es el cambio de rumbo, La matemática subyacente detrás de encontrar la pose exponencial (Posición nueva tras moverse de frente a traves de la curvatura del giro) puede ser encontrada aquí en el capítulo 10.

Nota

Para trenes motrices no holonómicos, el componente y de Twist2d debe siempre ser 0.

Ambas clases pueden ser usadas para estimar la posición del robot. Twist2d es usado en las clases odométicas de WPILib para actualizar la pose del robot basado en movimiento, mientras que Transform2d puede ser usado para estimar la posición global del robot por los datos de visión.