Robótica

Sistemas de Coordenadas Variantes no Tempo

Rotações variantes no tempo
Para caracterizar uma rotação no espaço, utilizamos um vetor . A direção do vetor é o eixo de rotação, e sua magnitude, a taxa de variação da rotação em torno do eixo.
A derivada de uma matriz de rotação variante no tempo é
Onde e é uma matriz anti-simétrica, que, para o caso em 3 dimensões, é:
S = skew([1,2,3])
S =
0 -3 2 3 0 -1 -2 1 0
vex(S)
ans =
1 2 3
Movimento Incremental
Dadas duas poses e , nós podemos representar a diferença entre elas por um vetor de 6 elementos, 3 referentes à translação e 3 referentes à rotação:
T0 = transl(1,2,3)*trotx(1)*troty(1)*trotz(1);
T1 = T0*transl(0.01,0.02,0.03)*trotx(0.001)*troty(0.002)*trotz(0.003)
T1 =
0.2889 -0.4547 0.8425 1.0191 0.8372 -0.3069 -0.4527 1.9887 0.4644 0.8361 0.2920 3.0301 0 0 0 1.0000
d = tr2delta(T0, T1);
d'
ans =
0.0100 0.0200 0.0300 0.0010 0.0020 0.0030
delta2tr(d) * T0
ans =
0.2903 -0.4521 0.8434 1.0100 0.8376 -0.3061 -0.4524 2.0200 0.4627 0.8378 0.2898 3.0300 0 0 0 1.0000
Sistemas de Navegação Inercial
É comum "deesnormalizar" as matrizes após sucessivas integrações em sistemas de navegação inercial, por exemplo. Para realizar a normalização de matrizes:
T0= trnorm(T0);
O equivalente para quatérnios da equação da derivada da rotação é a seguinte:
Ao ter as 3 componentes da velocidade angular, e isso obtemos ao utilizar IMUs, podemos obter o quatérnio referente ao deslocamento:
qd = UnitQuaternion.omega([1,2,3]);
Com isso, integramos à uma frequência bem alta para obter o deslocamento do frame. Tal integração desnormaliza o quatérnio, e, para normalizar o quatérnio, fazemos:
q = qd.unit();