rigidBody
강체 생성
설명
rigidBody
객체는 강체를 나타냅니다. 강체는 모든 트리 구조 로봇 매니퓰레이터의 구성요소입니다. 각 rigidBody
에는 강체가 움직일 수 있는 방식을 정의하는 rigidBodyJoint
객체가 연결되어 있습니다. rigidBodyTree
를 사용해 강체를 조립하여 트리 구조 로봇 모델이 됩니다.
로봇 모델에 강체를 추가하기 위해 addBody
를 호출하기 전에 조인트 객체를 Joint
속성에 설정합니다. 강체가 강체 트리에 있는 상태에서는 강체 간의 관계가 손상되기 때문에 속성을 직접 수정할 수 없습니다. 전체 트리 구조를 수정하려면 replaceJoint
를 사용하십시오.
생성
설명
입력 인수
name
— 강체의 이름
string형 스칼라 | 문자형 벡터
강체의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 이 이름은 rigidBodyTree
객체에서 액세스할 수 있도록 해당 바디에 대해 고유해야 합니다.
속성
Name
— 강체의 이름
string형 스칼라 | 문자형 벡터
강체의 이름으로, string형 스칼라 또는 문자형 벡터로 지정됩니다. 이 이름은 rigidBodyTree
객체에서 찾을 수 있도록 해당 바디에 대해 고유해야 합니다.
데이터형: char
| string
Joint
— rigidBodyJoint
객체
핸들
rigidBodyJoint
객체로, 핸들로 지정됩니다. 기본적으로 조인트는 'fixed'
유형입니다.
Mass
— 강체의 질량
1
kg (디폴트 값) | 숫자형 스칼라
강체의 질량으로,숫자형 스칼라로 지정됩니다(단위: 킬로그램).
CenterOfMass
— 강체의 무게 중심 위치
[0 0 0]
m (디폴트 값) | [x y z]
벡터
강체의 무게 중심 위치로, [x y z]
벡터로 지정됩니다. 이 벡터는 바디 프레임을 기준으로 무게 중심 위치를 설명합니다(단위: 미터).
Inertia
— 강체의 관성
[1 1 1 0 0 0]
kg•m2 (디폴트 값) | [Ixx Iyy Izz Iyz Ixz Ixy]
벡터
강체의 관성으로, 바디 프레임을 기준으로 [Ixx Iyy Izz Iyz Ixz Ixy]
벡터로 지정됩니다(단위: 킬로그램 제곱미터). 벡터의 처음 세 요소는 관성 텐서의 대각선 요소입니다. 벡터의 마지막 세 요소는 관성 텐서의 비대각선 요소입니다. 관성 텐서는 양의 준정부호 대칭 행렬입니다.
Parent
— 강체 부모
rigidBody
객체 핸들
강체 부모로, rigidBody
객체 핸들로 지정됩니다. 강체 조인트는 해당 바디가 부모를 기준으로 움직일 수 있는 방식을 정의합니다. 이 속성은 rigidBodyTree
로봇 모델에 강체가 추가될 때까지 비어 있습니다.
Children
— 강체 자식
rigidBody
객체 핸들로 구성된 셀형 배열
강체 자식으로, rigidBody
객체 핸들로 구성된 셀형 배열로 지정됩니다. 이 강체 자식은 모두 해당 rigid body 객체에 연결됩니다. 이 속성은 rigidBodyTree
로봇 모델에 강체가 추가될 때까지 비어 있으며 이 강체를 부모로 하여 트리에 하나 이상의 다른 바디가 추가됩니다.
Visuals
— 시각적 기하 도형
string형 스칼라로 구성된 셀형 배열 | 문자형 벡터로 구성된 셀형 배열
시각적 기하 도형으로, string형 스칼라로 구성된 셀형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 각 문자형 벡터는 시각적 기하 도형의 유형과 소스를 설명합니다. 예를 들어 메시 파일 link_0.stl
이 강체에 연결된 경우 시각적 기하 도형은 Mesh:link_0.stl
이 됩니다. 시각적 기하 도형은 addVisual
을 사용하여 강체에 추가됩니다.
Collisions
— 충돌 기하 도형
문자형 벡터로 구성된 셀형 배열
충돌 기하 도형으로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 각 문자형 벡터는 collision 객체의 유형과 충돌 기하 도형 관련 파라미터를 설명합니다. 강체의 충돌 기하 도형은 addCollision
함수와 clearCollision
함수를 사용하여 수정할 수 있습니다.
객체 함수
copy | Create selective deep copy of rigid body |
addCollision | 강체에 충돌 기하 도형 추가 |
addVisual | 강체에 시각적 기하 데이터 추가 |
clearCollision | 연결된 충돌 기하 도형을 모두 지우기 |
clearVisual | 시각적 기하 도형 모두 지우기 |
getVisual | Get visual geometries of the rigid body |
예제
강체 트리에 강체와 조인트 연결하기
강체 트리에 강체와 해당 조인트를 추가합니다. 각 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) --------------------
Denavit-Hartenberg 파라미터를 사용하여 매니퓰레이터 로봇 빌드하기
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;
첫 번째 강체를 만들고 로봇에 추가합니다. 강체를 추가하려면 다음을 수행하십시오.
rigidBody
객체를 만들고 고유한 이름을 지정합니다.rigidBodyJoint
객체를 만들고 고유한 이름을 지정합니다.setFixedTransform
으로 DH 파라미터를 사용하여 바디-바디 변환을 지정합니다. DH 파라미터의 마지막 요소인theta
의 경우 이에 해당하는 각도는 조인트 위치에 따라 달라지므로 무시됩니다.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
참고 문헌
[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 Computer. 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++ 코드를 생성할 수 있습니다.
사용법 관련 참고 사항 및 제한 사항:
생성된 코드에서 rigidBody
객체에 더 많은 충돌 기하 도형을 추가하려면 우선 강체에 충돌 기하 도형을 추가할 때 MaxNumCollisions
로 상한으로 지정하는 구문을 사용하여 rigidBody
객체를 생성해야 합니다. 기본적으로 코드 생성 중에는 MaxNumCollisions
가 0
으로 설정되며, addCollision
함수를 사용하여 강체에 충돌 기하 도형을 추가하면 오류가 발생합니다.
데이터 사용량을 최소화하려면 강체에서 예상되는 충돌 기하 도형 개수에 가까운 수로 상한을 설정하십시오.
MATLAB® 인터프리터형 실행의 경우, MaxNumCollisions
인수는 아무런 영향을 미치지 않습니다.
버전 내역
R2016b에 개발됨R2019b: rigidBody
로 변경된 이름
객체 이름이 robotics.RigidBody
에서 rigidBody
로 바뀌었습니다. 모든 객체 생성에 rigidBody
를 사용하십시오.
참고 항목
rigidBodyJoint
| rigidBodyTree
| addBody
| replaceJoint
| addCollision
| addVisual
| getVisual
| clearCollision
| clearVisual
도움말 항목
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)