2015-01-19 7 views
1

몸체와 네 개의 Revolute Joints로 구성된 캐릭터가 포함 된 JBox2D를 사용하여 간단한 시뮬레이터를 만들었습니다. 문제가 생겼습니다 : 관절 각, 관절 속도 및 몸통 위치/회전 속도/각속도 목록이 주어지면이 캐릭터의 '자세'를 정확히 복원해야합니다.RevoluteJoint 각도와 속도를 정확히 설정하려면 어떻게해야합니까?

몸체 상태에 편리한 게터와 세터가 있지만, 관절 각을 그들이 필요한 위치 (움직이는 물체)로 강제 변환하는 좋은 방법을 찾을 수 없습니다. 이 사이트의 몇 가지 솔루션은 조인트를 원하는 각도로 움직이게하는 조인트 모터를 얻으려고 기본적인 피드백 시스템을 설정하는 것이 좋지만이 방법은 부정확하고 집중적으로 계산되는 것처럼 보입니다. 나는이 값들을 직접 설정하는 방법을 찾는 것이 이상적이다.

최후의 수단으로 순방향 운동을 사용하여 모든 번역 및 회전을 직접 계산할 수 있지만 더 쉬운 방법이있을 수 있습니다.

도움을 주시면 감사하겠습니다. 감사.

답변

0

관절은 본질적으로 자신의 각도 나 속도를 가지고 있지 않습니다. GetJointAngle과 GetJointSpeed ​​(see the source)를 호출 할 때 얻는 결과를 결정하는, 그들이 연결하는 두 몸체의 상대적 각도와 속도입니다.

따라서 접합 부분에 이러한 것들을 설정하는 직접적인 방법이 있습니다. 그 관절과 관련된 신체의 각과 속도, 각속도 등을 설정해야합니다.

+0

모든 연결된 몸체의 위치 (속도, 각도, 각속도, 즉 [x, v, \ theta, \ omega])와 관절 속성 (각도, 각속도)이 주어진 경우, 다른 모든 것에 대해 [x, v, \ theta, \ om] 튜플을 풀 수 있어야합니다. setTransform() 및 다른 setter를 사용하면 다음 시뮬레이션 틱에서 접합점에 문제가 발생합니까? – amm

+0

아니요, 설정하는 것이 의미가있는 한 (이전에 실행중인 시뮬레이션에서 값을 복원하는 경우)해야합니다. – iforce2d