Mujoco 번역

DM wiki
Kim135797531 (토론 | 기여)님의 2020년 2월 17일 (월) 15:11 판
둘러보기로 이동 검색으로 이동

Solver 파라미터 (Solver parameters)

Computation 챕터의 Solver 파라미터 섹션에서 MuJoCo의 제약의 행동을 결정하는 수치 d, b, k의 수학적 알고리즘적 의미를 설명했다. 여기서 우리는 그것을 어떻게 설정하는지 설명한다.

설정은 '제약'을 갖고 있는 모든 MJCF 요소의 solref와 solimp attribute에 의해 간접적으로 완료된다.

이 파라미터들은 각 제약 또는 각 기본 클래스에 대해 조정되거나, 혹은 미설정 상태로 남겨둘 수 있다 - 그러면 MuJoCo는 아래에 나와 있는 내부 기본 값을 사용한다.

참고로 option에서 오버라이드 메커니즘도 가능하다; 런타임에 모든 접촉과 관련된 solver 파라미터를 바꾸는데 사용될 수 있어, 파라미터 세팅이나 수치 최적화에서의 연속적인 방법을 동적으로 실험할 수 있다.


여기서 우리는 한 개의 스칼라 제약에 초점을 둔다.

Computation 챕터에서와 조금 다른 표기법을 사용하여,

  • a1을 가속도,
  • v를 속도,
  • r을 위치 또는 유수 (마찰 차원에서 0으로 정의된다),
  • b와 k는 각각 스프링에서의 참조 가속도 aref = -b*v - k*r을 나타내기 위한 단단함, 댐핑을 나타낸다.
  • d는 상수 응답(임피던스),
  • a0은 제약 힘이 없을 때의 가속도라고 한다. (원래 가속도)

앞서 분석에서 우리는 제약 공간에서의 다이나믹스가 대략

  • a1 + d * (b v + k r) = (1 - d) * a0
  • 가속도 + 상수 * (단단함 * 속도 + 댐핑 * 위치) = (1 - 상수) * 원래 가속도

으로 나타냄을 밝혔다.

다시, 유저가 조정할 수 있는 파라미터는 d, b, k(상수, 단단함, 댐핑) 이다. 나머지 양들은 시스템의 상태이며 각 시간 스텝에서 자동으로 계산된다.


먼저 우리는 응답 상수 d에 대해 설명한다.

  • d는 반드시 0~1 사이여야 한다; 내부적으로 MuJoCo는 0.0001 ~ 0.9999로 자른다.
  • 이것이 solver가 a0과 aref 사이를 상호작용 할 수 있게 해준다.
  • 작은 d값은 부드럽고 약한 제약이고, 큰 d값은 강하고 딱딱한 제약이다.
  • 유저는 d를 상수로 설정하거나, 아니면 위치 의존적인 함수 d(r)로 설정할 수 있다.
    • 위치 의존적 응답은 물체 주변의 부드러운 접촉 레이어로 사용하거나, 혹은 큰 위반일수록 강해지는 equality 제약을 정의할 수 있다. (따라서 예제에서의 backlash를 근사할 수 있다)
    • 함수 d(r)의 모양은 요소별로 정의할 수 있는 solimp 벡터 파라미터로 정의할 수 있다.


solimp: real(5), "0.9 0.95 0.001 0.5 2"

다섯 개의 숫자는 (dmin, dmax, width, midpoint, power)이다. 이것은 함수 d(r)의 파라미터를 결정한다. (최소 d, 최대 d, 너비, 중간점, 차수)

MuJoCo 2.0 이전에서는 3개였으며, 거기에 함수의 형태를 결정하는 한 개의 추가 전역 옵션이 있었다.

MuJoCo 2.0에서는 이전 버전의 호환성을 유지하며 응답 함수를 확장했다.

이전 버전에서 앞의 3개만 설정 가능했고, 기본값은 똑같다.

뒤의 2개의 기본값은 이전 버전과 똑같은 함수의 모양 (시그모이드)를 생성한다.

  • 새롭게 정의된 뒤의 2개는 함수의 이동(shift)나 조여짐(skew)을 조정할 수 있다.
    • 아래 그림은 사실은 두 반사된 시그모이드(???)를 보여주고 있으며, 이는 응답 함수 d(r)이 r의 절대값에 의존하기 때문이다.
    • 이 유연성은 원격 접촉 힘에 대한 더 나은 조절을 하기 위해 추가되었으며, 또한 다른 제약을 위해서도 사용될 수 있다.
  • (함수를 생성하기 위한 다항 스플라인의) 차수는 1과 같거나 커야한다.
  • (반사 지점을 결정하는) 중간점은 0과 1 사이여야 하고, 단위는 너비이다.
    • 참고로 차수가 1이면, 함수는 중간점과 관계 없는 선형이 된다.

(그림)

이 그림은 가로 축의 r의 제약 위반에 대한 세로 축의 응답 d(r)를 보인다.

  • equality 제약에 대해서는, r은 제약 위반과 같다 (양수 또는 음수 가능).
  • 마찰 손실 또는 타원뿔의 마찰 차원에 대해서는, r은 항상 0이다.
  • 제한(limit), 타원뿔의 법선 방향, 사각뿔의 모든 법선 방향에 대해서는 r은 (제약 또는 접촉) 거리에서 제약이 활성화 되는 margin을 뺀 값이다; 접촉에 대해서 이 margin은 실제로 margin-gap이다.
    • 따라서 제한과 접촉 제약은 r이 음수일 때 활성화된다.


