Main Content

강체 트리 로봇 모델

강체 트리 모델은 로봇 구조의 표현입니다. 매니퓰레이터 또는 기타 기구학 트리와 같은 로봇을 나타내기 위해 사용할 수 있습니다. 이러한 모델을 만들려면 rigidBodyTree 객체를 사용합니다.

강체 트리는 조인트(rigidBodyJoint)를 통해 연결된 강체(rigidBody)로 구성됩니다. 각 강체에는 트리에서 부모 바디를 기준으로 바디가 움직이는 방식을 정의하는 조인트가 있습니다. 각 조인트(setFixedTransform)에 고정 변환을 설정하여 한 바디에서 다음 바디로의 변환을 지정합니다.

강체 트리 모델에서 바디를 추가하거나 바꾸거나 제거할 수 있습니다. 특정 바디의 조인트도 바꿀 수 있습니다. rigidBodyTree 객체는 관계를 유지하고 이 관계를 반영하도록 rigidBody 객체 속성을 업데이트합니다. getTransform을 사용하여 서로 다른 바디 프레임 간에 변환을 가져올 수도 있습니다.

강체 트리 컴포넌트

베이스

모든 강체 트리에는 베이스가 있습니다. 베이스는 세계 좌표 프레임을 정의하며 강체의 첫 번째 연결점입니다. 베이스는 수정할 수 없지만 Name 속성은 예외입니다. 강체 트리의 BaseName 속성을 수정하여 이름을 수정할 수 있습니다.

강체

강체는 강체 트리 모델의 기본 구성요소로 rigidBody를 사용하여 생성합니다. 링크라고 불리기도 하는 강체는 변형할 수 없는 입체 바디를 나타냅니다. 하나의 강체에서 임의의 두 점 사이 거리는 일정하게 유지됩니다.

여러 바디가 있는 강체 트리에 추가된 강체의 경우 자신과 연결된 부모 바디 또는 자식 바디(Parent 속성 또는 Children 속성)를 갖습니다. 부모 바디는 이 강체가 연결되는 바디이며 로봇 베이스일 수도 있습니다. 자식 바디는 강체 트리의 베이스에서 이 바디 다운스트림에 연결되는 모든 바디를 말합니다.

각 강체는 자신과 연결된 좌표 프레임을 가지고 있으며 rigidBodyJoint 객체를 포함합니다.

조인트

각 강체에는 부모 바디를 기준으로 해당 강체의 모션을 정의하는 조인트가 하나 있습니다. 조인트는 로봇 모델에서 두 개의 강체를 연결하는 연결점입니다. 여러 조인트 또는 서로 다른 모션 축이 있는 물리적 단일 바디를 나타내려면 여러 rigidBody 객체를 사용합니다.

rigidBodyJoint 객체는 고정 조인트, 회전 조인트, 직선 조인트를 지원합니다.

이러한 조인트는 유형에 따라 다음과 같은 모션을 허용합니다.

  • 'fixed' — 모션이 없습니다. 바디는 자신의 부모에 견고하게 연결되어 있습니다.

  • 'revolute' — 회전 모션만 가능합니다. 바디는 자신의 부모를 기준으로 하여 조인트를 중심으로 회전합니다. 위치 제한은 모션 축을 중심으로 최소 각위치와 최대 각위치를 정의합니다(단위: 라디안).

  • 'prismatic' — 평행 이동 모션만 가능합니다. 바디는 부모를 기준으로 모션 축을 따라 선형으로 움직입니다.

각 조인트에는 JointAxis 속성으로 정의된 모션 축이 있습니다. 조인트 축은 회전 축(회전 조인트) 또는 평행 이동 축(직선 조인트)을 정의하는 3차원 단위 벡터입니다. HomePosition 속성은 특정 조인트의 홈 위치를 정의합니다. 홈 위치는 위치 제한 범위 안의 한 지점입니다. homeConfiguration을 사용하여 로봇의 홈 컨피규레이션을 반환합니다. 홈 컨피규레이션은 모델 내 모든 조인트 홈 위치의 모음입니다.

조인트에는 부모 바디 좌표 프레임과 자식 바디 좌표 프레임 간의 고정 변환을 정의하는 속성도 있습니다. 이 속성은 setFixedTransform 메서드를 통해서만 설정할 수 있습니다. 변환 파라미터를 입력하는 방법에 따라 이 메서드를 사용하여 JointToParentTransform 속성과 ChildToJointTransform 속성 중 하나가 설정됩니다. 다른 한 속성은 단위 행렬로 설정됩니다. 다음 이미지는 각 속성이 무엇을 의미하는지 보여줍니다.

  • JointToParentTransform은 부모 바디 프레임과 관계가 있는 자식 바디의 조인트 위치를 정의합니다. JointToParentTransform이 단위 행렬인 경우 부모 바디와 조인트 프레임이 일치합니다.

  • ChildToJointTransform은 자식 바디 프레임과 관계가 있는 자식 바디의 조인트 위치를 정의합니다. ChildToJointTransform이 단위 행렬인 경우 자식 바디와 조인트 프레임이 일치합니다.

참고

실제 조인트 위치는 이 Joint 객체의 일부가 아닙니다. 로봇 모델은 상태가 없습니다. 부모 조인트 프레임과 자식 조인트 프레임 사이에 중간 변환이 있습니다. 이 중간 변환은 모션 축을 따라 조인트의 위치를 정의합니다. 이 변환은 로봇 컨피규레이션에 정의되어 있습니다. 로봇 컨피규레이션 항목을 참조하십시오.

로봇 컨피규레이션

로봇을 완전히 조립하고 다양한 바디 간의 변환을 정의한 후 로봇 컨피규레이션을 생성할 수 있습니다. 컨피규레이션은 로봇의 모든 조인트 위치를 해당 조인트 이름으로 정의합니다.

homeConfiguration을 사용하여 각 조인트의 HomePosition 속성을 가져오고 홈 컨피규레이션을 생성합니다.

로봇 컨피규레이션은 구조체로 구성된 배열로 주어집니다.

config = homeConfiguration(robot)
config = 

  1×6 struct array with fields:

    JointName
    JointPosition
배열의 각 요소는 로봇 조인트 중 하나의 이름과 위치를 포함하는 구조체입니다.
config(1)
ans = 

  struct with fields:

        JointName: 'jnt1'
    JointPosition: 0

randomConfiguration을 사용하여 모든 조인트 제한을 준수하는 무작위 컨피규레이션을 생성할 수도 있습니다.

show를 사용하여 Figure에 로봇을 플로팅하려면 로봇 컨피규레이션을 사용합니다. 또한 getTransform을 사용하여 특정 컨피규레이션으로 두 바디 프레임 간의 변환을 가져올 수도 있습니다.

지정된 엔드 이펙터 자세로 로봇 컨피규레이션을 가져오려면 inverseKinematics를 사용합니다. 이 알고리즘은 지정된 강체의 특정 자세를 구현하기 위해 필요한 조인트 각도를 구합니다.

참고 항목

|

관련 항목