1

안녕하세요. 3 축의 시작 각을 알고있는 3D 모델이 있습니다. 그 각도는 이러한 패턴 (information found here)을 사용하는 방향 코사인 행렬로 변환된다 :평평하게하는 방법 - 방향 코사인 행렬에서 축을 무시 하시겠습니까?

DCM

새로운 시간 모델의 방향의 갱신에 대응하여 간다 값이 얻어지는 각도. 고려하여 그 새로운 값을 위해, 나는 이런 식으로 그와 함께 DCM을 업데이트 :

newDCM = oldDCM * newanglesDCM 

내가 원하는 것은 내가 그것을 할 방법 : 이제 까다로운 부분. 저는 실제로 회전 행렬의 Y 구성 요소 만 원합니다. 모델에 모션을 적용하려면 모션 벡터가 대기 또는 지상으로 이동하지 않도록 평면화해야합니다. 이렇게하려면 회전 행렬에서 3 개의 각도를 뒤로 당기고 각도가 [0 Y 0] 인 새로운 각도를 만듭니다.

문제 : 모델에 회전이 적용되면 DCM이 업데이트됩니다. 모션이 감지되면 모션 벡터 [0 Yvalue 0]에 평면화 된 DCM이 곱해진다 (이전 설명에 따라). 결과는 순간 회전에 null 또는 null 값이 X 및 Z 구성 요소에있는 경우 매우 유용합니다. 그러나 모델이 X와 Z가 중요한 값을 갖는 상황에 도달하면 모델 동작의 "방향"이 잘못됩니다. "유일한 Y"상황으로 돌아가는 회전을 적용하면 다시 좋은 상태로 시작됩니다.

무엇이 잘못 될 수 있습니까 : 내 방향 코사인 행렬이 잘못되었거나 행렬을 평평하게하기 위해 사용하는 기법이 완전히 어리 석습니다.

도움을 주셔서 감사합니다.이 문제를 해결해 주시면 감사하겠습니다. 그렉.

편집 : 예 요청

내 모델로는 3 축 X, Y가 있고 모델은 정지시 Z. 이것은 XYZ 규칙을 정의합니다. 출발점 t0에서 모델을 원래 구성에서 t0에있는 모델로 회전시킬 수있는 각도 dAx, dAy 및 dAz를 알 수 있습니다. 그게 너라면, 모델이 t0에서 쉬었다고해도 상관 없다.

나는 이미지에서 설명한 것처럼 DCM을 생성합니다 (휴면시 시작된 항등 매트릭스).

때때로 모델에 회전이 적용됩니다. 그 회전은 또한 dAx, dAy 및 dAz로 이루어집니다. 따라서 새롭게 생성 된 것으로 newValue = oldDCM * newanglesDCM을 곱하여 회전 행렬 (DCM)을 업데이트합니다. 이제 모델을 점에서 점으로 이동하려고합니다. 그리드가 거리 같은 것을 상상해보십시오. 모델이 하늘을 향한 것이 든, 앞이나 옆을 향하고 있든 상관없이, 나는 모션을 동일하게하고 싶습니다. 도로를 따라 가며 공중에서 올라 타거나 땅으로 뛰어 들지 마십시오. 회전 행렬을 그대로 유지 한 상태에서 [0 Y 0] 회전을 적용하면 원하지 않는 곳으로 이동하게됩니다. 따라서 DCM을 평평하게하여 기존 XZ 프레임을 찾으려고합니다. 그렇다면 여전히 Y 구성 요소가 있으므로 거리에서 모델이 움직이는 위치를 알 수 있습니다.

머리를 모델로하고 누가 밖에 나가고 있는지를 상상해보십시오. 그가 건물의 창문을보고 걸을 경우 그는 창문까지 공중에서 걸어 가지 않을 것입니다 - 그는 건물의 발에 걸어 갈 것입니다.그게 바로 내가하고 싶은 것입니다 : D

+1

이것은 math.stackexchange.com에 대한 질문과 비슷합니다. 임의의 추측 : DCM을 업데이트 할 때 매트릭스를 곱합니까? 그렇다면 앵글을 저장 한 다음 이전 각도로 Y 회전을 추가하고 행렬을 재구성하는 방법은 무엇입니까? 짐발 잠금 장치에 포함 시켰습니까? 문제가 짐벌 잠금 (Google 정보) 때문에 quaternion 기반 회전 메커니즘을 사용할 수 있습니다. – akaltar

+0

정말로 무엇을하려고하는지 이해하지 못합니다. 예제를 제공하고 'XYZ' 축 협약을 설명해 주시겠습니까? – ja72

+0

행렬의 XYZ가 임의의 회전 축이라고 생각합니다. 이것은 임의의 축을 중심으로 회전하는 것처럼 보입니다. – akaltar

답변

0

당신이해야 할 것은 요소별로 요소의 요소 두 회전 행렬

E_1 = Rx(dθx)Ry(dθy)Rz(dθz) 

E_2 = Rx(dφx)Rz(dφz)Ry(dφy) 

을 동일시이다. sin(dφy)cos(dφy) 만 포함하는 두 개의 전자 기호를 찾아 dθx, dθydθz으로 환산하여 tan(dφy)=...으로 나눕니다.

주어진 DCM을 사용하여이 작업을 시도했지만 보유한 회전 순서를 복제 할 수 없습니다. 위의 내 E_1은 비슷하지만 일부 기호가 다릅니다. 내 예에서 내가 한 것을 나는 다음과 같은 식을 당신이 사용하는 순서에 따라 자신의 관계를 해결해야

dφy=atan(tan(dθy)/cos(dθz)) 
dφz=atan((cos(dθy)*sin(dθz))/(cos(dθy)*cos(dθz)*cos(dφy)+sin(dθy)*sin(dφy))) 
dφx=atan((cos(dθx)*sin(dθy)*sin(dθz)+sin(dθx)*cos(dθz))/(cos(dθx)*cos(dθz)- ... 

을 얻었다.

참고 : dφy가 위의 E_1 = E_2 평등을 알면 dφz에 대한 해결 한 다음 dφx에 대한

Rx(dφx) = Rx(dθx)Ry(dθy)Rz(dθz)Ry(-dφy)Rz(-dφz) 

을 가지고있다

Rx(dφx)Rz(dφz) = Rx(dθx)Ry(dθy)Rz(dθz)Ry(-dφy) 

이되고있다.

관련 문제