다음은 단단함 k와 댐핑 b에 대해 설명한다.

여기에서의 아이디어는 위의 질량-스프링-댐퍼 시스템에서의 시상수와 댐핑 비율에 대한 파라미터의 재조정이다.

"시상수"에 의해 우리는 자연 주파수 / 댐핑 비율 의 평균을 구한다 (???)

1차 다이나믹스를 가진 유수가 0인 제약이나 질량-스프링-댐퍼 분석은 적용하지 않는다 (???)

그런 경우에는 시상수는 등속의 지수 감쇠에 대한 rate 이며 (???) 댐핑 비율은 무시된다.

이 형식에서, MuJoCo 2.0은 단단함과 댐핑을 더 직접적으로 정의할 수 있는 2차 형식을 제공한다. (???)


solref: real(2), "0.02 1"

이 속성은 숫자의 부호에 의해 두 가지의 형식으로 결정된다.

  • 두 숫자가 둘 다 양수이면 (timeconst, dampratio) = (시상수, 댐핑 비율)로 결정된다.
    • 모든 MuJoCo에서 가능하다.
    • 이 경우 우리는 적절한 스케일링 후 k, b를 계산하기 위해 질량-스프링-댐퍼 모델을 쓴다.
    • 참고로 활성화된 (effective) 단단함 d(r)*k와 댐핑 d(r)*b는 거리 r에 대한 함수인 응답 d(r)에 의해 스케일 된다.
    • 따라서 우리는 d에 대한 스케일링을 완전히 되돌리기 전까지는 지정된 질량-스프링-댐퍼 속성을 항상 만족할 수는 없다. (???)
    • 하지만 스케일링을 완전히 되돌리는 것은 원하지 않을 것인데, 왜냐하면 그것은 상호작용 속성을 파괴할 것이고, 특히 제한 d=0이 더 이상 제약을 비활성화 하지 않는다.
    • 대신에 우리는 단단함과 댐핑을 스케일하여, 댐핑 비율을 상수로 유지하고, d(r)이 작아짐에 따라 시상수를 증가시킨다.
    • 스케일링 수식은
      • b = 2 / (dmax * timeconst)
      • 단단함 = 2 / (최대 d * 시상수)
      • k = d(r) / (dmax * dmax * timeconst * timeconst * dampratio * dampratio)
      • 댐핑 = d의 함수 / (최대 d의 제곱 * 시상수의 제곱 * 댐핑 비율의 제곱)
    • 시상수 파라미터는 시뮬레이션 타임 스텝보다 최소 2배 이상 커야 한다.
      • 아니면 시스템은 산술 integrator에 대해 너무 단단할 것이고 (특히 오일러 integration) 불안정할 것이다.
      • 이건 내부적으로 지켜지며, refsafe를 false로 하면 무시할 수 있다.
    • 댐핑 비율 파라미터는 보통 1로 설정한다. (치명적 댐핑???)
    • 작은 값은 under-댐핑 또는 통통 튀는 제약이 될 것이고, 큰 값은 over-댐핑되는 제약이 될 것이다.
  • 그 외는 (-stiffness, -damping) = (-단단함, -댐핑)으로 결정된다.
    • MuJoCo 2.0에서 도입되었다.
    • 이 것은 원상 회복(???, restitution)에 대한 더욱 직접적인 조정을 가능하게 한다.
    • 우리는 여전히 조금 스케일링을 적용하므로 같은 숫자들이 다른 응답들에 대해 사용될 수 있지만, 더 이상 스케일링이 r에 의존하지 않고 두 숫자는 더 이상 상호작용하지 않는다.
    • 스케일링 수식은
      • b = damping / dmax
      • 단단함 = 댐핑 / 최대 d
      • k = stiffness / (dmax * dmax)
      • 댐핑 = 단단함 / (최대 d의 제곱)

액추에이터 길이 범위 (Actuator length range)

MuJoCo 2.0에서, mjModel.actuator_lengthrange 필드는 액추에이터의 구동 가능한 길이의 범위를 담고 있다 (혹은 더 정확하게, 액추에이터의 전달 가능 범위).

이것은 밑에서 설명할 근육 액추에이터 시뮬레이션에 필요하다. 여기서는 actuator_lengthrange의 의미 및 설정법에 촛점을 맞춘다.

정확한 물리적 혹은 기하학적 양인 mjModel의 다른 필드와는 다르게, actuator_lengthrange는 추정값이다.

이 값은 직관적으로 생각하면 모델의 모든 "구동 가능한" 조합들에 대해서의 액추에이터의 전달력이 도달할 수 있는 길이를 의미한다.

하지만 MuJoCo의 제약은 soft 방식이므로, 원칙상 어떤 조합도 구동 가능하다고 할 수 있다.

이와 동시에 우리는 근육 모델링을 위해 잘 정의된 범위도 필요하다.

이 범위를 정하기 위한 방법은 세 가지가 있다:

  • 모든 액추에이터에 새로운 속성값인 lengthrange 값을 명시적으로 제공한다.
  • 액추에이터가 붙어 있는 joint나 tendon의 제한값으로부터 복사 해 온다.
  • 아래에서 설명하는 대로, 자동으로 계산한다. 이 계산에는 많은 옵션들이 있고, XML option 노드의 lengthrange에서 설정 가능하다.