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 usandoplus
en Java, o el operador+
en C++. Adición suma los 2 vectores.Substracción: Substracción entre dos
Translation2d
puede lograrse usandominus
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 usandotimes
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 usandodiv
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 usarrotateBy
. 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 usarunaryMinus
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 deother
al componente de rotación de éste``Rotation2d``.minus
(Java) o el binario-
(C++): Sustrae el componente de rotación deother
al componente de rotación de ésteRotation2d
.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.
Transform2d y Twist2d
WPILib provides 2 classes, Transform2d
(Java, C++), which represents a transformation to a pose, and Twist2d
(Java, C++) which represents a movement along an arc. Transform2d
and Twist2d
all have x, y and \(\theta\) components.
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.