Main Content

rigidBody

설명

rigidBody 객체는 강체를 나타냅니다. 강체는 모든 트리 구조 로봇 매니퓰레이터의 구성요소입니다. 각 rigidBody에는 강체가 움직일 수 있는 방식을 정의하는 rigidBodyJoint 객체가 연결되어 있습니다. rigidBodyTree를 사용해 강체를 조립하여 트리 구조 로봇 모델이 됩니다.

로봇 모델에 강체를 추가하기 위해 addBody를 호출하기 전에 조인트 객체를 Joint 속성에 설정합니다. 강체가 강체 트리에 있는 상태에서는 강체 간의 관계가 손상되기 때문에 속성을 직접 수정할 수 없습니다. 전체 트리 구조를 수정하려면 replaceJoint를 사용하십시오.

생성

설명

예제

body = rigidBody(name)은 지정한 이름으로 강체를 만듭니다. 기본적으로 바디에는 고정 조인트가 함께 합니다.

입력 인수

모두 확장

강체의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 이 이름은 rigidBodyTree 객체에서 액세스할 수 있도록 해당 바디에 대해 고유해야 합니다.

속성

모두 확장

강체의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 이 이름은 rigidBodyTree 객체에서 찾을 수 있도록 해당 바디에 대해 고유해야 합니다.

데이터형: char | string

rigidBodyJoint 객체로, 핸들로 지정됩니다. 기본적으로 조인트는 'fixed' 유형입니다.

강체의 질량으로,숫자형 스칼라로 지정됩니다(단위: 킬로그램).

강체의 무게 중심 위치로, [x y z] 벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 무게 중심 위치를 설명합니다(단위: 미터).

강체의 관성으로, 바디 프레임을 기준으로 [Ixx Iyy Izz Iyz Ixz Ixy] 벡터로 지정됩니다(단위: 킬로그램 제곱미터). 벡터의 처음 세 요소는 관성 텐서의 대각선 요소입니다. 벡터의 마지막 세 요소는 관성 텐서의 비대각선 요소입니다. 관성 텐서는 양의 준정부호 대칭 행렬입니다.

강체 부모로, rigidBody 객체 핸들로 지정됩니다. 강체 조인트는 해당 바디가 부모를 기준으로 움직일 수 있는 방식을 정의합니다. 이 속성은 rigidBodyTree 로봇 모델에 강체가 추가될 때까지 비어 있습니다.

강체 자식으로, rigidBody 객체 핸들로 구성된 셀형 배열로 지정됩니다. 이 강체 자식은 모두 해당 강체 객체에 연결됩니다. 이 속성은 rigidBodyTree 로봇 모델에 강체가 추가될 때까지 비어 있으며 이 강체를 부모로 하여 트리에 하나 이상의 다른 바디가 추가됩니다.

시각적 기하 도형으로, string형 스칼라로 구성된 셀형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 각 문자형 벡터는 시각적 기하 도형의 유형과 소스를 설명합니다. 예를 들어 메시 파일 link_0.stl이 강체에 연결된 경우 시각적 기하 도형은 Mesh:link_0.stl이 됩니다. 시각적 기하 도형은 addVisual을 사용하여 강체에 추가됩니다.

충돌 기하 도형으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 각 문자형 벡터는 충돌 객체의 유형과 충돌 기하 도형 관련 파라미터를 설명합니다. 강체의 충돌 기하 도형은 addCollision 함수와 clearCollision 함수를 사용하여 수정할 수 있습니다.

객체 함수

copyCreate a deep copy of rigid body
addCollisionAdd collision geometry to rigid body
addVisual강체에 시각적 기하 데이터 추가
clearCollisionClear all attached collision geometries
clearVisualClear all visual geometries

예제

모두 축소

강체 트리에 강체와 해당 조인트를 추가합니다. 각 rigidBody 객체는 rigidBodyJoint 객체를 포함하며 addBody를 사용하여 rigidBodyTree에 추가해야 합니다.

강체 트리를 만듭니다.

rbtree = rigidBodyTree;

고유한 이름을 가진 강체를 만듭니다.

