Pergunta

Gostaria de saber se é possível, como o Wiimote tem 3 acelerômetros, para converter os acelerômetros leituras para um vetor 3D.

Eu sei o truque ao extrato de inclinação / rotação, mas só usa os X e Z acelerômetros, e tem o problema de bloqueio do cardan.

O que eu gostaria é um vetor 3D completo, que pode ser convertida em uma representação de rotação quaternion.

Foi útil?

Solução

Pensando nisso ainda, os valores acelerômetros são os componentes do vetor que eu estava procurando ... Você só tem que expressar o arco mais curto entre um vetor de referência e este vector como um quaternion.

Por exemplo, se é um accel (normalizado) vector contendo os valores do acelerómetro:

reference = Vector3(0, 0, 1)
axis = crossp(accel, reference)
angle = acos(dotp(accel, reference))
q = Quaternion::from_xyzr(axis, angle)
rotation_matrix = q.matrix()

Eu escolhi {0, 0, 1} como o vetor de referência, porque é os valores dos acelerômetros na "posição de repouso" (Wiimote em uma mesa, apontando para você).

Isto dá o mesmo tipo de movimentos dos acelerómetros X / Z conversão de inclinação / rotação faz, mas sem bloqueio do cardan em posições verticais.

O único problema é que você não obter informações sobre rotações efectuadas no eixo gravidade terra ... Eu acho que isso é o que o MotionPlus é feita para.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top