문제

Wiimote가 3 가속도계를 가지고 있기 때문에 가속도계 판독 값을 3D 벡터로 변환 할 수 있는지 궁금합니다.

피치/롤을 추출하는 트릭을 알고 있지만 X와 Z 가속도계 만 사용하고 Gimbal Lock 문제가 있습니다.

내가 원하는 것은 전체 3D 벡터이며, 쿼터니언 회전 표현으로 변환 할 수 있습니다.

도움이 되었습니까?

해결책

더 생각하면 가속도계는 가치가 있습니다 ~이다 내가 찾고 있던 벡터의 구성 요소는 ... 기준 벡터 와이 벡터 사이의 가장 짧은 호를 쿼터니온으로 표현하면됩니다.

예를 들어, if accel 가속도계 값을 포함하는 (정규화 된) 벡터입니다.

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

{0, 0, 1}을 기준 벡터로 선택했습니다. 왜냐하면 "REST 위치"에서 가속도계의 값이기 때문입니다 (테이블 위의 Wiimote, 당신을 향한 Wiimote).

이것은 X/Z Accelerometers 피치/롤 변환과 동일한 종류의 움직임을 제공하지만 수직 위치에서 Gimbal 잠금 장치는 없습니다.

유일한 문제는 지구 중력 축에서 이루어진 회전에 대한 정보를 얻지 못한다는 것입니다. 이것이 모션 플러스가 만든 것 같아요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top