body1 = rigidBody('b1');

회전 조인트를 만듭니다. 기본적으로 rigidBody 객체에는 고정 조인트가 함께 합니다. body1.Joint 속성에 새 rigidBodyJoint 객체를 할당하여 조인트를 바꿉니다.

jnt1 = rigidBodyJoint('jnt1','revolute');
body1.Joint = jnt1;

강체를 트리에 추가합니다. 강체를 연결할 바디 이름을 지정합니다. 이 바디가 첫 번째 바디이므로 트리의 베이스 이름을 사용합니다.

basename = rbtree.BaseName;
addBody(rbtree,body1,basename)

트리에서 showdetails를 사용하여 강체와 조인트가 제대로 추가되었는지 확인합니다.

showdetails(rbtree)
--------------------
Robot: (1 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1           b1         jnt1     revolute             base(0)   
--------------------

Puma560® 로봇의 DH(Denavit-Hartenberg) 파라미터를 사용하여 로봇을 빌드합니다. 각 강체는 한 번에 하나씩 추가되며, joint 객체로 자식-부모 변환이 지정됩니다.

DH 파라미터는 각 강체가 부모에 연결되는 관계를 나타내는 로봇의 기하를 정의합니다. 편의를 위해 Puma560 로봇의 파라미터를 행렬로 설정합니다[1]. Puma 로봇은 직렬 체인 매니퓰레이터입니다. DH 파라미터는 이전 조인트 연결에 해당하는 행렬의 이전 행을 기준으로 합니다.

dhparams = [0   	pi/2	0   	0;
            0.4318	0       0       0
            0.0203	-pi/2	0.15005	0;
            0   	pi/2	0.4318	0;
            0       -pi/2	0   	0;
            0       0       0       0];

로봇을 빌드할 강체 트리 객체를 만듭니다.

robot = rigidBodyTree;

첫 번째 강체를 만들고 로봇에 추가합니다. 강체를 추가하려면 다음을 수행하십시오.

  1. rigidBody 객체를 만들고 고유한 이름을 지정합니다.

  2. rigidBodyJoint 객체를 만들고 고유한 이름을 지정합니다.

  3. setFixedTransform으로 DH 파라미터를 사용하여 바디-바디 변환을 지정합니다. DH 파라미터의 마지막 요소인 theta의 경우 이에 해당하는 각도는 조인트 위치에 따라 달라지므로 무시됩니다.

  4. addBody를 호출하여 로봇의 베이스 프레임에 첫 번째 바디 조인트를 연결합니다.

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

나머지 강체를 만들고 로봇에 추가합니다. addBody 호출하여 연결할 때 이전 바디 이름을 지정합니다. 각 고정 변환은 이전 조인트 좌표 프레임을 기준으로 합니다.

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

showdetails 함수 또는 show 함수를 사용하여 로봇이 올바르게 빌드되었는지 확인합니다. showdetails 함수는 MATLAB® 명령 창에 모든 바디를 나열합니다. show 함수는 주어진 컨피규레이션에서의(기본적으로 홈 컨피규레이션) 로봇을 표시합니다. axis 호출로 축 제한을 수정하고 축 레이블을 숨깁니다.

showdetails(robot)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1        body1         jnt1     revolute             base(0)   body2(2)  
   2        body2         jnt2     revolute            body1(1)   body3(3)  
   3        body3         jnt3     revolute            body2(2)   body4(4)  
   4        body4         jnt4     revolute            body3(3)   body5(5)  
   5        body5         jnt5     revolute            body4(4)   body6(6)  
   6        body6         jnt6     revolute            body5(5)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

{"String":"","Tex":[],"LaTex":[]}

참조

[1] Corke, P. I., and B. Armstrong-Helouvry. “A Search for Consensus among Model Parameters Reported for the PUMA 560 Robot.” Proceedings of the 1994 IEEE International Conference on Robotics and Automation, IEEE Comput. Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

참고 문헌

[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.

[2] Siciliano, Bruno. Robotics: Modelling, Planning and Control. London: Springer, 2009.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2016b에 개발됨

모두 확장